单链表的操作实现实验报告Word文档格式.docx

上传人:b****2 文档编号:14887450 上传时间:2022-10-25 格式:DOCX 页数:13 大小:30.48KB
下载 相关 举报
单链表的操作实现实验报告Word文档格式.docx_第1页
第1页 / 共13页
单链表的操作实现实验报告Word文档格式.docx_第2页
第2页 / 共13页
单链表的操作实现实验报告Word文档格式.docx_第3页
第3页 / 共13页
单链表的操作实现实验报告Word文档格式.docx_第4页
第4页 / 共13页
单链表的操作实现实验报告Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单链表的操作实现实验报告Word文档格式.docx

《单链表的操作实现实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单链表的操作实现实验报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

单链表的操作实现实验报告Word文档格式.docx

为单"

申请头结点空间,将单链表设置为空;

创建:

(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'

*"

);

********************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1