版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、。实验 2链表基本操作实验一、实验目的1 定义单链表的结点类型。2 熟悉对单链表的一些基本操作和具体的函数定义。3 通过单链表的定义掌握线性表的链式存储结构的特点。二、实验内容与要求该程序的功能是实现单链表的定义和主要操作。 如:单链表建立、输出、插入、删除、查找等操作 。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。要求:同学们可参考指导书实验 2 程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。三、 算法分析与设计。1. 创建单链表:LinkedL
2、ist LinkedListCreat( )创建链表函数LinkedList L=LinkedListInit(),p, r;调用初始化链表函数r=L; r指向头结点使用 malloc 函数动态分配存储空间, 指针 p 指向新开辟的结点, 并将元素存放到新开辟结点的数据域,p=(LinkedList)malloc(sizeof(LNode);p-data=x;r-next=p;将新的结点链接到头结点r 之后r=p;r指向 p 结点scanf(%d,&x);满足条件循环输入链表元素while(x!=flag)当输入不为 -1 时循环r-next=NULL; return L;将链表结尾赋空值,返
3、回头结点L头结点 LL.AnA1A2。1。2. 单链表插入void LinkedListInsert(LinkedList L,int i,ElemType x)链表插入函数(L 头指针, i 插入位置, x 插入元素)LinkedList p,s;定义结构体类型指针p,sj=1;p=L;定义整型j 计数,寻找插入位置,p 指针指向头结点p=p-next;j+;满足条件时p 指针后移, j 自加 1while(p&ji)当 p 为真且 ji时循环p=NULL|jdata=x;s-next=p-next; p-next=s;3. 单链表的删除: pbcp-next=p-next-next;。2。
4、四、 运行结果1. 单链表初始化2. 创建单链表3. 求链表长度4. 检查链表是否为空5. 遍历链表6. 从链表中查找元素7. 从链表中查找与给定元素值相同的元素在顺序表中的位置。3。8. 向链表中插入元素插入元素之后的链表9. 从链表中删除元素删除位置为 6 的元素 ( 是 3)10. 清空单链表五、实验体会经过这次单链表基本操作实验, 自己的编程能力有了进一步的提高, 认识到自己以前在思考一个问题上思路不够开阔, 不能灵活的表达出自己的想法, 虽然在打完源代码之后出现了一些错误, 但是经过认真查找、 修改,最终将错误一一修正,主要是在写算法分析的时候出现了障碍, 经过从网上查找资料, 自己
5、也对程序做了仔细的分析,对单链表创建、插入、删除算法画了详细的N-S 流程图。4。六、C语言版原代码# include# include/*定义 ElemType 为 int类型 */typedef int ElemType;# define TRUE 1# define FALSE 0# define NULL 0# define flag -1/* 单链表的结点类型 */typedef struct LNodeElemType data;struct LNode *next;LNode,*LinkedList;/* 初始化单链表 */LinkedList LinkedListInit()L
6、inkedList L;L=(LinkedList)malloc(sizeof(LNode);L-next=NULL;return L;/* 清空单链表 */void LinkedListClear(LinkedList L)L-next=NULL;printf(链表已经清空 n);/* 检查单链表是否为空 */int LinkedListEmpty(LinkedList L)if(L-next=NULL) return TRUE;else return FALSE;/* 遍历单链表 */void LinkedListTraverse(LinkedList L)LinkedList p;。5。
7、p=L-next;if(p=NULL) printf(单链表为空表 n);elseprintf(链表中的元素为: n);while(p!=NULL)printf(%d ,p-data); p=p-next;printf(n);int LinkedListLength (LinkedList L)LinkedList p;int j;p=L-next;j=0;while(p!=NULL)j+;p=p-next;return j;LinkedList LinkedListGet(LinkedList L,int i)LinkedList p;int j;p=L-next;j=1;while(p!=
8、NULL&jnext;j+;if(j=i) return p;else return NULL;int LinkedListLocate(LinkedList L,ElemType x)LinkedList p;int j;p=L-next;j=1;while(p!=NULL&p-data!=x)p=p-next;j+;if(p) return j;else return 0;void LinkedListInsert(LinkedList L,int i,ElemType x)LinkedList p,s;int j;j=1;p=L;。6。while(p&jnext;j+;if(p=NULL
9、|ji)printf(插入位置不正确 n);elses=(LNode *)malloc(sizeof(LNode);s-data=x;s-next=p-next;p-next=s;printf(%d已插入到链表中 n,x);void LinkedListDel(LinkedList L,int i)LinkedList p,q;int j;j=1;p=L;while(p-next&jnext;j+;if(p-next=NULL)printf(删除位置不正确 n);elseq=p-next;p-next=q-next;free(q);printf(第%d 个元素已从链表中删除 n,i);Link
10、edList LinkedListCreat()LinkedList L=LinkedListInit(),p,r;ElemType x;r=L;printf(请依次输入链表中的元素,输入-1 结束 n);scanf(%d,&x);while(x!=flag)p=(LinkedList)malloc(sizeof(LNode);p-data=x;r-next=p;r=p;scanf(%d,&x);r-next=NULL;return L;int scan()。7。int d;printf(请选择要进行的操作 n);printf(-n);printf(1.初始化 2.清空 3.求链表长度 4.检
11、查链表是否为空 n);printf(-n);printf(5.遍历链表 6.从链表中查找元素 n);printf(-n);printf(7.从链表中查找与给定元素值相同的元素在顺序表中的位置n);printf(-n);printf(8.向链表中插入元素9.从链表中删除元素10 创建线性表 n);printf(-n);printf(其他键退出。 n);printf(输入 :);scanf(%d,&d);return(d);main()int quit=0;int i,locate;ElemType e;LinkedList L,p;while(!quit)switch(scan()case 1:
12、L=LinkedListInit();printf(n);break;case 2:LinkedListClear(L);printf(n);break;case 3:printf(链表长度为 %dn,LinkedListLength(L);break;case 4:if(LinkedListEmpty(L)printf(链表为空 n);else printf(链表非空 n);break;case 5:LinkedListTraverse(L);break;case 6:printf( 请输入待查询元素在链表中的位置 :); scanf(%d,&i);p=LinkedListGet(L,i);
13、if(p) printf(链表第 %d个元素的值为 :%dn,i,p-data);else printf(查询位置不正确 n);break;case 7:printf(请输入待查询元素的值:);scanf(%d,&e);locate=LinkedListLocate(L,e);if(locate)printf(%d在链表中的位置是 :%dn,e,locate);else printf(链表中没有值为 %d的元素 n,e);break;case 8:printf(请输入插入元素的位置和值( 中间以空格或回车分隔 ):n);。8。scanf(%d%d,&i,&e);LinkedListInsert(L,i,e);break;case 9:if(LinkedListLength(L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芹菜纤维与糯米淀粉相容性及物化性质研究
- 俄语科普访谈语法隐喻研究
- 2024年青岛农业大学海都学院高职单招职业技能考试题库附参考答案详解【考试直接用】
- 2024年湖南化工职业技术学院高职单招职业技能考试题库附答案详解(培优A卷)
- 2025年四川广安广安区职业学院高职单招职业技能考试题库及完整答案详解【夺冠】
- CMPs基复合膜-气凝胶的制备及其放射性碘吸附性能研究
- 阿昔洛韦凝胶贴膏的制备及海绵骨针对其促渗作用的研究
- 2024年怀化数字产业职业学院高职单招职业技能考试模拟试卷带答案详解(考试直接用)
- 2027年滏阳职业学院高职单招职业适应性测试考试题库【网校专用】附答案详解
- 2027年河南太行职业学院单招职业技能考试模拟试卷【典优】附答案详解
- 2026年重庆市重点学校初一入学语文分班考试试题及答案
- GB/T 47657-2026温室气体产品碳足迹量化方法与要求燃煤发电
- 2025-2030东帝汶海洋渔业资源开发与可持续捕捞管理制度报告
- 磁场对通电导线的作用力 说课课件 -2024-2025学年高二下学期物理人教版(2019)选择性必修第二册
- YYT 0664-2008 医疗器械软件 软件生存周期过程
- DZ∕T 0287-2015 矿山地质环境监测技术规程(正式版)
- 2023年小学信息技术教师选调进城考试试卷
- 精准放射治疗技术及临床应用
- 腰椎退行性病变的诊断和治疗
- 冲压常见缺陷
- YY/T 0741-2018数字化摄影X射线机专用技术条件
评论
0/150
提交评论