数据结构课程设计链表操作Word文档下载推荐.docx
- 文档编号:903164
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:15
- 大小:163.29KB
数据结构课程设计链表操作Word文档下载推荐.docx
《数据结构课程设计链表操作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计链表操作Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
2.3算法的设计思想
(1)定义一个创建链表的函数,通过该函数可以创建一个链表,并为下面的函数应用做好准备。
(2)定义输出链表的算法,通过对第一步已经定义好的创建链表函数的调用,在这一步通过调用输出链表的函数算法来实现对链表的输出操作。
(3)定义一个遍历查找的算法,通过此算法可以查找到链表中的每一个节点是否存在。
(4)定义查找链表的每一个前驱和后继,通过定义这个算法,可以很容易的实现对链表的前驱和后继的查找工作。
(5)定义插入节点的算法,通过定义这个算法,并结合这查找前驱和后继的算法便可以在连链表的任意位置进行插入一个新节点。
(6)定义删除节点的操作,这个算法用于对链表中某个多余节点的删除工作。
2.4相关图例
2.4.1单链表的结点结构
如图2-1所示,为单链表的结点结构示意图:
图2-1单链表的结点结构
2.4.2算法流程图
如图2-2所示,为此算法流程图:
图2-2算法流程图
3过程论述
3.1链表的建立
图3-1链表的建立
图3-2建立链表并打印链表中的元素
3.2取出链表中的元素
图3-3取出链表中的元素
3.3插入元素
图3-4插入元素
3.4删除元素
图3-5删除元素
图3-6删除元素后打印链表
3.5查找元素
图3-7查找位置为6的元素
4结果分析
4.1单链表的结构
一般情况下,使用链表,只关心链表中结点间的逻辑顺序,并不关心每个结点的实际存储位置,因此通常情况下用箭头来表示链域中的指针,于是链表就可以更直观的画成用箭头链接起来的结点序列,如下图所示:
H
图4-1单链表的示例图
4.2单链表
4.2.1顺链操作技术
从“头”开始,访问单链表L中的结点i(p指向该节点)时,由于第i个结点的地址在第i-1个结点(pre指向该结点,为p的前驱)的指针域中存放,查找必须从单链表的“首结点”开始(p=L);
通过p=p->
next并辅助计数器来实现。
4.2.2指针保留技术
通过对第i个结点进行插入、删除等操作时,需要对第i-1个结点的指针域进行链址操作(pre->
next),因此在处理过程中始终需要维持当前指针p与其前驱指针pre的关系,将这种技术称为“指针保留技术”。
5结论与总结
通过这十几天的时间,最后终于完成了这次数据结构课程设计任务,内心激动的同时,也是十分的辛苦的,从选题、审题、查资料到开始构思,这个过程是最慢的,也是最难的。
通过这次的课程设计,我们对数据结构中单链表的应用有了更深的理解,并且使我们深刻的认识到实践的重要性,只有理论与实践相结合才能达到很好的学习效果,学到很多东西,同时也发现仅仅书本的知识是远远不够的,需要把知识运用到实践中去,能力才能得到提高。
由于刚开始对单链表的应用总体结构不熟悉,对书本知识的学习不够扎实,刚拿到题目的时候,还不好下手,就请教了一些学习成绩好一点的同学,并认真查找了一些资料,才对这次课程设计有了初步的了解。
根据对数据结构的了解,我们觉得我们对单链表的认识要深一点。
因此我们选择了单链表的实验,作为线性表的一种存储结构,它的特点是可以从分利用存储单元来存储数据,并且可以方便的实现对数据进行插入、删除、输出等操作。
在我们进行课程设计时,虽然在大体上算法是正确的,但时常会出现一些小问题,使我们不得不花一些时间来查找、修改错误。
通过这次课程设计,让我们充分认识到数据结构在编写程序方面的重要地位。
由于我们在课程设计中编写的是对单链表的基本操作,因此我们在这次课程设计中收获了很多关于单链表的应用方面的知识。
由于课程设计的题目还有很多,因此没有对其他的题目进行深入的了解而感到遗憾,因此我们希望在以后的学习过程中,能够多多的学习这方面没知识来弥补不足。
最后,通过本次数据结构课设,我学会了如何与别人共同探讨、解决问题;
当发现问题时,能学会利用身边一切资料,包括图书、网上资料等等来解决问题,并最终完成任务。
参考文献
[1]耿国华.数据结构--用C语言描述[M].北京:
高等教育出版社,2011.6.
[2]谭浩强.C程序设计[M].北京:
清华大学出版社,2004.6.
附录代码:
#include<
stdio.h>
#include<
stdlib.h>
typedefstructnode//定义node结点
{
intdata;
structnode*next;
}linklist;
voidsetnull(linklist*H)//清空单链表
{
H->
next=NULL;
}
voidcreatlist(linklist*H)//创建单链表
linklist*p,*s;
intx;
p=H;
printf("
pleaseinputx:
"
);
scanf("
%d"
&
x);
while(x!
=-1){
s=(linklist*)malloc(sizeof(linklist));
s->
data=x;
next=p->
next;
p->
next=s;
p=p->
next;
}
next=NULL;
voidLeng(linklist*H)//求单链表长度
linklist*p;
intk;
k=0;
while(p->
next!
=NULL){
p=p->
k++;
Thelinklistis:
%d\n"
k);
intGetElem(linklist*H,inti)//取单链表中的某个元素
=NULL&
&
k<
i){
if(k==i&
p!
=NULL)
printf("
ipositiondatais%d\n"
p->
data);
else
Nofind!
\n"
voidInsert(linklist*H,inti,intx)//向单链表中插入某个元素
intk;
linklist*s;
i-1){
k++;
if(k==i-1&
p->
s=(linklist*)malloc(sizeof(linklist));
s->
next=p->
p->
next=s;
插入错误r\n"
voidDelete(linklist*H,intx)//删除元素
linklist*p,*q;
next->
data!
=x){
k++;
if(p->
data==x){
q=p->
next=q->
free(q);
elseprintf("
nofind!
voidprint(linklist*H)//输出单链表
next==NULL)
链表为空!
%3d"
intLocate(linklist*H,intx)//查找元素
=x){
data==x)
要查询元素的位置是%d\n"
没有找到!
/*
voiddestroylist(linklist*H)//销毁单链表
data=NULL;
*/
voidmain()
linklist*H;
intk,x,i;
intf;
H=(linklist*)malloc(sizeof(linklist));
setnull(H);
\n请选择以下操作数,选择-1为结束"
\n1:
creatlinklist(H)"
\n2:
leng(H)"
\n3:
GetElem(H,i)"
\n4:
Insert(H,i,x)"
\n5:
Delete(H,x)"
\n6:
print(H)"
\n7:
Locate(H,x)\n"
f);
while(f!
=-1){
switch(f)
{
case1:
creatlist(H);
break;
case2:
Leng(H);
case3:
printf("
\n请输入要得到元素的位置:
i);
GetElem(H,i);
case4:
\n请输入的插入位置、长度以及元素:
%d,%d"
i,&
Insert(H,i,x);
case5:
\n请输入要删除的位置及元素:
Delete(H,x);
case6:
print(H);
case7:
请输入要查找的元素:
scanf("
Locate(H,x);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 操作
![提示](https://static.bingdoc.com/images/bang_tan.gif)