




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、链表程序设计训练一 实验目的l 使学生掌握Visual C+ 6.0环境下C+语言程序调试与排错方法;l 使学生掌握单向链表结构并实现插入、删除、建表等基本功能操作;l 使学生掌握应单向循环链表结构并实现插入、删除、建表等基本功能操作;l 使学生掌握双向链表结构并实现插入、删除、建表等基本功能操作;l 使学生熟悉应用链表解决实际问题;二 实验环境l 所需硬件环境为微机;l 所需软件环境为Microsoft Visual C+ 6.0或Code:Blocks ;三 实验内容(二)、设计单向循环链表并实现其构建(包括正序及逆序建表)、插入、删除、销毁等基本操作算法#include<iostr
2、eam.h>#include<stdlib.h>#define OVERFLOW -2#define OK 1#define FAILURE 0#define TRUE 1#define FALSE 0#define ERROR -1typedef int ElemType;typedef int Status;typedef struct Node ElemType e; struct Node *next;ListNode,*list;Status DestroyList_Sl(list L)/销毁 list p; if(!L) return ERROR;/*单向线性链表
3、不存在*/ do/*释放单向线性链表空间*/ p=L->next; L->next=p->next; delete p; while(L); return OK;Status ListDelete_Sl(list L) list p; if(!L)return ERROR;/*单向线性链表结点L不存在*/ p=L->next; L->next=p->next; delete p; return OK;list set(int n)/*建立链表*/ list L,p,q; L=new ListNode; L->e=0; L->next=NULL;
4、p=L; cout<<"正序的数字:" for(int i=0;i<n;i+) if(q=new ListNode) ElemType t; cin>>t; q->e=t; q->next=NULL; p->next=q; p=p->next; else while(p) q=p; p=NULL; delete p; p=q->next; if(i=n-1) p->next=L->next; return L;list set2(int n) list L2,p,q; if(L2=new ListNod
5、e) L2->next=NULL; L2->e=0; cout<<"逆序数字:" for(int i=0;i<n;i+) int t; cin>>t; if(q=new ListNode) q->e=t;q->next=NULL;q->next=L2->next;L2->next=q; else p=L2; while(p) L2=p;delete L2; p=p->next; p=L2->next; while(p->next) p=p->next; p->next=L2
6、; return L2;int main() list L,p,q,L2; int n,ListDelete_number; cout<<"个数:"<<endl; cin>>n; L=set(n); p=L->next; int i=0; while(p) cout<<p->e<<'t' p=p->next; i+; if(i=n) break; /单链正序测试 cout<<endl; L2=set2(n); p=L2->next; while(p!=L2) co
7、ut<<p->e<<'t' p=p->next; cout<<endl; ListDelete_number=ListDelete_Sl(L); cout<<"ListDelete_number="<<ListDelete_number<<endl; p=L->next; i=0; cout<<"剩下的:" while(p) cout<<p->e<<'t' p=p->next; i+;
8、if(i=n-1) break; /删除结点及测试 DestroyList_Sl(L);return 0;(三)、设计双向链表并实现其构建(包括正序及逆序建表)、插入、删除、销毁等基本操作算法#include<iostream.h>#include<stdlib.h>#define OVERFLOW -2#define OK 1#define FAILURE 0#define TRUE 1#define FALSE 0#define ERROR -1typedef int ElemType;typedef int Status;typedef struct Node E
9、lemType e; struct Node *next; struct Node *last;ListNode,*list;Status DestroyList_Sl(list L)/销毁 list p; if(!L) return ERROR;/*单向线性链表不存在*/ do/*释放单向线性链表空间*/ p=L->next; L->next=p->next; delete p; while(L); return OK;Status ListDelete_Sl(list L) list p; if(!L)return ERROR;/*单向线性链表结点L不存在*/ p=L-&
10、gt;next; L->next=p->next; delete p; return OK;list set(int n)/*建立链表*/ list L,p,q; L=new ListNode; L->e=0; L->next=NULL; p=L; cout<<"正序的数字:" for(int i=0;i<n;i+) if(q=new ListNode) ElemType t; cin>>t; q->e=t; q->next=NULL; p->next=q; q->last=p; p=p->
11、next; else while(p) q=p; p=NULL; delete p; p=q->next; if(i=n-1) q=L->next; p->next=q; q->last=p; return L;list set2(int n) list L2,p,q; if(L2=new ListNode) L2->next=NULL; L2->e=0; cout<<"逆序数字:" for(int i=0;i<n;i+) int t; cin>>t; if(q=new ListNode) q->e=t
12、;q->next=NULL;q->next=L2->next;L2->next=q; else p=L2; while(p) L2=p;delete L2; p=p->next; p=L2->next; while(p->next) p=p->next; p->next=L2; return L2;int main() list L,p,q,L2; int n,ListDelete_number; cout<<"个数:"<<endl; cin>>n; L=set(n); p=L->
13、;next; int i=0; while(p) cout<<p->e<<'t' p=p->next; i+; if(i=n) break; /单链正序测试 cout<<endl; cout<<"反向:" i=0; p=L->next; while(p) p=p->last; cout<<p->e<<'t' i+; if(i=n) break; cout<<endl; L2=set2(n); p=L2->next; whil
14、e(p!=L2) cout<<p->e<<'t' p=p->next; cout<<endl; ListDelete_number=ListDelete_Sl(L); cout<<"ListDelete_number="<<ListDelete_number<<endl; p=L->next; i=0; cout<<"剩下的:" while(p) cout<<p->e<<'t' p=p->
15、;next; i+; if(i=n-1) break; /删除结点及测试 DestroyList_Sl(L);return 0;(四)、分析并使用循环链表解决“猴子选大王”问题#include<iostream.h>typedef struct Node int e; struct Node *next; struct Node *last;ListNode,*list;list set(int n)/*建立链表*/ list L,p,q; L=new ListNode; L->e=0; L->next=NULL; p=L; for(int i=0;i<n;i+)
16、 if(q=new ListNode) q->e=i+1; q->next=NULL; p->next=q; q->last=p; p=p->next; else while(p) q=p; p=NULL; delete p; p=q->next; if(i=n-1) q=L->next; p->next=q; p->next=L; L->last=p; return L;int main() list L,p,q,t; int n,m,i=0; cout<<"总个数:"<<endl; ci
17、n>>n; cout<<"跳下报的数字:"<<endl; cin>>m; L=set(n); p=L; /*while(p) p=p->next; cout<<p->e<<'t' i+; if(i=n+1) break; */ while(!(L=p->next)&&(p=L->next) p=p->next; if(p->e>0) i+; if(i%m=0) q=p->next; t=p->last; t->next=q; q->last=t; cout<<"delete "<<p->e<<endl; delete p; p=t; cout<<"猴王:"<<p->e;return 0;四 实验分析及问题思考1、分析双向循环链表与单向链表、循环链表、双向链表间的差异;循环链表是在单向链表的基础
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 麻鸭疾病防治课件
- 2025版二人合伙经营艺术品拍卖行合作协议书模板
- 二零二五年度护工服务培训及就业指导合同样本
- 二零二五年度厂房租赁合同书(含租赁用途)
- 2025年度商业地产EMC合同能源管理专项合同
- 2025年度红砖节能减排示范工程购销合同
- 2025版人力资源保证合同模板范本
- 二零二五年度建筑行业机械设备租赁及服务合同
- 二零二五年度主题公园场地租用飘然而往动态分析合同
- 2025年稻谷种植保险与期货结合服务合同
- GB/T 45701-2025校园配餐服务企业管理指南
- 上海中考英语考纲词汇
- LiteraryTranslation教学讲解课件
- 2023年盐山县卫生健康系统事业单位招聘笔试题库及答案解析
- 三类汽车维修管理制度doc-收费标准
- 网络与信息安全安全应急预案-提供
- GB 15579.8-2014 弧焊设备 第8部分:焊接和等离子切割系统的气路装置
- 第四次全国经济普查先进集体事迹材料
- 2022年精益智能工厂三年规划
- 公务员职务和级别工资档次套改及级别对应表
- 日产品质保证体系图
评论
0/150
提交评论