- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二线性链表的建立与应用
实验二 线性链表的建立与应用
一 实验目的:
了解并掌握线性表在采取链式存储时的逻辑关系与物理存储关系的特点和计算特性,掌握线性链表的各种运算方法。
二 实验内容:
实现单向链表的初始化、查找、删除、添加、排序、查找、合并、逆转、复制等操作。要求程序能够循环执行
三 实验原理:
关于单链表
链表是通过一组任意的存储单元来存储线性表中的数据元素的,为建立起数据元素之间的线性关系,对每个数据元素ai,除了存放数据元素的自身的信息 ai 之外,还需要和ai一起存放其后继 ai+1 所在的存贮单元的地址,这两部分信息组成一个“结点”,存放数据元素信息的称为数据域,存放其后继地址的称为指针域。因此n个元素的线性表通过每个结点的指针域拉成了一个“链子”,称之为链表。因为每个结点中只有一个指向后继的指针,所以称其为单链表。
单链表上基本运算的实现
线性链表的创建:创建过程实际上是链表结点的申请和连接的过程。向系统申请内存单元,输入用户数据,将结点加入到链表中,连接前后件,明确关系后添加下一个结点。
线性链表的删除:选定要删除的结点,将该结点前件的指针域数据修改为后件的物理地址值,释放该节点占用的内存空间。
线性链表的查找:给定查找条件,从链表头开始,顺延向后查找,当找到符合条件的结点时,返回该结点的地址值。
线性链表的编辑:给定查找条件,查找到符合条件的结点后,修改相应的用户数据,但不能改变该结点的指针值。
线性链表的排序:按照指定的用户数据用指定的的排序要求(升序或降序)对链表的逻辑结构进行重组,重组的过程中,只改变逻辑结构,而不是物理结构,也不改变结点的数据。
线性链表的合并:将一个链表的头结点连接到另一个链表的为结点后作为其后件。
线性链表的逆转:将链表按照顺序反转,即尾结点变为头结点,头结点变为尾结点。
四 实验步骤
1 进入Turbo C2.0,新建一个文件。
2 输入程序,程序要求使用子函数进行组织。
3 将源程序保存到指定文件夹“D:\学生姓名”。
4 按F9调试,纠正语法错误。
5按Ctrl+F9运行,调试逻辑错误。
6 按Alt+F5查看结果。
五、实验中应注意的问题与思考题:
1 在处理过程中保证数据结构的逻辑完整性。链表的实现最好采用带头结点的单链表,可以简化链表的处理过程,采用单链表会涉及“指向指针的指针”容易造成逻辑上的混乱,技术上比较难以实现。
2 在对结点进行查找时,可能会出现多个查询结果,应该如何处理?
查找时多用一层循环,循环条件为控制变量的next为head为止。
3 为什么删除结点的时候要释放内存空间?
防止内存泄露。
4 对各个功能模块采用独立编制子函数,增强程序的可执行性、可移植性和可读性。增加情报信息量,对实际应用中可能发生的情况考虑周全,对非法情形要提出适当的处理方案。
六、源代码
#include stdlib.h
#include stdio.h
struct node
{
int d;
struct node *next;
};
chushicst(head,x) /***********循环链表初始化***************/
int x;struct node *head;
{
struct node *q,*p;
q=(struct node *)malloc(sizeof(struct node));
p=head;
q-d=x;
q-next=head;
while(p-next!=head)
p=p-next;
p-next=q;
return;
}
out(head) /************输出循环链表内元素*****************/
struct node *head;
{
struct node *p;
p=head;
if(p-next==head)
printf(没有元素);
while(p-next!=head)
{
printf(%d ,(p-next)-d);
p=p-next;
}
printf(\n\n);
return;
}
struct node *lookcst(head,x) /*********寻找包含元素x的前一个节点***************/
int x;struct node *head;
{
struct node *p;
p=head;
while((p-next!=head)(((p-next)-d)!=x))
p=p-next;
if(p-next==head)
printf(没有找到指定元素!!!\n\n);
return(p);
}
inscst(head,x,b)
i
您可能关注的文档
- 2014-2015学年度人教版七年级上数学导学案(全册).doc
- 2014-2015学年度小学三年级期中质量检测语文试题二.docx
- 2014-2015学年度小学四年级数学质量调研试卷.docx
- 2014-2015学年度天津第十四中学九年级数学12月统练.docx
- 2014-2015学年度山东日照市市直学校上学期八年级物理期末模拟测试题.doc
- 2014-2015学年度期中高二历史试题.doc
- 2014-2015学年度武昌区九年级1月调考复习训练题.doc
- 2014-2015学年度高一语文复习精选试题(一).docx
- 2014-2015学年度高二下学期政治工作计划.doc
- 2014-2015学年度高三地理测试题(世界地理部分).doc
文档评论(0)