单链表的操作实现实验报告Word文档格式.docx
- 文档编号:14887450
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:13
- 大小:30.48KB
单链表的操作实现实验报告Word文档格式.docx
《单链表的操作实现实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单链表的操作实现实验报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
为单"
申请头结点空间,将单链表设置为空;
创建:
(1)头部插入法:
(a)初始化空表;
(b)申请新结
点并赋值;
(c)插入新结点;
(d)插入第i个元素。
(2)尾部插入法:
(a)建空表(b)申请结点并赋值;
(c)插入第一个结点;
(d)r->
next-s,r-s;
^长:
从表头开始,将指针依次指向各个结点,一直到p->
next-NULL为止,用j来计数。
查找:
(1)按值查找:
表中查找第i个结点,找到就返回该结点的存储位置,用j来存储扫描过的结点数(j的初值为
0),但j-i时,结束。
(2)按序号查找:
从表中第一个结点开始,当key等于查找到的元素的数据时停止查找。
插入:
在单链表中第i-1个结点并由指针指示,申请结点空间q,将数据域置为x,更新指针。
删除:
从头结点开始,删除第i个结点并释放空间;
输出:
当表不为空时,依次输出表中元素;
合并:
与顺序表一样,只需为新的结点申请一个空间。
典型测试数据输入:
输入数据个数:
4数据:
1,2,3,4
1,2,3,4
预期结果:
基本实现了单链表的基本各种操作。
程序及运行结果正误判断:
口非常好口/正确,切改进口基本正确,还需改进口还有错误
不足之处或设计经验小结:
(1)L是单钏的头指针的指针,用来接收头指针变量的地址,*L待初始化的单链表为头指针变量;
(2)节省了空间,访问结点时,只需知道头指针,就可以找到其他的元素;
(3)头插法建表得到的链表中的结点的次序和输入的顺序相反,尾插法则一致;
(4)求灯时,算法的时间复杂度为O(n)。
任课教师评语:
教师签字:
注:
每学期至少有一次设计性实验。
每学期结束请任课教师按时按量统一交到教学秘书处。
源程序文件名及组^^件:
#include<
stdio.h>
#include<
stdlib.h>
conio.h>
windows.h>
①算法设计思想②算法描述
#include<
#defineTRUE1
#defineFALSE0
typedefintElemType;
typedefstructNode
{
ElemTypedata;
structNode*next;
}Node,*LinkList;
/*初始化*/
voidInit(LinkList*head)
*head=(LinkList)malloc(sizeof(Node));
(*head)->
next=NULL;
}
LinkListcreate(intn)
LinkListh,r,p;
intx,i;
h=(Node*)malloc(sizeof(Node));
r=h;
printf("
请输入数据:
\n"
);
for(i=1;
i<
=n;
i++)
scanf("
%d”,&
x);
p=(Node*)malloc(sizeof(Node));
p->
data=x;
r->
next=p;
r=p;
returnh;
/*头部插入*/
intCreatfromH(LinkListhead)
LinkListp;
ElemTypex;
puts("
输入数据,输入-100。
结束输入!
"
while
(1)
if(x!
=-1000)
(
next=head->
next;
head->
elsebreak;
return1;
return0;
/*尾部插入*/
LinkListCreatfromT(LinkListhead)
LinkListp,q,t;
q=head;
t=head;
puts(”输入数据,输入-1000结束输入!
t->
t=p;
returnq;
intInslist(LinkList*head,inti,ElemTypex)
LinkListp,q;
p=(*head);
intj=0;
while(p&
&
j<
i-1)
p=p->
j++;
if(!
p||j>
插入位置不合法!
q=(Node*)malloc(sizeof(Node));
q->
next=p->
next=q;
//输出
voidOutput(LinkListhead)
*/
/*定义节点指针类型,并指向首元结点
p=head->
while(p!
=NULL)
\n%d”,p->
data);
/*求表长*/
intLengthList(LinkListhead)
inti;
i=0;
i++;
returni;
/*查找*/
intLocate1(LinkListhead,ElemTypex)
inti=1;
=NULL&
data!
=x)
if(p==NULL)return0;
intLocate2(LinkListhead,inti)
intj;
p=head;
j=0;
if(i<
=1||j>
i)returnNULL;
while(p->
next!
=0&
i)
returnp->
data;
/*删除*/
intDel(LinkList*head,inti)
j=j++;
if(p==NULL&
j>
删除位置不合理!
q=p->
next->
free(q);
/*合并两个单链表*/
LinkListmerge(LinkListLa,LinkListLb)
LinkListLc;
LinkListq,p,r;
p=La->
q=Lb->
Lc=La;
Lc->
r=Lc;
q!
if(p->
data<
=q->
data)
else
r=q;
q=q->
if(p)
free(Lb);
return(Lc);
voidmain()
LinkListhead,La,Lb;
charzdg,y;
while(zdg!
=0)
getch();
system("
CLS"
*********************************"
*功能选择*"
*0--退出1--创建2--插入*"
*3--输出4--表长5--查找*"
*6--删除7--合并*"
请选择功能:
%c”,&
zdg);
switch(zdg)
case'
0'
puts('
l*********************************************************l「
*0---般创建1---头部插入法2---尾部插入法*"
请选择:
y);
y=getch();
if(y=='
)
输入数字的个数:
%d"
&
i);
head=create(i);
1'
CreatfromH(head);
printf(-新的单链表为:
Output(head);
2'
Output(CreatfromT(head));
break;
请输入要插入的位置:
请输入要插入的数据:
if(Inslist(&
head,i,x)!
插入成功!
3'
输入的数据为:
4'
长度为:
LengthList(head));
5'
*"
);
********************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 操作 实现 实验 报告