创建链表和链表操作实验报告.docx
- 文档编号:5951625
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:10
- 大小:78.22KB
创建链表和链表操作实验报告.docx
《创建链表和链表操作实验报告.docx》由会员分享,可在线阅读,更多相关《创建链表和链表操作实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
创建链表和链表操作实验报告
创建链表和链表操作实验报告
数据结构实验报告
报告名称创建链表和链表操作专业
网络工程班级
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创建 操作 实验 报告