文档库 最新最全的文档下载
当前位置:文档库 › 实验一 顺序表

实验一 顺序表

实验一  顺序表
实验一  顺序表

实验一顺序表

一、预备知识

1.顺序表的存储结构形式及其描述

2.顺序表的建立、查找、插入和删除操作

二、实验目的

1.掌握顺序表的存储结构形式及其描述

2.掌握顺序表的建立、查找、插入和删除操作

三、实验内容

1.编写函数,输入一组整型元素序列,建立一个顺序表。

2.编写函数,实现对该顺序表的遍历。

3.编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则返回错误信息。

4.编写函数,实现在顺序表的第i个位置上插入一个元素x的算法。

5.编写函数,实现删除顺序表中第i个元素的算法。

6.编写利用有序表插入算法建立一个有序表的函数。

7.编写函数,实现输入一个元素x,把它插入到有序表中,使顺序表依然有序。

四、实验说明

1.顺序表的存储定义

#define MAXSIZE 100 //顺序表的最大元素个数

typedef int ElemType;//顺序表的元素类型

typedef struct

{ElemType elem[MAXSIZE];//静态线性表

int length; //顺序表的实际长度

} SqList;//顺序表的类型名

举例4:

#include

#define MaxSize 100

typedef int DataType;

typedef struct//定义结构体Seqlist

{

DataType list[MaxSize];

int size;

} SeqList;

int ListLength(SeqList L)//当前数据元素个数

{

return L.size;

}

int ListInsert(SeqList *L,int i,DataType x)

{

int j;

if(L->size>=MaxSize)

{

printf("顺序表已满无法插入!\n");

return 0;

}

else if(i<0||i>L->size)

{

printf("i is error");

return 0;

}

else

{

for(j=L->size; j>i-1; j--)L->list[j]=L->list[j-1];

L->list[i-1]=x;

L->size++;

return 0;

}

}

int main(void)

{

SeqList La;

int i,x;

int n,m;//线性表长度

printf("请输入线性表La的长度:");

scanf ("%d",&n);

La.size=n;

printf("请输入线性表La中的元素:");

for(i=0; i

scanf ("%d",&La.list[i]);

printf("请输入要插入到线性表La中的数字x和插入的位置i:"); scanf("%d%d",&x,&i);

ListInsert(&La,i,x);

printf("线性表La=");

for(i=0; i

printf("%d ",La.list[i]);

return 0;

}

五、注意问题

1.插入、删除时元素的移动原因、方向及先后顺序。

2.理解不同的函数形参与实参的传递关系。

六、实验报告

根据实验情况和结果撰写并递交实验报告。

实验一.顺序表验证实验

线性表 实验一顺序表操作验证 1. 实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶掌握数据结构及算法的程序实现的基本方法。 2. 实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 3. 实现提示 首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。 const int MaxSize=10; template //定义模板类SeqList class SeqList { public: SeqList( ){length=0;} //无参构造函数 SeqList(T a[ ], int n);//有参构造函数 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; 其次,建立含有n个数据元素的顺序表,即设计构造函数。算法如下: 最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。

顺序表 ⑴插入算法 ⑵删除算法 ⑶查找算法

线性表班级:_________ 学号:_____________ 姓名:___________ 成绩:_________ 实验一顺序表操作验证 一、实验目的 二、实验内容 三、设计与编码 a)本实验用到的理论知识 实验用到的理论知识,实现理论与实践相结合。总结尽量简明扼要,并与本次实验密切相关。 b)算法设计 对本次实验内容设计c++类定义,设计算法完成每个成员函数。 c)编码 将算法转化为c++程序,设计主函数完成对各成员函数的调用。 四、运行与调试 a)在调试程序的过程中遇到什么问题,是如何解决的? b)设计了哪些设计数据?测试结果是什么? c)程序运行的结果如何? 五、实验小结 说明:1.实验报告用A4纸打印。 2.实验标题用黑体小三加粗。 3.每节标题用黑体小四加粗。 4.正文用宋体五号字。

线性表练习题(答案)

