创建链表和链表操作实验报告.docx

上传人:b****6 文档编号:5951625 上传时间:2023-01-02 格式:DOCX 页数:10 大小:78.22KB
下载 相关 举报
创建链表和链表操作实验报告.docx_第1页
第1页 / 共10页
创建链表和链表操作实验报告.docx_第2页
第2页 / 共10页
创建链表和链表操作实验报告.docx_第3页
第3页 / 共10页
创建链表和链表操作实验报告.docx_第4页
第4页 / 共10页
创建链表和链表操作实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

创建链表和链表操作实验报告.docx

《创建链表和链表操作实验报告.docx》由会员分享,可在线阅读,更多相关《创建链表和链表操作实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

创建链表和链表操作实验报告.docx

创建链表和链表操作实验报告

创建链表和链表操作实验报告

数据结构实验报告

报告名称创建链表和链表操作专业

网络工程班级

1001学

20XX03120XX9姓名

张剑指导教师

淑红李珍辉黄哲

20XX年5月4日

、实验目的:

掌握线性表的基本操作:

插入、

删除、查找以及线性表

合并等运算在顺序存储结构和链接存储结构上的运算。

二、实验内容与基本要求:

实验内容:

1.创建单链表

2.在链表上进行插入、删除操作;

3.设计一个程序,用两个单链表分别表示两个集合,并求出这两个集合的并集。

实验要求:

1.在上机前写出全部源程序;2.能在机器上正确

运行程序;3.用户界面友好;

三、概要设计:

1.单链表的存储结构:

teypedefstruct

LNode{ElemTypedate;

structLNond*next;}LNode*LinkList;

2.单链表的插入操作:

StatusListTnsert-L(LinkLIst&L,inti,ElemTypee){

//再带头结点的单链线性表L中的第i个位置之前插入

元素eP=l;j=0;

While(p&&jnext;++j;

}//寻找第i-1个结点

if(!

p||j>i-1)returnERROR;//i小小于1或者大于表长+1s=(LinkList)malloc(sizeof(LNode));//

生成新结点s->date=e;s->next=p->next;//插入L中

p->next=s;returnok;

}//ListTnsertL

3.单链表的删除操作:

StatusListDelete-L(LinkLlst&L,inti,ElemType&e){

//在带头结点单链线性表L中,删除低i个元素,并e返

回其值p=l;j=0;

while(p->next&&jnext;++j;}

if(!

(p->next)||j>i-1)

returnERROR;//删除位置不合理

删除并释放结点

q=p->next;p->next=q->next;//

e=q->datefree(q);returnOK;

}//ListDelete-L

4.链表的合并操作:

voidMergeList-L(LinkList&La,LinkList&Lb,

LinkList&Lc){//已知单链表La和Lb的元素值

//合并单链表La和Lb,得到新的单链表Lcpa=La->next;pb=Lb->next;

lc=pc=La;//用La的头结点作为Lc的头结点while(pa&&pb){if(pa->datedate){

pc->next=pa;pc=pa;pa=pa->next;}

else{pc->next=pb;pc=pb;pb=pb->next;}}

Pc->next=papa:

pb;//插入剩余段free(Lb);//释

放Lb头结点

}//MergeList-L四、详细设计:

#include#include#include#includetypedef

intstatus;

typedefcharElemType;typedefstructLnode

{ElemTypedata;

//定义链表结点类型

structLnode*next;}Lnode,*Linklist;

statusinitlist(Linklist*L){//单链表

的初始化*L=(Lnode*)malloc(sizeof(Lnode));//创

建头结点(*L)->next=NULL;return1;}

statusCreatelist(LinklistL){Lnode*p,*q;

inti,j=1,n;

ElemTypem,M;q=L;

请输入你要输入单链中元素的个数\\n\

{p=(Lnode*)malloc(sizeof(Lnode));

请输入%个元素:

\scanf(\

p->next=q->next;

j++;}

return1;}

statusListinsert(Linklist

{intj=0;

输入错误!

\\n\return

0;}

s=(Lnode*)malloc(sizeof(Lnode));s->data=e;

//创建自己规定长度的单链表//回车缓冲区//回车

缓冲区//向单链表指定位置插入一个元素

s->next=p->next;p->next=s;return1;}

statusListdelete(LinklistL,inti,ElemType*e)

{//删除单链表指定位置的元素,返回删除后的。

链表元

素Lnode*p,*q;intj=0;p=L;

while(p->next&&jnext;j++;}

输入错误!

\\n\

return0;}q=p->next;

p->next=q->next;*e=q->data;free(q);return

1;}

