1、线性表的操作上机实验实验一 线性表的基本操作一、 上机目的:1、掌握使用Turbo C2.0,或VC上机调试线性表的基本方法;2、掌握顺序表的存储结构形式及其描述和基本运算的实现。3、熟练掌握动态链表结构及有关算法的设计。 4、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和 链接存储结构上的算法思想和实现。二、 上机要求:1、 认真阅读和掌握本上机的程序。2、 上机运行本程序。3、 保存和打印出程序的运行结果,并结合程序进行分析。4、 写出头插法、尾插法建单链表的程序,上机运行。三、 上机内容:线性表(包括顺序结构、链式结构)基本操作:创建、插入、删除、查找等操作的
2、实现;两个有序(包括顺序结构、链式结构)合并成一个有序表。四、实验代码(详细设计):#includeusing namespace std;#define true 1#define false 0#define ok 1#define error 0#define overflow -2typedef int Status;typedef int ElemType;typedef struct LNode /存储结构 ElemType data; struct LNode *next;LNode,*LinkList;void CreateList(LinkList &L,int n) /尾插
3、法创建单链表 LinkList p; L=new LNode; L-next=NULL; /建立一个带头结点的单链表 LinkList q=L; /使q指向表尾 for(int i=1;ip-data; p-next=NULL; q-next=p; q=p; Status GetElem(LinkList L,int i,ElemType &e)/取第i个元素 LinkList p=L-next; int j=1; while(p&jnext; +j; if(!p|ji) return error; /第i个元素不存在 e=p-data; return ok;Status LinkInsert
4、(LinkList &L,int i,ElemType e) /插入 LinkList p=L; int j=0; while(p&jnext; +j; /寻找第i-1个结点 if(!p|ji-1) return error; /i小于1或者大于表长加1 LinkList s=new LNode; /生成新结点 s-data=e; s-next=p-next; /插入L中 p-next=s; return ok; Status ListDelete(LinkList &L,int i,ElemType &e) / 删除 LinkList p=L; LinkList q; int j=0; wh
5、ile(p-next&jnext; +j; if(!(p-next)|ji-1) return error; /删除位置不合理 q=p-next; p-next=q-next; /删除并释放结点 e=q-data; delete(q); return ok;void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) /合并两个顺序链表 LinkList pa,pc,pb; pa=La-next; pb=Lb-next; Lc=pc=La; while(pa&pb) if(pa-datadata) pc-next=pa; pc=pa; pa=pa
6、-next; else pc-next=pb; pc=pb; pb=pb-next; pc-next=pa?pa:pb; delete(Lb); void show(LinkList L) /显示 LinkList p; p=L-next; while(p) coutdata; p=p-next; coutnext; while(p) +i; p=p-next; return i; void xiugai(LinkList L) /修改 int i,j=1; ElemType k; ElemType e,m; LinkList p=L-next; cout请输入要修改的元素位置(0ii; Ge
7、tElem(L,i,e); cout该位置的元素:eendl; coutk; while(p&jnext; +j; m=p-data; p-data=k; cout修改后的单链表显示如下:endl; show(L); void hebing() /合并两个单链表 int a,b; LinkList La,Lb,Lc; cout请输入第一个有序链表的长度:a; cout请输入第一个有序链表的元素共(a个):endl; CreateList(La,a); show(La); cout请输入第二个有序链表的长度:b; cout请输入第二个有序链表的元素共(b个):endl; CreateList(L
8、b,b); show (Lb); MergeList(La,Lb,Lc); cout合并后的有序链表如下:endl; show(Lc);void main() /主函数 int select; int x; ElemType y; LinkList list; for(;) cout 单链表的基本操作endl; cout 1.单链表的创建endl; cout 2.单链表的显示endl; cout 3.单链表的长度endl; cout 4.取第i个位置的元素endl; cout 5.修改第i个位置的元素endl; cout 6.插入元素到单链表里endl; cout 7.删除单链表里的元素end
9、l; cout 8.合并两个单链表endl; cout 9.退出系统endl; coutselect; switch(select) case 1:cout请输入单链表的长度:x; cout请输入x个元素endl; CreateList(list,x); break; case 2: cout单链表显示如下:endl; show(list); break; case 3: int s; cout单链表的长度为:Length(list,s)endl; break; case 4: coutx; while(xLength(list,s) cout输入有误,请重新输入endl; coutx; Ge
10、tElem(list,x,y); cout该位置的元素为:yendl; break; case 5: xiugai(list); break; case 6: coutx; while(xLength(list,s) cout输入有误,请重新输入endl; coutx; couty; LinkInsert( list,x,y); cout插入后单链表显示如下:endl; show(list); break; case 7: coutx; while(xLength(list,s) cout输入有误,请重新输入endl; coutx; ListDelete(list,x,y); cout要删除的元素值:yendl; cout删除后的单链表显示如下:endl; show(list); break; case 8: hebing(); break; case 9: exit(0); break; default : cout输入有误,请重新输入endl; break; 五.运行结果如下:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1