第2章线性表 一选择题 下列程序段的时间复杂度为( C )。 for( int i=1;i<=n;i++) for( int j=1;j<= m; j++) A[i][j] = i*j ; A. O(m2) B. O(n2) C. O(m*n) D. (m+n) 下面关于线性表的叙述中,错误的是哪一个?(B ) A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 线性表是具有n个( C )的有限序列(n>0)。 A.表元素B.字符C.数据元素D.数据项 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。 A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。 A.单链表B.仅有头指针的单循环链表 C.双链表D.仅有尾指针的单循环链表 设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链表 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用( D )存储方式最节省运算时间。 A.单链表B.双链表C.单循环链表D.带头结点的双循环链表 链表不具有的特点是( B ) A.插入、删除不需要移动元素B.可随机访问任一元素 C.不必事先估计存储空间D.所需空间与线性长度成正比 下面的叙述不正确的是(B,C ) A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关 C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。 A. O(0) B. O(1) C. O(n) D. O(n2) 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为(C )。 A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1) 线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为( C )A.O(i)B.O(1)C.O(n)D.O(i-1) 循环链表H的尾结点P的特点是(A )。 A.P->next=H B.P->next= H->next C.P=H D.P=H->next 完成在双循环链表结点p之后插入s的操作是(D );

实验一 顺序表操作实现

实验一顺序表操作实现 实验日期:2017 年 3 月 6 日 实验目的及要求 1. 熟练掌握线性表的基本操作在顺序存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的顺序存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数调用的参数传递、指针类型的应用)。实验内容 已知程序文件seqlist.cpp已给出学生身高信息顺序表的类型定义和基本运算函数定义。 (1)顺序表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; (2)基本运算函数原型 void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/

任务一 创建程序文件seqlist.cpp,其代码如下所示,理解顺序表类型Seqlist和基本运算函数后回答下列问题。 /*seqlist.cpp程序文件代码*/ #include #include #define MAX 50 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/ /*置一个空表*/ void initList(Seqlist *lp) { lp->last=0; } /*建一个学生顺序表*/ void createList(Seqlist *lp) { FILE *fp; int xh ,sex; float sg; if((fp=fopen("records.txt","r"))==NULL) { Error("can not open file !"); } while(!feof(fp)) { fscanf(fp,"%d%f%d",&xh,&sg,&sex); lp->data[lp->last].xh=xh; lp->data[lp->last].sg=sg; lp->data[lp->last].sex=sex; lp->last++; } fclose(fp);

Java程序设计-实验报告1-模板 (1)

实验报告 课程名称Java程序设计 实验项目实验一类和对象 系别_________计算机_________ 专业/班级_______计算机类/1402______ 姓名_____李馨雪________ 实验日期______2015.10.10______ 成绩_______________________ 指导教师

一、实验题目:实验一类和对象 二、实验内容: (1)用类描述计算机中CPU的速度和硬盘的容量。要求Java应用程序有4个类,名字分别是PC、CPU、HardDisk和Test,其中Test是主类。 1)PC类与CPU类和HardDisk类关联的UML图如图所示。 其中,CPU类要求getSpeed()返回speed的值,setSpeed(int m)方法 将参数m的值赋值给speed。 HardDisk类要求getAmount()返回amount的值,setAmount(int m)方 法将参数m的值赋值给amount。 PC类要求setCPU(CPU c)将参数c的值赋值给cpu,要求setHardDisk (HardDisk h)方法将参数h的值赋值给HD,要求show()方法能显示 cpu的速度和硬盘的容量。 2)主类Test的要求 main()方法中创建一个CPU对象cpu,其speed设置为2200; main()方法中创建一个HardDisk对象disk,其amount设置为200; main()方法中创建一个PC对象pc, pc调用setCPU方法,实参是cpu;调用setHardDisk方法,实参是 disk;调用show方法。 (2)设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下: 1)编写接口Animal,有2个抽象方法cry()和getAnimaName(); 2)编写模拟器类Simulator,该类有一个playSound(Animal animal)方法,其形参是Animal类型,可以调用实现Animal接口的类所重写的cry()方法播放具体动物的声音,调用重写方法显示动物种类的名称; 3)编写实现Animal接口的Dog类和Cat类。具体的UML图如下所示:4)编写主类Application,其main方法中至少包含如下代码: Simulator si=new Simulator();

