




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单链表实验报告一、 实验目的与要求1、实现单链表的建立;2、掌握单链表的插入、删除和查找运算;3、熟练进行C语言源程序的编辑调试。二、 实验内容(1)建立带表头结点的单链表;首先输入结束标志,然后建立循环逐个输入数据,直到输入结束标志。数据输入的函数为:LNode *createtail() LNode *s,*r; int x,tag; printf(input the sign of ending:); /*输入结束标志*/ scanf(%d,&tag); h=(LNode * )malloc(sizeof(LNode); /*建立表头结点*/ h-data=tag; r=h; printf(input the data:); scanf(%d,&x); while(x!=tag) /*建立循环逐个输入数据*/ s=(LNode * )malloc(sizeof(LNode); s-data=x; r-link=s; r=s; scanf(%d,&x); r-link=NULL; return h;(2)输出单链表中所有结点的数据域值; 首先获得表头结点地址,然后建立循环逐个输出数据,直到地址为空。 数据输出的函数为: void output(LNode *h) LNode *r; int i; r=h; for(i=1;r-link!=NULL;i+) printf(%d.%dn,i,r-link-data); r=r-link; (3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;建立两个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,建立循环扫描链表。当当前结点指针域不为空且数据域等于x的时候,申请结点并给此结点数据域赋值为y,然后插入当前结点后面,退出函数;当当前结点指针域为空的时候,申请结点并给此结点数据域赋值为y,插入当前结点后面,退出函数。 数据插入函数为: void insert(LNode *h)LNode *r,*s;int x,y;printf(Input the data that you want to insert:n);printf(x=);scanf(%d,&x); /*输入x值*/printf(y=);scanf(%d,&y); /*输入y值*/r=h;r=r-link;for(;r=r-link)if(r-data=x) /*当当前结点指针域不为空且数据域等于x的时候*/s=(LNode *)malloc(sizeof(LNode);s-data=y;s-link=r-link;r-link=s;break;if(r-link=NULL) /*当当前结点指针域为空的时候*/s=(LNode *)malloc(sizeof(LNode);s-data=y;s-link=NULL;r-link=s;break;(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。 建立三个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,最后一个备用;建立整形变量l=0;建立循环扫描链表。当当前结点指针域为空的时候,如果当前结点数据域等于k,删除此结点,l+,跳出循环,结束操作;如果当前结点数据域不等于k,跳出循环,结束操作。当当前结点指针域不为空的时候,如果当前结点数据域等于k,删除此结点,l+,继续循环操作;如果当前结点数据域不等于k,指针向后继续扫描。循环结束后函数返回变量l的值,l便是删除的结点的个数。 数据删除函数为: int del(LNode *h)LNode *r,*s,*t;int k,l=0;printf(Input the data that you want to delete:);scanf(%d,&k);r=h;s=r;r=r-link;for(;)if(r-link=NULL) /*当当前结点指针域为空的时候*/if(r-data=k) /*如果当前结点数据域不等于k*/l+;s-link=NULL;free(r);break;else break; /*如果当前结点数据域等于k*/else /*当当前结点指针域不为空的时候*/if(r-data=k) /*如果当前结点数据域不等于k*/l+;t=r;s-link=t-link;r=t-link;free(t);else r=r-link;s=s-link; /*如果当前结点数据域不等于k*/return l;完整的源程序为:#include stdio.h#include conio.h#define DataType inttypedef struct node DataType data; struct node *link;LNode;LNode *h;LNode *createtail() LNode *s,*r;int x,tag;system(cls); printf(input the sign of ending:); scanf(%d,&tag); h=(LNode * )malloc(sizeof(LNode); h-data=tag; r=h; printf(input the data:); scanf(%d,&x); while(x!=tag) s=(LNode * )malloc(sizeof(LNode); s-data=x; r-link=s; r=s; scanf(%d,&x); r-link=NULL; return h;void output(LNode *h) LNode *r; int i; system(cls); r=h; for(i=0;r-link!=NULL;i+) printf(data%d=%dn,i,r-link-data); r=r-link; getch();void insert(LNode *h)LNode *r,*s;int x,y;system(cls);printf(Input the data that you want to insert:n);printf(x=);scanf(%d,&x);printf(y=);scanf(%d,&y);r=h;r=r-link;for(;r=r-link)if(r-data=x)s=(LNode *)malloc(sizeof(LNode);s-data=y;s-link=r-link;r-link=s;break;if(r-link=NULL)s=(LNode *)malloc(sizeof(LNode);s-data=y;s-link=NULL;r-link=s;break;int del(LNode *h)LNode *r,*s,*t;int k,l=0;system(cls);printf(Input the data that you want to delete:);scanf(%d,&k);r=h;s=r;r=r-link;for(;)if(r-link=NULL)if(r-data=k)l+;s-link=NULL;free(r);break;else break;elseif(r-data=k)l+;t=r;s-link=t-link;r=t-link;free(t);else r=r-link;s=s-link;return l;void nodata()system(cls);printf(You had not input data.nnn);printf( Press Enter to return);getch();main() int a,b=1,c,l; h=-1; for(;b=1;) system(cls);printf(1.Create a linear list.n); printf(2.Output the data of linear list.n); printf(3.Insert data.n); printf(4.Delete data.n); printf(5.Exitn); scanf(%d,&a); switch(a) case 1:createtail();break; case 2: if(h=-1) nodata(); else output(h);break; case 3: if(h=-1) nodata(); else insert(h);break; case 4: if(h=-1) nodata(); else l=del(h);printf(You have deleted %d data(s)n,l);break; default:b=3;break; printf(end.); getch();三、 实验结果和数据处理(1)初始界面:程序以菜单形式列出5个功能:1.Create a linear list.(新建一个链表)2.Output the data of linear list.(输出链表的数据)3.Insert data.(插入数据)4.Delete data.(删除数据)5.Exit.(退出)需要注意的是,程序必须先运行第一项后才能运行二三四项,否则会提示出错:(2)新建一个链表:首先输入结束标志,这里我设为-100,当我在输入数据的时候输入-100便停止数据输入。然后输入数据,在此我便输入1-9九个数字作为九个数据,然后输入-100停止操作,返回初始界面。到此便成功建立一个链表。(3)输出链表的数据:(4)插入数据:例如我想在数据为3后面插入一个数据100:完成操作后输出数据为:(5)删除数据:例如我想删除刚刚插入的数据100:完成操作后输出数据为:需要注意的是,删除操作会把链表中所有数值域中的数值等同于指定数字的结点全部删除。四、 总结实验之前由于准备不够充分,所以堂上实验时只完成了建立单链表和数据的输出,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏电池生产线参观保密协议书
- 慢性肿瘤用药指导
- 综合货物运输基础
- 2024年高考语文备考:非连续性文本+提出对策措施
- 2024年高考语文冲刺小题增分练03含答案
- Zika学前教育体系构建路径
- 为谁工作总结汇报
- 猪胸膜肺炎放线杆菌研究概述
- 足浴行业服务培训
- 知“帕”不怕:科学防治帕金森病健康宣教
- NPI流程管理制度
- 2025 年湖北省中考生物地理试卷
- 荆州中学2024-2025学年高二下学期6月月考语文答案(定)
- 公司年中会议策划方案
- 计算物理面试题及答案
- JG/T 455-2014建筑门窗幕墙用钢化玻璃
- 酒吧员工劳务合同范本
- 法人变更免责协议书
- 美洲文化课件教学
- 2025届重庆市巴川中学生物七下期末统考试题含解析
- 期末总动员暨诚信教育主题班会
评论
0/150
提交评论