版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.信 息 学 院数据结构上机实验报告学号: 104100058姓名:赵德刚班级: 10A实验时间:年月日实验地点:同析 3 号楼开发环境: C+课程名称:数据结构-C 语言描述实验性质: 综合性实验 设计性实验 验证实验实验内容:单链表的实现题目来源: 教材页题 教师补充 自选题目主要功能描述:链表的初始化、链表的创建(头部插入法、尾部插入法)、求表长、查找(按值查找、按序号查找)、插入、删除、输出、两个有序单链表的合并等。设计分析:初始化:为单链表申请头结点空间,将单链表设置为空;创建: ( 1)头部插入法: ( a)初始化空表; ( b)申请新结点并赋值;( c)插入新结点; ( d)插入
2、第 i 个元素。( 2)尾部插入法:(a)建空表( b)申请结点并赋值; ( c)插入第一个结点; ( d) r-next=s,r=s;表长:从表头开始,将指针依次指向各个结点,一直到p-next=NULL为止,用 j 来计数。查找:( 1)按值查找:在表中查找第i 个结点,找到就返回该结点的存储位置,用j 来存储扫描过的结点数(j 的初值为0),但 j=i 时,结束。( 2)按序号查找:从表中第一个结点开始,当key 等于查找到的元素的数据时停止查找。插入:在单链表中第i-1 个结点并由指针指示,申请结点空间q,将数据域置为x,更新指针。删除:从头结点开始,删除第i 个结点并释放空间;输出:
3、当表不为空时,依次输出表中元素;合并:与顺序表一样,只需为新的结点申请一个空间。典型测试数据输入:输入数据个数: 4输出: 1, 2, 3,4预期结果:基本实现了单链表的基本数据: 1, 2, 3,4各种操作。程序及运行结果正误判断: 非常好正确,还可改进 基本正确,还需改进 还有错误不足之处或设计经验小结:( 1)L 是单链表的头指针的指针,用来接收头指针变量的地址,*L 待初始化的单链表为头指针变量;( 2) 节省了空间,访问结点时,只需知道头指针,就可以找到其他的元素;( 3) 头插法建表得到的链表中的结点的次序和输入的顺序相反,尾插法则一致;( 4) 求表长时,算法的时间复杂度为O(
4、n)。.任课教师评语:教师签字:年月日注:每学期至少有一次设计性实验。每学期结束请任课教师按时按量统一交到教学秘书处。源程序文件名及组成文件:#include,#include,#include,#include.算法设计思想算法描述#include#include#include#include#define TRUE 1#define FALSE 0typedef int ElemType;typedef struct NodeElemType data;struct Node * next;Node,*LinkList;/* 初始化 */void Init(LinkList *head)
5、*head=(LinkList)malloc(sizeof(Node);(*head)-next=NULL;LinkList create(int n)LinkList h,r,p;int x,i;h=(Node*)malloc(sizeof(Node);r=h;printf( 请输入数据 :n);for(i=1;idata=x;r-next=p;r=p;r-next=NULL;return h;/* 头部插入 */int CreatfromH(LinkList head)LinkList p;ElemType x;puts(输入数据,输入-1000 结束输入 !);while(1)scanf
6、(%d,&x);.if(x!=-1000)p=(Node*)malloc(sizeof(Node);p-data=x;p-next=head-next;head-next=p;else break;return 1;return 0;/* 尾部插入 */LinkListCreatfromT(LinkList head)LinkList p,q,t;ElemType x;q=head;t=head;puts(输入数据,输入-1000 结束输入 !);while(1)scanf(%d,&x);if(x!=-1000)p=(Node*)malloc(sizeof(Node);p-data=x;p-n
7、ext=NULL;t-next=p;t=p;return q;int Inslist(LinkList *head,int i,ElemType x)LinkList p,q;p=(*head);int j=0;while(p&jnext;j+;if(!p|ji-1)printf( 插入位置不合法!);.return 0;q=(Node*)malloc(sizeof(Node);q-data=x;q-next=p-next;p-next=q;return 1;/ 输出void Output(LinkList head)/* 定义节点指针类型,并指向首元结点*/LinkList p;p=head
8、-next;while(p!=NULL)printf(n%d,p-data);p=p-next;printf(n);/* 求表长 */int LengthList(LinkList head)int i;LinkList p;i=0;p=head-next;while(p!=NULL)i+;p=p-next;return i;/* 查找 */int Locate1(LinkList head,ElemType x)LinkList p;int i=1;p=head-next;while(p!=NULL&p-data!=x)p=p-next;i+;.if(p=NULL)return 0;retu
9、rn i;int Locate2(LinkList head,int i)int j;LinkList p;p=head;j=0;if(ii)return NULL;while(p-next!=0&jnext;return p-data;/* 删除 */int Del(LinkList *head,int i)LinkList p,q;int j=0;p=(*head);while(p-next!=NULL&jnext;j=j+;if(p=NULL&ji-1)printf( 删除位置不合理!);return 0;q=p-next;p-next=p-next-next;free(q);retur
10、n 1;/* 合并两个单链表*/LinkList merge(LinkList La,LinkList Lb)LinkList Lc;LinkList q,p,r;.p=La-next;q=Lb-next;Lc=La;Lc-next=NULL;r=Lc;while(p!=NULL&q!=NULL)if(p-datadata)r-next=p;r=p;p=p-next;elser-next=q;r=q;q=q-next;if(p)r-next=p;elser-next=q;free(Lb);return(Lc);void main()LinkList head,La,Lb;int i;char
11、zdg,y;ElemType x;while(zdg!=0)getch();system(CLS);puts(n);puts(*);puts(*功能选择*);puts(*0- 退出1-创建2-插入*);puts(*3- 输出4-表长5-查找*);puts(*6- 删除7-合并*);puts(*);printf(n);printf( 请选择功能 :n);.scanf(%c,&zdg);switch(zdg)case0:puts(nn);puts(*);puts(*);puts(*谢谢使用,再见!*);puts(*);puts(*);break;case1:puts(n);puts(*);puts
12、(*0- 般创建1- 头部插入法2-尾部插入法*);puts(*);printf( 请选择 :n);scanf(%c,&y);y=getch();if(y=0)printf( 输入数字的个数:n);scanf(%d,&i);head=create(i);if(y=1)CreatfromH(head);printf( 新的单链表为:);Output(head);if(y=2)printf( 新的单链表为 :);Output(CreatfromT(head);break;case2:puts(n);printf( 请输入要插入的位置:n);scanf(%d,&i);printf( 请输入要插入的数
13、据:n);scanf(%d,&x);if(Inslist(&head,i,x)!=0)printf( 插入成功 !);.Output(head);break;case3:puts(n);printf( 输入的数据为:n);Output(head);break;case4:puts(n);printf( 长度为 :%d,LengthList(head);break;case5:puts(n);puts(*);puts(*1- 按值查找2- 按序号查找*);puts(*);printf( 请选择 :n);scanf(%c,&y);y=getch();if(y=1)printf( 请输入要查找的元素
14、:n);scanf(%d,&x);if(Locate1(head,x)!=0)printf( 查找成功 ! 该元素的位置是%d,Locate1(head,x);elseprintf( 无此元素 ,查找失败 !);if(y=2)printf( 请输入要查找的元素的位置:n);scanf(%d,&i);if(Locate2(head,i)!=0)printf( 查找成功 ,该 %d 号位置上的是%d!,i,Locate2(head,i);elseprintf( 无此元素 ,查找失败 !);break;case6:puts(n);printf( 请输入你要删除的元素序号:);scanf(%d,&i);Del(&head,i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流行业仓库管理员货物存储与分发效率绩效评定表
- 客户服务不满意问题整改承诺书9篇
- 我想停下匆匆的脚步作文600字8篇
- 读懂亲情的旅程阅读与反思作文(4篇)
- 建筑项目品质保障承诺书(5篇)
- 工会春运应急预案(3篇)
- 2026中建玖玥城市运营公司招聘2人备考题库(北京)及参考答案详解
- 2026四川大学第一批校聘非事业编制岗位招聘8人备考题库(第二轮)附答案详解(夺分金卷)
- 2026成都市树德实验中学(东区)寒假招聘校聘储备教师的备考题库附参考答案详解(基础题)
- 2026广东江门市台山市应急救援和保障中心招聘7人备考题库及答案详解(基础+提升)
- 2026年常德职业技术学院单招职业适应性测试题库及答案1套
- 三管三必须考试卷(附答案)
- 2024-2025学年山东省菏泽市成武县某中学高二上学期开学考试英语试卷(解析版)
- 2025全国注册监理工程师继续教育考试题库及参考答案
- “无废医院”建设指引
- 篮球比赛应急预案及措施
- 2025-2030卫星互联网星座组网进度与地面终端兼容性报告
- 医院功能科年终总结
- 2024年QC课题(提升办案现场执法效率)专卖监督管理科
- 青光眼病人的健康宣教
- 弘扬教育家精神:新时代教师的使命与担当
评论
0/150
提交评论