线性表的顺序存储结构定义和基本操作算法实现

/************线性表的顺序存储结构定义和基本操作算法实现************/ #include "stdio.h" /***********************线性表的顺序存储结构定义*******************/ #define MAX 11 /*线性表可能达到的最大长度值*/ typedef int datatype; typedef struct {datatype data[MAX]; int last;}list; /************************1.线性表的初始化***************************/ void init(list *lp) {lp->last=0;} /************************2.求线性表的长度***************************/ int length(list *lp) { return (lp->last);} /***************3.插入运算,在表第i个位置插入一个值为x的新元素******/ void insert(list *lp,int i,datatype x) { int j; if(lp->last==MAX-1) printf("Overflow!\n"); /*表已满*/ else if(i<1||i>lp->last+1) printf("Error!\n"); /*插入位置错误*/ else {for(j=lp->last;j>=i;j--) lp->data[j+1]=lp->data[j]; /*数据元素后移*/ lp->data[i]=x; /*插入x */ lp->last++; /*表长度加1*/ } } /***************4.删除运算,在表中删除第i个数据元素***************/ void delete(list *lp,int i) { int j; if(i<1||i>lp->last) /*检查空表及删除位置的合法性*/ printf("The %dth element is not exist!",i); /*不存在第i个元素*/ else {for(j=i+1;j<=lp->last;j++) lp->data[j-1]=lp->data[j]; /*向前移动元素*/ lp->last--; /*表长度减1 */ } } /*****************5.查找运算,在表中查找x数据元素*****************/ int locate(list *lp,datatype x) { int i=lp->last; while(i>0 && lp->data[i]!=x)i--; return i;

实验报告一顺序表的操作

《数据结构》实验报告一 系别:班级: 学号:姓名: 日期:指导教师: 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 从键盘输入10个整数,产生顺序表,并输入结点值。 从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。 从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 三、源程序及注释:

#include <> /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/ void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ =0;

实验报告模板1(1)

湖北民族学院信息工程学院实验报告 (电气、电子类专业用) 班级:000000 姓名:00000 学号:0000000000000 实验成绩: 实验时间:2019年6月10日5-8节实验地点:自动控制原理实验室课程名称:电力电子技术与matlab仿真实验类型:设计型□验证型□综合型□实验题目:三相桥式全控整流及有源逆变电路 实验仪器:装有matlab软件的电脑一台

(1)交流电压源的参数设置 三相电源的相位互差120°,设置交流峰值相电压为100V、频率为60Hz。(2)负载的参数设置 H =C R Ω L , inf , 45= =

本实验中只要改变参数对话框的数值的大小,即改 变了触发信号的控制角。打开仿真 ode23tb 0.02s 启动仿真。 打开仿真/参数窗后,选择ode23tb 设置好各模块参数后,启动仿真;改变触发角 3、有源逆变带电阻电感性负载的仿真 (1)各模块参数设置同上

Continuous pow ergui v +- Ud alpha_deg AB BC CA Block pulses Synchronized 6-Pulse Generator Scope i +- Id i +-IC i +-IB i +- IA 0Constant2 30 Constant1 v +- CA C v +- BC B v +-AB A + RLC g A B C + - Bridge Iabc id ud Uabc 6pulse 2 时三相电压、三相电流、触发信号、负载电压和负载电流的波形

图 4=120时三相电压、三相电流、触发信号、负载电压和负载电流的波形图=150时三相电压、三相电流、触发信号、负载电压和负载电流的波形

实验1顺序表和链表基本操作(给学生)

实验一、二:线性表的应用 班级学号姓名 一、实验预备知识 1 复习C++中编写函数的相关内容。 2 复习如何用主函数将多个函数连在一起构成一个C++完整程序。 二、实验目的 1 掌握线性表的顺序和链式存储结构 2 熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3 熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1 编写初始化并创建线性表和输出线性表的算法。 2 编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3 编写一个主函数,将上面函数连在一起,构成一个完整的程序。 4将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验步骤 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。 3.编写顺序表输出算法。(内存中开辟的单元数为8) 4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。 3.编写单链表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。 五、实验结果 1.给出程序清单及输入/输出结果。 2.实验过程中遇到的问题、解决方法及心得体会。

