版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验1-2顺序表和链表基本操作 参考答案第 2页 实验 1、2:线性表的应用参考代码 一、实验预备知识 1复习 C 中编写函数的相关内容。 2 复习如何用主函数将多个函数连在一起构成 一个 C 完整程序。 二、实验目的 1掌握线性表的顺序和链式存储结构 2熟练运用线性表在顺序存储方式下的初始化、 创建、输出、插入和删除运算 3熟练运用线性表在链式存储方式下的创建、 输出、插入和删除运算 三、实验要求 1编写初始化并创建线性表和输出线性表的算 法。 2编写对线性表插入和删除运算算法,要判断 位置的合法性和溢出问题。 3编写有序表的插入和删除运算算法。 4编写一个主函数,将上面函数连在一起,构 成
2、一个完整的程序。 5将实验源程序调试并运行,写出输入、输出 结果,并对结果进行分析。 第 3页 四、实验内容 顺序表实验内容: 1给定的线性表为 L= (12,25,7,42,19, 38),元素由键盘输入。 2初始化并建立顺序表。 (开辟的存储空间大小 为 8) 3编写顺序表输出算法。 4依次插入 3、 21、15、99 四个数,分别插入 在第 1、8、4 和 12 位置,每插入一次都要输出一次 顺序表。 5删除第 1,第 9 和第 12个位置上的元素,每 删除一个元素都要输出一次顺序表。 6编写一个排序算法,对线性表中元素从小到 大排列。 7向有序表分别插入 20和 50,插入后表仍然有
3、序。(修改开辟的存储空间大小为 15) 单链表实验内容: 1给定的线性表为 L= (12,25,7,42,19, 38),元素由键盘输入。 2建立一个带表头结点的单链表(前插入法和 尾插入法均可)。 3编写单链表输出算法。 第 4页 4依次插入 3、 21、15、99 四个数,分别插入 在第 1、8、4 和 12 位置,每插入一次都要输出一次 单链表。 5删除第 1,第 9 和第 12个位置上的元素,每 删除一个元素都要输出一次单链表。 6编写一个排序算法,对链表中元素从小到大 排列。 7向有序链表分别插入 20和 50,插入后表仍然 有序。 五、实验结果 顺序表源程序: #include u
4、sing namespace std; const int MAXSIZE=8; /做有序表插入操作时, 将 8 改为 15 typedef int DataType; typedef struct DataType dataMAXSIZE; int length; SeqList; void Init_SeqList(SeqList &L);/ 创建空顺序表算 法 void Show_SeqList(SeqList L);/ 顺序表输出算法 void Create_SeqList(SeqList &L);/ 顺序表创建算 法 第 5页 int Insert_SeqList(S
5、eqList &L,DataType x,int i);/ 顺序表的插入算法 int Delete_SeqList(SeqList &L,int i);/ 顺序表的 删除算法 int Locate_SeqList(SeqList L,DataType x);/ 顺序 表的按值查找算法 void Sort_SeqList(SeqList &L);/ 顺序表的排序算 法 int Insert_SeqList_sort(SeqList &L,DataType X);/有序表的插入算法 void Merge(SeqList LA,SeqList LB,SeqList &
6、amp;LC);/ 两个有序顺序表的合并算法 void menu(); /菜单算法 void main() menu(); void menu()/ 菜单算法 SeqList L; Init_SeqList(L); int m; while(1) coutn 根据所做操作选择以下数字序号: endl; cout1: 创建顺序表 2: 执 第 6页 行插入操作 3: 执行删除操作 endl; cout4: 执行输出操作 5:执行查 找操作 6:执行排序操作 endl; cout7: 执行有序表的插入操作 8:执行有 序表的合并操作 0:退出 n; switch (n) case 1:第 7页 C
7、reate_SeqList(L); couti; coutendlx; coutendl; m=Insert_SeqList(L,x,i); if (m=1) cout 插入操作成功! endl; else if (m=0) cout 插 入 位 置 不 合 法 ! else cout 发生溢出! endl; break; break; case 2: endl; 第 8页 case 3: couti; coutendl; m=Delete_SeqList(L,i); if (m=1) cout 删除操作成功! endl; else if (m=0) cout 删 除 位 置 不 合 法 !
8、endl; else cout 空表! endl; break; case 4: Show_SeqList(L); break; case 5: coutx; coutendl; m=Locate_SeqList(L,x); if (m=0) 第 9页 cout 所查找元素不在顺序表中! endl; else cout 所查找元素是顺序表的第 m 个元素! endl; break; case 6: Sort_SeqList(L); cout 排序操作完成! endl; break; case 7: coutendlx; coutendl; m=Insert_SeqList_sort(L,x);
9、 if (m=1) cout 插入操作成功! endl; else cout 发生溢出! endl; break; case 8: 第 10页 SeqList L1,L2,L3; Init_SeqList(L1); Init_SeqList(L2); Init_SeqList(L3); cout 创 建 有 序 表 1 : endl; Create_SeqList(L1); Sort_SeqList(L1); cout 创建有序表 2:endl; Create_SeqList(L2); Sort_SeqList(L2); cout 有序表 1: endl; Show_SeqList(L1);
10、cout 有序表 2: endl; Show_SeqList(L2); Merge(L1,L2,L3); cout 合并后: endl; Show_SeqList(L3); break; case 0: return; void Init_SeqList(SeqList &L)/ 创建空顺序表算 法 第 11页 L.length=0; void Show_SeqList(SeqList L)/ 顺序表输出算法 if(L.length=0) cout 空表! endl; else for(int i=0;iL.length;i+) coutL.datai ; coutendl; void
11、 Create_SeqList(SeqList &L)/ 顺序表创建算 法 coutL.length; cout 依次输入各个元素的值 :endl; for(int i=0;iL.datai; int Insert_SeqList(SeqList &L,DataType x,int i)/ 顺序表的插入算法 if(MAXSIZE flsw吐楚 /(一crlod-snb s)4snb S0)00C一 宀 H una) 匸+LI46U 一_| xLep_J 32ep_JL+=2ep1 (丄vHd L 丄o)UQ_i也壬)04 ouna) (L+IU6U - KCOL 吐窘二(X e
12、dAlcgecrl Isnbesxsnbesleool -u 一 =una) !6UQ_J 32令亍?=2令1 (+6u1vrH=UD04 ouna) 6U1A=VW Vuna) SHH 6U1)七 第 14页 表的按值查找算法 int i=0; while(iL.length&L.datai!=x) i+; if(iL.length ) return i+1; else return 0; void Sort_SeqList(SeqList &L) / 排序算法 int i,k,j; DataType temp; for(i=0;iL.length-1;i+) k=i; fo
13、r(j=i+1;j=L.length -1;j+) if(L.data jL.data k) k=j; if(i!=k) temp=L.data i; L.data i=L.data k; L.data k=temp; int Insert_SeqList_sort(SeqList &L,DataType x)/ 有序表的插入算法 if(MAXSIZE=L.length) return -1; int i=0; while(iL.length&L.datai=i;j-) 第 15页 L.dataj+1=L.dataj; L.datai=x; L.length+; return
14、1; void Merge(SeqList LA,SeqList LB,SeqList &LC)/ 两个有序顺序表的合并算法 +M 匸+一 二二 Jsepvl兰Jsepol sJSepmlv 三 2ep1)七 (IU6U 一mlv 远Oe$6uv-I K9L 匸+ 一 xgep.vl兰epl (6U.V1壬弓 宀 宀 +M 匸+ Nep.al兰epl 第仃页 k+; while(jLBe ngth) LC.datak=LB.dataj; j+; k+; LC.le ngth=k; 输入输出结果: 图1-1主菜单 L2 25 7 42 19 Ji - - H J F 二-*rr3J 無一
15、!M序 做顺薯 所建芳- - -f ff f 值3 3 的9 9 :6:6素丄 数vbvb2 2 B Be e? ? 元J JT TT TMM I I * * r r - - : : ! ! J JI I L:L:4:4:7:7:L L 请依1212 选择以下数宇序号: 話k査艾嵯 捅所做操生 tei 顽仃有序表 第 18页 图1-2顺序表的创建和输出操作 请输入插入位置:4 请输入插入元素值:第 发生溢出! 图1-3顺序表的插入操作 SS 操缶序 以 JLJn4li12J1 号!rr 序龙 4 詹 表 入t 插 査有 -!-丁 =7.二 f ff fl lf fi i B 3 3请输入删除位
16、置:9 删除位置不合法! 选择以下数宇序号 J 4 ?:棚亍有序表高插入操作8:删亍有序表馬合井操作 4 12 25 ? 42 19 36 21 ffls 紅 US图1-4顺序表的删除操作 根堀逆做圜选择叹下数字序号 儿删亍倉序表由插入撫作 排序操作完成! 根瑪所做操生选择药F数字序号 熾輔黯插入操作 7 12 19 21 2S 膈I爲作 3S 42 亠予2 5 2 5 ff ff ew表 Its序 做JiJi薯 所題迄仃 根1 :4:7:1 :4:7: 做顺薯 所建行仃 H H 狠1 :1 :4:4:7:7:生 选择以下数字序号 2:;:; 击擂入操作醫 12 25 7 42 19 入找序2
17、121 播查有 J J- -UUUU仃 8 8 丸3 3養表 8W -厂-丁 JJ 第 19页 图1-5顺序表的排序操作 请输入插入元素值;50 插入操作成功! 图1-6有序表的插入操作 创建弟庄養丄= 感甦籍的值: 2 4 6 7 有序裘 13 5 7 2 4 6 7 合并后: 12 3 4 图1-7两个有序表的合并操作 单链表的源程序: #i nclude iostream 根1;4:7:7 所做操生选择以下数字序号; 購繍合并操作 醤 1 - -bLrbLr 7 7 二Jr1Jr1 next=NULL; void Create1LinkList(LinkList &L,int n
18、)/ 前插 入法创建单链表的算法 LNode *s; for(int i=1;i=n;i+) s=new LNode; cout 请输入第 is-data; s-next=L-next; L-next=s; void Create2LinkList(LinkList &L,int n)/ 后插 入法创建单链表的算法 LNode *s,*r=L; for(int i=1;i=n;i+) s=new LNode; 第 22页 cout 请输入第 is-data; r-next=s; r=s; r-next=NULL; void PrintLinkList(LinkList L)/ 单链表的
19、输出算 法 if(L-next=NULL) cout 空表! endl; return; cout 当前单链表为: next; while(p) coutdatanext; coutendl; int InsertLinkList(LinkList &L,int X)/单链表的插入算法 int j=0; LNode *p=L,*s; while(p&jnext; j+; if(!p|ji-1) i,DataType 第 23页 return 0; s=new LNode; s-data=x; s-next =p-next ; p-next =s; return 1; int D
20、eleteLinkList(LinkList &L,int i)/ 单链表的 删除算法 if(L-next =NULL) return -1; int j=0; LNode *p=L,*q; while(p-next !=NULL)&(jnext ; j+; if(p-next=NULL)|(ji-1) return 0; q=p-next ; p-next =q-next ; delete q; return 1; void Select_Sort_LinkList(LinkList &L)/ 排序算法(选择排序) if(L-next =NULL) cout 空表,不
21、需要排序! next=NULL) return; for(p=L-next;p-next!=NULL;p=p-next) 链表的 第 24页 s=p; for(q=p-next;q!=NULL;q=q-next) if(q-datadata) s=q; if(s!=p) temp=s-data; s-data=p-data; p-data=temp; cout 排序成功! next!=NULL&p-next-datanext; s=new LNode; s-data=x; s-next=p-next; p-next=s; cout 插入操作成功! next ; p2=L2-next ;
22、 L 3=p3=new LNode; L 3-next =NULL; while(p1&p2) s=new LNode; if(p1-data data ) s-data =p1-data ; p1=p1-next ; else s-data =p2-data ; p2=p2-next ; p3-next =s; p3=s; if(p1) p3-next =p1; if(p2) p3-next =p2; void menu()/ 菜单函数 L2,LinkList 第 26页 L inkList L; Init_LinkList(L); int m; while(1) coutn 根据所
23、做操作选择以下数字序号: endl; cout1: 前插入创建单链表 2: 尾 插入创建单链表 3: 执行插入操作 endl; cout4: 执行删除操作 5: 执行输出 操作 6:执行排序操作 endl; cout7: 执行有序表的插入操作 8: 执行有 序表的合并操作 0:退出 n; switch (n) case 1: couti; Create1LinkList(L,i); PrintLinkList(L); break; case 2: couti; Create2LinkList(L,i); PrintLinkList(L); break; case 3: couti; coute
24、ndlx; coutendl; if (InsertLinkList(L,i,x)=1) cout 插入操作成功! endl; else 第 28页 cout 插 入 位 置 不 合 法! endl; break; case 4: cout一 -AA30- e e- -sese OOC7A-崖弗目确夕吟并 AAendrAAendr break case 5 Prin 产 inkLisf(LX break case p se-easorfLinkLisf(LX break- W3曰 第 32页 case 7: coutendlx; coutendl; Insert2(L,x); break; c
25、ase 8: LinkList L1,L2,L3; Init_LinkList(L1); Init_LinkList(L2); Init_LinkList(L3); cout 创建有序表 1: endl; couti; Create2LinkList(L1,i); Select_Sort_LinkList(L1); cout 创建有序表 2:endl; couti; Create2Li nkList(L2,i); Select_Sort_Li nkList(L2); cout 有序表 1: endl; Prin tL in kList(L1); cout 有序表 2: endl; Prin tLi nkList(L2); Merge(L1,L2,L3); cout 合并后: ! 序 2 2 5 5 OB OB 字 数 作 T T 操 以表AJ AJ 1 1插 xsl xsl 操创律 做有 据前盹竝 ex ex 根
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建材卖场灯箱广告合同
- 股权增资协议书范本
- 二手木材购销协议
- 小区视频监控设备招标文件
- 户口迁移的承诺保证书
- 房屋买卖合同的简单格式
- 长期租赁汽车合同
- 招标文件的撰写
- 招标文件编制指南
- 室外儿童游乐场玩具购销协议
- 纸尿裤及护理垫采购投标方案
- 2023年秋季国家开放大学-02884-社会保障基础期末考试题带答案
- 应用文写作第六讲合同
- 20以内加减法口算题100道计时精编版(共计3500道)可直接打印
- 井下绳索取芯的自动化与智能化发展研究
- 10kV电力电缆熔接中间接头制作
- 《高职院校体育与健康教程》课程标准
- 贺银成总结的病例分析诊断公式及各科金口诀
- 整理我的小书桌(课件)小学劳动二年级通用版
- 应急救援知识培训教育记录
- 论文《英汉语对比研究的基本方法与创新》-阅读汇报PPT
评论
0/150
提交评论