链表的基本操作与实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
链表的基本操作与实现

武夷学院实验报告 课程名称:数据结构与算法设计 项目名称: 链表的基本操作与实现 姓名: 专业:通信工程 班级:2011级 学号: 同组成员:无 实验预习部分: 实验环境准备: 1.硬件:PC机一台 2.软件: Windows 操作系统、C 语言运行环境 实验所需知识点准备: 用数组实现表时,无需为表示表元素之间的逻辑关系增加额外的存储空间,可以方便地随机存取表中任一位置的元素。但是插入和删除运算不方便,效率较低,而且数组需要分配连续的存储空间,不利于表大小的动态改变。 用指针将存储表元素的那些单元依次串联在一起,避免了在数组中用连续的单元存储元素的缺点,在执行插入和删除运算时,不再需要移动元素来腾出空间或填补空缺。但是,需要在每个单元中设置指针来表示表中元素之间的逻辑关系,增加了额外的存储空间开销。为了将存储表元素的所有单元用指针串联起来,每个单元包含一个元素和一个指针,其中指针指向表中下一个元素所在的单元。对于表元素的插入删除操作,只需要接解除结点间链接的逻辑关系即可,而无需移动元素。用指针表示表的结构通常称为单链接表,简称单链表或链表。 了解并掌握单链表的存储结构的描述方法,上机实现单链表的基本操作。 实验过程记录: 实验目的:? 1.了解和掌握链表的特点;掌握链表基本操作的实现? 2.定义链表的结点类型? 3.熟悉对链表的一些基本操作和具体的函数定义? 4.通过链表的定义掌握线性表的链式存储结构的特点 5.要求完成链表的初始化、插入、删除、显示操作的实现 实验步骤: #includestdio.h #includestdlib.h #define ERROR 0 #define OK 1 typedef int status; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; } LNode,*LinkList; void Build(LinkList L)//建立一个带头结点的单链表 { int n; LinkList p,q; p=L; printf(请输入n和n个数据元素:\n); scanf(%d,n); while(n--) { q=(LinkList)malloc(sizeof(LNode)); scanf(%d,q-data); q-next=NULL; p-next=q; p=q; } } void Print(LinkList L)//计算单链表的长度,然后输出单链表 { int num=0; LinkList p; p=L-next; while(p) { num++; printf(%d ,p-data); p=p-next; } printf(\n长度为%d:\n,num); } void Tips() { printf(按数字键选择相应操作\n); printf(1 输出单链表及其长度:\n); printf(2 查找值为x的直接前驱结点:\n); printf(3 删除值为x的结点:\n); printf(4 将表中元素逆置:\n); printf(5 删除表中所有值大于mink且小于maxk的元素:\n); printf(6 删除表中所有值相同的多余元素:\n); printf(7 分解成两个链表:\n); printf(8 在升序链表插入值为X的结点,使仍然有序:\n); printf(9 按升序排列:\n); printf(0 退出:\n); } void Find(LinkList L,int x)//查找值为x的直接前驱结点q { LinkList p; p=L; while( p-next p-next-data!=x) p=p-next; if(p-next) printf(%d的前驱结点为:%d\n\n,x,p-data); else printf(没找到!!\n\n); } void Delete(LinkList L,int x)//删除值为x的结点 { LinkList p,q; p=L; while( p-next p-next-data!=x) p=p-next; if(p-next) { q=p-next; p-next=q-next; free(q); printf(删除成功!!\n\n); } else printf(链表中没有%d\n\n,x); } void NiZhi(LinkList L)//把单向链表中元素逆置,类似于头插法建立链表! { Link

文档评论(0)

me54545 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档