顺序表实验报告

《数据结构》实验报告一 系别:嵌入式系统工程系班级:嵌入式11003班 学号:11160400314 姓名:xxx 日期:2012年4月9日指导教师XX 一、上机实验的问题和要求: 顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个整数,产生顺序表,并输入结点值。 2.从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找 不到,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出顺序表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 创建一个顺序表,实现对顺序表的插入,查找,删除等功能。 三、源程序及注释: #include /*顺序表的定义:*/ #define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct { DataType data[ListSize]; /*向量data用于存放表结点*/ int length; /*当前的表长度*/ }SeqList; /*子函数的声明*/

void CreateList(SeqList * L,int n); /*创建顺序表函数*/ int LocateList(SeqList L,DataType x); /*查找顺序表*/ void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/ void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/ void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/ void main() { SeqList L; int n=10,x,i; /*欲建立的顺序表长度*/ L.length=0; /*调用创建线性表函数*/ printf(“create function:\n”); CreateList(&L,n); /*建立顺序表*/ PrintList(L,n); /*打印顺序表*/ /*调用查找函数*/ printf(“search function:\n”); printf("input the data you want to search:"); scanf("%d",&x); i=LocateList(L,x); /*顺序表查找*/ if (i==0) printf("sorry,don't find %d!\n\n",x); else printf("i have find the %d,it locate in %d!\n\n",x,i); /*调用插入函数*/ printf(“Insert function:\n”); printf("输入要插入的位置:(input the position:)"); scanf("%d",&i); printf("输入要插入的元素:(input the data:)"); scanf("%d",&x); InsertList(&L,x,i); /*顺序表插入 */ PrintList(L,n); /*打印顺序表 */ /*调用删除函数*/ printf(“delete function:\n”); printf("输入要删除的位置:(input the position:)"); scanf("%d",&i); DeleteList(&L,i); /*顺序表删除 */ PrintList(L,n); /*打印顺序表 */

化学实验报告模板1(完整版)

报告编号:YT-FS-5980-64 化学实验报告模板1(完 整版) After Completing The T ask According To The Original Plan, A Report Will Be Formed T o Reflect The Basic Situation Encountered, Reveal The Existing Problems And Put Forward Future Ideas. 互惠互利共同繁荣 Mutual Benefit And Common Prosperity

化学实验报告模板1(完整版) 备注:该报告书文本主要按照原定计划完成任务后形成报告,并反映遇到的基本情况、实际取得的成功和过程中取得的经验教训、揭露存在的问题以及提出今后设想。文档可根据实际情况进行修改和使用。 2NaOH+CuSO4=Cu(OH)2[此有一个箭头表沉淀]+Na2SO4 氢氧化钠溶液和加入硫酸铜溶液反应成氢氧化铜沉淀和硫酸钠 Cu(OH)2=[等号上面写上条件是加热,即一个三角形]CuO+H2O 氢氧化铜沉淀加热变成氧化铜和水 实验报告: 分为6个步骤: 1):实验目的,具体写该次实验要达到的要求和实现的任务。(比如说,是要研究氢氧化钠溶液中加入硫酸铜溶液的反应状况) 2):实验原理,是写你这次实验操作是依据什么

来完成的,一般你的实验书上都有,你总结一下就行。(就可以用上面的反应方程式) 3):实验用品,包括实验所用器材,液体和固体药品等。 (如酒精灯,滤纸,还有玻璃棒,后两者用于过滤,这个应该是要的吧。) 4):实验步骤:实验书上也有 (就是你上面说的,氢氧化钠溶液中加入硫酸铜溶液生成蓝色沉淀,再加热蓝色沉淀,观察反应现象) 5):实验数据记录和处理。 6):问题分析及讨论 这里填写您企业或者单位的信息 Fill In The Information Of Your Enterprise Or Unit Here

线性表的顺序存储结构定义和基本操作算法实现