voidprint(LinklistL){//输出单链表中的元素

Linklistp;p=L->next;

输出单链表:

\\n\while(p!

=NULL)

{printf(\p=p->next;}

printf(\}

structLnode*inter_link(structLnode*chainl,

inta,structLnode*chain2,intb){//单链表

的合并inttemp;

structLnode*head,*p1,*p2,*p3;//判断a,b

大小并合并

if(a>=b){

head=

pl=

chainl;

p2=

=chain2;

}

else{

head=

pl=

chain2;

p2=

=chainl;

temp=

a,a

=b,b=temp;

}

p3=head;

while(p2!

=NULL){

pl=p1->next;p3->next=p2;p3=p2;

p2=p2->next;p3->next=p1;p3=p1;}

returnhead;}

main{

inti,n,a,b,h;

structLnode*p1,*p2;ElemTypee;

请输入创建的链表的个数:

\scanf(\

switch(n){

case1:

{LinklistL;initlist(&L);

/*创建链表*/Createlist(L);print(L);

/*插入元素*/

请输入需要插入元素的值和位置\\n\

Listinsert(L,i,e);

请输入需要插入元素的值和位置

scanf(\

print(L);

print(L);

\\n\scanf(\

Listinsert(L,i,e);

/*删除元素*/

请输入要删除的元素的位置:

\scanf(\

Listdelete(L,i,&e);print(L);

被删除元素为:

%ld\\n\};break;case2:

Createlist(H);print(H);

L=inter_link(L,a,H,b);

合并后的链表:

\\n:

\

print(L);};break;default:

printf(\}}

五、调试分析及测试结果:

测试数据:

1.;

2.在5之前插入4,7,并删除11

求集合{1,12,8,6,4,9}和{2,5,12,7,4}的并

测试结果及分析:

1.运行程序,首先进入选择界面,选择输入需要创建的

链表数为1个,输入单链表中的元素个数为六个。

按照操作要求一次输入六个元素3,9,5,6,11,8。

按回车键结束,此时程序输出单链表,单链表创建成功。

图1:

单链表的创建与输出

2.当程序弹出“请输入需要插入元素的值和位置时”执

行单链表的插入操作。

按要求输入需要4,插入元素的值“4”

和元素的位置“3”,按回车结束,重新输出单链表,插入成功。

图2:

单链表的插入操作3.进行删除操作,根据提示输入删除元素的位置“7”,输出单链表后,第七个语速消失,

元素删除成功。

图3:

单链表的删除操作

4.单链表的合并:

再一次运行程序,选择需要创建链表的个数为2个。

按照提示一次输入两个单链表的元素个数和元素值;按回车键结束,此时进行两个单链表的合并操作,输入合并后的链表。

图4:

链表的合并

六、实验心得及经验教训:

于c语言没学好,刚开始做实验时感到无从下手,根本不知道怎样去写源代码。

后来通过参考书籍和上网查阅资料,依样画葫芦的弄出了代码,但在程序上一编译,出现了很多错误,根本就不能运行。

在编译器的中找到出错的地方,一个个的去改正,有些是于粗心造成的,有些是因为没有定义造成的。

最常见的就是漏掉“;”和大小写不分。

但有些程序改了好几遍的都该不过来,这就需要不断的去尝试,againandagain,虽然心里会觉得很烦,但改出来,就会

有一种成就感,并非得不偿失。

通过本次实验,我知道了写程序是一个循序渐进的过程,并不能一口就吃一个胖子;其次,还要又足够的耐心。

当然,扎实的专业知识是少不了的,因此,上课要认真听讲,课外要花点时间巩固提高。

这样,做实验写程序时就不会手忙脚乱!

数据结构实验报告

报告名称创建链表和链表操作专业

网络工程班级

1001学

20XX03120XX9姓名

张剑指导教师

淑红李珍辉黄哲

20XX年5月4日

、实验目的:

掌握线性表的基本操作:

插入、

删除、查找以及线性表

合并等运算在顺序存储结构和链接存储结构上的运算。

二、实验内容与基本要求:

实验内容:

1.创建单链表

2.在链表上进行插入、删除操作;

3.设计一个程序,用两个单链表分别表示两个集合,并求出这两个集合的并集。

实验要求:

1.在上机前写出全部源程序;2.能在机器上正确

运行程序;3.用户界面友好;

三、概要设计:

1.单链表的存储结构:

teypedefstructLNode{ElemTypedate;

structLNond*next;}LNode*LinkList;

2.单链表的插入操作:

StatusListTnsert-L(LinkLlst&L,inti,ElemTypee){

//再带头结点的单链线性表L中的第i个位置之前插入

元素eP=l;j=0;

While(p&&jnext;++j;

}//寻找第i-1个结点

if(!

p||j>i-1)returnERROR;//i小小于1或者大于表长+1s=(LinkList)malloc(sizeof(LNode));//

生成新结点s->date=e;s->next=p->next;//插入L中

p->next=s;returnok;

}//ListTnsertL

3.单链表的删除操作:

StatusListDelete-L(LinkLIst&L,inti,ElemType&e){

//在带头结点单链线性表L中,删除低i个元素,并e返

回其值p=l;j=0;

while(p->next&&jnext;++j;}

删除并释放结点

if(!

(p->next)||j>i-1)returnERROR;//删除位置不合理

q=p->next;p->next=q->next;//

}//ListDelete-L

4.链表的合并操作:

voidMergeList-L(LinkList&La,LinkList&Lb,

LinkList&Lc){//已知单链表La和Lb的元素值

//合并单链表La和Lb,得到新的单链表Lcpa=La->next;pb=Lb->next;

lc=pc=La;//用La的头结点作为Lc的头结点while(pa&&pb){if(pa->datedate){

pc->next=pa;pc=pa;pa=pa->next;}

else{pc->next=pb;pc=pb;pb=pb->next;}}

Pc->next=papa:

pb;//插入剩余段free(Lb);//释

放Lb头结点

}//MergeList-L四、详细设计:

#include#include#include#includetypedef

intstatus;

typedefcharElemType;typedefstructLnode

{ElemTypedata;

//定义链表结点类型

structLnode*next;

}Lnode,*Linklist;

statusinitlist(Linklist*L)

{

//单链表

的初始化*L=(Lnode*)malloc(sizeof(Lnode));//

建头结点(*L)->next=NULL;

return1;

}

Lnode*p,*q;

statusCreatelist(LinklistL){

inti,j=1,n;

ElemTypem,M;q=L;

请输入你要输入单链中元素的个数\\n\

scanf(\p->data=M;

q->next=p;q=p;

L,inti,ElemTypee)

++j;}

Lnode*p=L,*s;while(p&&jnext;

{p=(Lnode*)malloc(sizeof(Lnode));

请输入%个元素:

\scanf(\

p->next=q->next;

j++;}

return1;}

statusListinsert(Linklist

{intj=0;

输入错误!

\\n\return

0;}

s=(Lnode*)malloc(sizeof(Lnode));s->data=e;

//创建自己规定长度的单链表//回车缓冲区//回车

缓冲区//向单链表指定位置插入一个元素s->next=p->next;p->next=s;return1;}

statusListdelete(LinklistL,inti,ElemType*e)

{//删除单链表指定位置的元素,返回删除后的。

链表元

素Lnode*p,*q;intj=0;p=L;

while(p->next&&jnext;

j++;}

输入错误!

\\n\

return0;}q=p->next;

p->next=q->next;*e=q->data;free(q);return

1;}

voidprint(LinklistL){//输出单链表中的元素

Linklistp;p=L->next;

输出单链表:

\\n\while(p!

=NULL)

{printf(\p=p->next;}

printf(\}

structLnode*inter_link(structLnode*chainl,

inta,structLnode*chain2,intb){//单链表

的合并inttemp;

structLnode*head,*p1,*p2,*p3;//判断a,b

大小并合并if(a>=b){

head=pl=chainl;

p2=chain2;

 

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

当前位置:首页 > 自然科学

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

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