




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档实验2 链表基本操作实验 一、实验目的1 定义单链表的结点类型。2 熟悉对单链表的一些基本操作和具体的函数定义。3 通过单链表的定义掌握线性表的链式存储结构的特点。二、实验内容与要求该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。要求:同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。三、 算法分析与设计。1.创建单链表:LinkedList 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; 将链表结尾赋空值,返回头结点L 头结点L A1 A2 L An .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.单链表的删除: b c p p-next=p-next-next;四、 运行结果1. 单链表初始化2. 创建单链表3. 求链表长度4. 检查链表是否为空5. 遍历链表6. 从链表中查找元素7. 从链表中查找与给定元素值相同的元素在顺序表中的位置8. 向链表中插入元素插入元素之后的链表9. 从链表中删除元素删除位置为6的元素(是3)10. 清空单链表五、 实验体会 经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程序做了仔细的分析,对单链表创建、插入、删除算法画了详细的N-S流程图。六、 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()LinkedList 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;p=L-next;if(p=NULL) printf(单链表为空表n);else printf(链表中的元素为: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!=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; while(p&jnext;j+; if(p=NULL|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);LinkedList 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()int d;printf(请选择要进行的操作n);printf(-n);printf(1.初始化 2.清空 3.求链表长度 4.检查链表是否为空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: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);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); scanf(%d%d,&i,&e); LinkedListInser
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-湖北-湖北收银员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北保健按摩师四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-海南-海南垃圾清扫与处理工五级(初级工)历年参考题库含答案解析
- 2025年绿色金融债券市场发行风险控制与投资策略分析报告
- 2025年事业单位工勤技能-河南-河南计算机信息处理员一级高级技师历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-河南-河南热处理工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南护理员三级(高级工)历年参考题库典型考点含答案解析
- 2024版重组的婚姻离婚协议书
- 2024版合同管理优化建议
- 2025年事业单位工勤技能-河北-河北水工监测工四级(中级工)历年参考题库含答案解析(5套)
- 传统白酒生产项目商业计划书
- 2025年教师资格证考试综合素质(中学)试题及答案
- 江苏省淮安市2024-2025学年高一下学期期末考试物理试卷(解析版)
- 《基孔肯雅热防控技术指南(2025年版)》解读课件
- 2025年呼伦贝尔市生态环境局所属事业单位引进人才(2人)模拟试卷附答案详解(综合卷)
- 中国传统文化概论绪论
- 这么写网约车事故索赔误工费的起诉状更容易胜诉
- 固体废物污染环境防治法课件
- 2022年高校教师资格证(高等教育学)考试题库评估300题有解析答案(四川省专用)
- 精装修安全文明施工方案
- 肺结核共45张课件
评论
0/150
提交评论