#include "" /***********************线性表的顺序存储结构定义*******************/ #define MAX 11 /*线性表可能达到的最大长度值*/ typedef int datatype; typedef struct {datatype data[MAX]; int last;}list; /************************1.线性表的初始化***************************/ void init(list *lp) {lp->last=0;} /************************2.求线性表的长度***************************/ int length(list *lp) { return (lp->last);} /***************3.插入运算,在表第i个位置插入一个值为 x的新元素******/ void insert(list *lp,int i,datatype x) { int j; if(lp->last==MAX-1) printf("Overflow!\n"); /*表已满*/ else if(i<1||i>lp->last+1) printf("Error!\n"); /*插入位置错误*/ else {for(j=lp->last;j>=i;j--) lp->data[j+1]=lp->data[j]; /*数据元素后移*/ lp->data[i]=x; /*插入x */ lp->last++; /*表长度加1*/ } } /***************4.删除运算,在表中删除第i个数据元素***************/ void delete(list *lp,int i) { int j; if(i<1||i>lp->last) /*检查空表及删除位置的合法性*/ printf("The %dth element is not exist!",i); /*不存在第i个元素*/ else {for(j=i+1;j<=lp->last;j++) lp->data[j-1]=lp->data[j]; /*向前移动元素*/ lp->last--; /*表长度减1 */ } } /*****************5.查找运算,在表中查找x数据元素*****************/ int locate(list *lp,datatype x) { int i=lp->last; while(i>0 && lp->data[i]!=x)i--; return i; }

实验1顺序表和链表基本操作(学生)

实验一线性表运算的实现 班级学号姓名 一、实验预备知识 1.复习C中函数的相关内容。 2.复习如何用主函数将多个函数连在一起构成一个C完整程序。 3.复习多文件结构。 二、实验目的 1.掌握线性表的顺序和链式存储结构 2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1.编写初始化并创建线性表和输出线性表的算法。 2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3.编写有序表的插入和删除运算算法。 4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。 5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验内容 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。(开辟的存储空间大小为8) 3.编写顺序表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.向有序表分别插入20和50,插入后表仍然有序。(修改开辟的存储空间大小为15) 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。 3.编写单链表输出算法。 4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。 5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.分别删除值为25和42的元素,删除后表仍然有序。 五、实验结果 给出程序清单及输入/输出结果 六、总结 1.实验过程中遇到的问题及解决方法 2.收获

顺序存储结构的线性表

顺序存储结构的线性表 线性表是最常用且比较简单的一种结构,它是由有限个数据元素组成的有序集合,每个数据元素有一个数据项或者含多个数据项。例如26个英文字母表(A,B,……Z)是一个线性表,表中每一个数据元素由单个字母组成数据项。又如表5.0.1也是一个线性表,表中含八个数据元素,每一个数据元素由n个选手在该项目的竞赛成绩组成。 线性表具有如下结构特征: (1)均匀性。即同一线性表的名数据元素的数据类型一致且数据项相同。 (2)有序性。表中数据元素之间的相对位置是线性的,即存在性一的“第一个”和“最后一个”数据元素。除第一个 和最后一个外,其他元素前面均只有一个数据元素(直接前趋)和后面均只有一个数据元素(直接后继)。 按照表中数据元素的存储方式分顺序存储结构和链式存储结构两类线性表。 1、序存储结构 顺序存储结构是指用一组地址连续的存储单元依次线性表的元素,通常用数组实现。数组的物理实现是一块连续的存储空间,它是按首址(表中第1个元素的地址)+位移来访问每一个元素。 设 loc(a[i])-----A数组中元素i的内存地址(c<=i<=d);

