实验二 线性表链式存储运算的算法实现昆工版.docx

上传人:b****7 文档编号:11195021 上传时间:2023-02-25 格式:DOCX 页数:13 大小:129.14KB
下载 相关 举报
实验二 线性表链式存储运算的算法实现昆工版.docx_第1页
第1页 / 共13页
实验二 线性表链式存储运算的算法实现昆工版.docx_第2页
第2页 / 共13页
实验二 线性表链式存储运算的算法实现昆工版.docx_第3页
第3页 / 共13页
实验二 线性表链式存储运算的算法实现昆工版.docx_第4页
第4页 / 共13页
实验二 线性表链式存储运算的算法实现昆工版.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验二 线性表链式存储运算的算法实现昆工版.docx

《实验二 线性表链式存储运算的算法实现昆工版.docx》由会员分享,可在线阅读,更多相关《实验二 线性表链式存储运算的算法实现昆工版.docx(13页珍藏版)》请在冰豆网上搜索。

实验二 线性表链式存储运算的算法实现昆工版.docx

实验二线性表链式存储运算的算法实现昆工版

昆明理工大学信息工程与自动化学院学生实验报告

(2013—2014学年第三学期)

课程名称:

数据结构开课实验室:

信自楼4442013年11月12日

年级、专业、班

计科122班

学号

201210405204

姓名

邹华宇

成绩

实验项目名称

线性表链式存储运算的算法实现

指导教师

胡守成

教师评语

 

教师签名:

年月日

注:

报告内容按实验须知中七点要求进行。

一、实验目的和要求

1.掌握线性表链式存储结构的C语言描述及运算算法的实现;

2.分析算法的空间复杂度和插入和删除的时间复杂度;

3.总结比较线性表顺序存储存储与链式存储的各自特点。

程序功能:

1.(菜单)主程序;

2.链表的建立;

3.链表的数据插入;

4.链表的数据删除;

5.链表的数据输出;

二、实验原理及基本技术路线图(方框原理图)

三、所用仪器、材料(设备名称、型号、规格等)

联想计算机一台

MicrosoftVisualc++6.0

四、程序源代码

#include

#include

#include

#include

typedefintdataType;

typedefstructnode

{

dataTypedata;

structnode*next;

}linkList;

 

linkList*createList()

{

intnum;

linkList*head,*s,*r;

head=NULL;

r=NULL;

printf("Enterthenumber(0tostop):

");

scanf("%d",&num);

while(num!

=00)

{

s=(linkList*)malloc(sizeof(linkList));

s->data=num;

if(head==NULL)head=s;

elser->next=s;

r=s;

printf("Enterthenumber(0tostop):

");

scanf("%d",&num);

}

if(r!

=NULL)r->next=NULL;

returnhead;

}

linkList*get(linkList*head,inti)

{

intj;

linkList*p;

p=head;

j=0;

while((p->next!

=NULL)&&(j

{

p=p->next;

j++;

}

if(i==j)returnp;

elsereturnNULL;

}

linkList*locate(linkList*head,dataTypekey)

{

linkList*p;

p=head->next;

while(p!

=NULL)

{

if(p->data!

=key)

p=p->next;

elsebreak;

}

returnp;

}

voidinsertAfter(linkList*p,dataTypex)

{

linkList*s;

s=(linkList*)malloc(sizeof(linkList));

s->data=x;

s->next=p->next;

p->next=s;

}

voidinsertBefore(linkList*p,dataTypex)

{

linkList*s;

s=(linkList*)malloc(sizeof(linkList));

s->data=p->data;

s->next=p->next;

p->next=s;

p->data=x;

}

voidinsert(linkList*L,dataTypex,inti)

{

linkList*p;

intj;

j=i-1;

p=get(L,j);

if(p==NULL)

{

printf("erro\n");

getch();

}

else{insertAfter(p,x);printf("\nInsertSucceed");getch();}

}

voiddeleteAfter(linkList*p)

{

linkList*r;

r=p->next;

p->next=r->next;

free(r);

}

voidDelete(linkList*L,inti)

{

intj;

linkList*p;

j=i-1;

p=get(L,j);

if(p!

=NULL&&p->next!

=NULL)

{deleteAfter(p);printf("\nDeleteSucceed");getch();}

else

{

printf("error\n");

getch();

}

}

voiddisplay(linkList*head)

{

inti=1;

if(head==NULL)

{

printf("EmptyList\n");

}

while(head!

=NULL)

{

printf("Index[%d]:

%d\n",i,head->data);

head=head->next;

i++;

}

}

charcaiDan()

{

charch;

do

{

printf("1:

CreateNewList\n");

printf("2:

Insert\n");

printf("3:

Delete\n");

printf("4:

Display\n");

printf("5:

Exit\n");

printf("PleaseChoose:

");

}while(ch=getch(),ch!

='1'&&ch!

='2'&&ch!

='3'&&ch!

='4'&&ch!

='5');

returnch;

}

voidmain()

{

linkList*head=NULL;

charch;

inti,key;

do

{

system("cls");

ch=caiDan();

printf("%c",ch);

getch();

printf("\n");

switch(ch)

{

case'1':

head=createList();

printf("Listwascreatedsuccessfully");getch();break;

case'2':

display(head);

if(head==NULL){getch();break;}

else{printf("\nInputKey:

");scanf("%d",&key);

printf("InputIndexuwanttoinsertafter:

");scanf("%d",&i);

insert(head,key,i);break;}

case'3':

display(head);

if(head==NULL){getch();break;}

else{printf("\nInputindexyouwanttodelete:

");scanf("%d",&i);

Delete(head,i-1);break;}

case'4':

display(head);getch();break;

case'5':

exit(0);

}

}while(ch!

='5');

}

五、运行结果

(1)创建单链表

(2)插入单链表

(3)插入单链表以后的结果

(4)删除单链表

(5)删除单链表以后的结果

(6)插入错误

(7)删除错误

六、实验总结

在做这个程序的时候,虽然遇到一些问题,但最后都被我解决,自信心上得到比较大的提升,这也是这次实践最大的收获。

同时,知识上的收获也是不可忽视的,亲手解决问题的过程也是很好的学习过程,并且积累了一些经验,相信会为以后的学习发展带来非常积极的帮助。

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

当前位置:首页 > 高中教育 > 其它课程

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

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