loc(b[i,j])----Bo数组中(i,j)元素的内存地址 (c1<=I<=d1,c2<=j<=d2); loc(a[i])=loc(a[c])+(i-c)*la,la-------atype类型的长度; loc(b[i,j]=loc(b[c1,c2])+((d2-c2+1)*(i-c1)+(j-c2))*lb,lb----atype 类型长度; 一维数组按照下标递增的顺序访问表中元素; a[c]->a[c+1]->……->a[d] 二维数按照先行后列的顺序访问表中元素: b[c1,c2]->b[c1,c+1]->……b[c1,d2]->……>b[i-1,d2]->b[i,c2]-> ……->b[d1,d2-1]->b[d1,d2] 在数组中,数据元素的下标间接反映了数据据元素的存储地址。而计算机内存是随机存储取的装置,所以在数组中存取一个数据元素只要通过下标计算它的存储地址就行了,数组中任意一个元素的存取时间都相等。从这个意义上讲,数组的存储存储结构是一个随机存取的结构。 问题是,虽然数组的顺序分配结构比较简单,便于随机访问数组中的任一元素。但如果数组要保持线性表的特征的话(由下标指明元素间的有序性),其增删操作的效率比较低。特别,当数组很大时,插入与删除运算颇为费时。因此,比较小的数组或元素不常变(很少进行插入与删除运算)的数组可用作线性表,而对于大的线性表或元素经常变动的线性表,可以采链式存储结构。 2、链式存储结构

实验一.顺序表验证实验

实验一顺序表操作验证 一、实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶掌握数据结构及算法的程序实现的基本方法。 二、实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 三、设计与编码 (a)本实验用到的理论知识 首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。 (b)算法设计 const int MaxSize=10; template //定义模板类SeqList class SeqList { public: SeqList( ){length=0;} //无参构造函数 SeqList(T a[ ], int n);//有参构造函数 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; 其次,建立含有n个数据元素的顺序表,即设计构造函数。算法如下:

最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。 ⑴插入算法 ⑵删除算法 ⑶查找算法 (c)编码 #include #include using namespace std;

实验一顺序表与链表

实验一顺序表与链表 一、实验目的 1、掌握线性表中元素的前驱、后续的概念。 2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。 二、实验预习 说明以下概念 1、线性表: 2、顺序表: 3、链表: 三、实验容和要求 1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。 #include #include #define ERROR 0 #define OK 1 #define INIT_SIZE 5 /*初始分配的顺序表长度*/ #define INCREM 5 /*溢出时,顺序表长度的增量*/ typedef int ElemType; /*定义表元素的类型*/ typedef struct Sqlist{ ElemType *slist; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }Sqlist; int InitList_sq(Sqlist *L); /* 构造一个空的线性表L*/ int CreateList_sq(Sqlist *L,int n); /* 构造顺序表的长度为n */ int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入新的数据元素e,L的长度加1 */ int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/ int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/

IP网络实验报告模板(1)

西安邮电大学 通信与信息工程学院 《IP 网络基础与实验》报告 实验名称: 专业班级: 小组编号: 小组成员: 2016年 5 月 30 日 —————————————————————————— 装 订 线————————————————————————————————

一、实验名称 二、实验目的 1、通过本实验,掌握在WindowsvXP 中配ICS 的方法。 2、通过本实验,理解路由的原理,掌握 Windows Server 2003软路由的配制方法。 三、实验原理 Windows 系列操作系统提供的ICS 组件同样可以解决多台主机共享上网的问题。ICS 被看做是NAT 的一个简版,利用它实现共享上网,可谓是简单易行。 ICS 除了具有NAT 功能外,同样也内置了DHCP 地址分配器以及DNS 域名服务器代理。然而,与NAT 组件不同的是,它为本地局域网分配的IP 地址的网段号只能是192.168.0.0,子网掩码只能是255.255.255.0,而不能进行任意指派;需要注意的是,如果网络中已经存在DHCP 服务器或DNS 服务器,那么ICS 将不会生效。因此,在启用ICS 服务器必须将已开启的DHCP Server 和 DNS Server 服务关闭。 —————————————————————————— 装 订 线—————————————————————————————

主机 交换机 路由器 交换机 主机主机 Hub Hub 主机

172.16.2.1 172.16.3.10 172.16.12.12 10.1.1.1 10.180.30.118 172.16.2.1 Fei_1/1 Fei_1/2

线性表的顺序储存结构

交通大学《算法与数据结构》课程 实验报告 班级:计算机科学与技术2014级2班 实验项目名称:线性表的顺序储存结构 实验项目性质: 实验所属课程:算法与数据结构 实验室(中心): B01407 指导教师:鲁云平 实验完成时间:2016 年 3 月21 日

一、实验目的 1、实现线性表的顺序存储结构 2、熟悉C++程序的基本结构,掌握程序中的头文件、实现文件和主文件之 间的相互关系及各自的作用 3、熟悉顺序表的基本操作方式,掌握顺序表相关操作的具体实现 二、实验容及要求 对顺序存储的线性表进行一些基本操作。主要包括: (1)插入:操作方式为在指定元素前插入、在指定元素之后插入、在指定位置完成插入 (2)删除:操作方式可分为删除指定元素、删除指定位置的元素等,尝试实现逻辑删除操作。 (3)显示数据 (4)查找:查询指定的元素(可根据某个数据成员完成查询操作) (5)定位操作:定位指定元素的序号 (6)更新:修改指定元素的数据 (7)数据文件的读写操作等。 其它操作可根据具体需要自行补充。 要求线性表采用类的定义,数据对象的类型自行定义。 三、实验设备及软件 VC6.0 四、设计方案

㈠题目 线性表的顺序存储结构 ㈡设计的主要思路 1、新建SeqList.h头文件,定义SeqList模板类 2、设计类数据成员,包括:T *data(用于存放数组)、int maxSize (最大可容表项的项数)、int last(当前已存表项的最后位置) 3、设计类成员函数,主要包括: int search(T& x)const;//搜索x在表中位置,函数返回表项序号 int Locate(int i)const;//定位第i个表项,函数返回表项序号 bool getData(int i,T& x)const;//去第i个表项的值 void setData(int i,T& x)//用x修改第i个表项的值 bool Insert(int i,T& x);//插入x在第i个表项之后 bool Remove(int i,T& x); //删除第i个表项,通过x返回表项的值 bool IsEmpty();//判表空否,空则返回true;否则返回false bool IsFull();//判表满否,满则返回true;否则返回false void input(); //输入 void output();//输出 void ofile();/存储在文件中 void ifile();//读取文件并显示 ㈢主要功能 1、建立新表 2、对表进行插入(指定元素前、后以及指定位置插入)、删除(指定 元素删除及指定位置删除)、修改等操作 3、显示当前操作表的全部容 4、存储在文件中 5、从文件中读取表 五、主要代码 ㈠SeqList.h中的主要代码: 1、类成员声明部分: protected: T *data; //存放数组 int maxSize; //最大可容纳表项

实验1 顺序表的操作

实验1 顺序表的操作 一、实验要求 1 建立顺序表 2 顺序表的长度并输出顺序表 3 插入元素的位置和元素 4 删除值为x的元素 5 顺序表倒置 6 将顺序表按升序排序 7 将两个顺序有序表A和B合并为一个有序表C 二、源代码 DS.h #include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; SqList.h #ifndef SQLIST_H_INCLUDED #define SQLIST_H_INCLUDED #include "DS.h" typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; }SqList; void menu(); Status InitList_Sq(SqList &L, int n);/*初始化顺序表*/ Status CreateList_Sq(SqList &L);/*建立顺序表*/

void PrintList_Sq(SqList L);/*输出顺序表*/ Status DeleteList_Sq(SqList &L,int i,ElemType &e);/*删除第i个元素*/ Status DeleteListX_Sq(SqList &L,ElemType x);/*删除值为x的元素*/ Status AdjustList_Sq(SqList &L);/*奇数排在偶数之前*/ Status OrderList_sq(SqList &L, int n);/*插入法生成递增有序表*/ void MergeList_Sq(SqList La, SqList Lb, SqList &Lc );/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/ #endif // SQLIST_H_INCLUDED SqList.cpp #include "SqList.h" void menu() { printf("\t\t\t 顺序表基本操作\n\n"); printf("\t\t\t1.建立顺序表\n"); printf("\t\t\t2.遍历顺序表\n"); printf("\t\t\t3.删除第i 个元素\n"); printf("\t\t\t4.删除值为x 的元素\n"); printf("\t\t\t5.奇数排在偶数之前\n"); printf("\t\t\t6.插入法生成递增有序表\n"); printf("\t\t\t7.两个非递减有序表La和Lb合并成非递减有序表Lc\n"); printf("\t\t\t0.退出\n\n"); } /*初始化顺序表*/ Status InitList_Sq(SqList &L, int n) { L.elem=(ElemType*)malloc(n*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=n; return OK; } /*建立顺序表*/ Status CreateList_Sq(SqList &L) { int n, i; printf("请输入顺序表长度:"); scanf("%d", &n); if(InitList_Sq(L, n)) {

相关文档