创建链表和链表操作实验报告文档格式.doc
《创建链表和链表操作实验报告文档格式.doc》由会员分享,可在线阅读,更多相关《创建链表和链表操作实验报告文档格式.doc(9页珍藏版)》请在冰豆网上搜索。
![创建链表和链表操作实验报告文档格式.doc](https://file1.bdocx.com/fileroot1/2022-10/7/e0fa0ee3-2b83-419e-bd10-02b546e256f1/e0fa0ee3-2b83-419e-bd10-02b546e256f11.gif)
StatusListTnsert-L(LinkLIst&
L,inti,ElemTypee){
//再带头结点的单链线性表L中的第i个位置之前插入元素e
P=l;
j=0;
While(p&
&
j<
i-1){
P=p->
next;
++j;
}//寻找第i-1个结点
if(!
p||j>
i-1)returnERROR;
//i小小于1或者大于表长+1
s=(LinkList)malloc(sizeof(LNode));
//生成新结点
s->
date=e;
s->
next=p->
//插入L中
p->
next=s;
returnok;
}//ListTnsertL
3.单链表的删除操作:
StatusListDelete-L(LinkLIst&
L,inti,ElemType&
e){
//在带头结点单链线性表L中,删除低i个元素,并由e返回其值
p=l;
while(p->
next&
i-1){//寻找第i个结点,并令p指向其前驱
p=p->
++j;
}
(p->
next)||j>
i-1)
returnERROR;
//删除位置不合理
q=p->
next;
p->
next=q->
//删除并释放结点
e=q->
datefree(q);
returnOK;
}//ListDelete-L
4.链表的合并操作:
voidMergeList-L(LinkList&
La,LinkList&
Lb,LinkList&
Lc){
//已知单链表La和Lb的元素值
//合并单链表La和Lb,得到新的单链表Lc
pa=La->
pb=Lb->
lc=pc=La;
//用La的头结点作为Lc的头结点
while(pa&
pb){
if(pa->
date<
=pb->
date){
pc->
next=pa;
pc=pa;
pa=pa->
else{pc->
next=pb;
pc=pb;
pb=pb->
Pc->
next=pa?
pa:
pb;
//插入剩余段
free(Lb);
//释放Lb头结点
}//MergeList-L
四、详细设计:
#include<
stdio.h>
string.h>
stdlib.h>
malloc.h>
typedefintstatus;
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;
printf("
请输入你要输入单链中元素的个数\n"
);
scanf("
%d"
&
n);
%c"
m);
//回车缓冲区
for(i=n;
i>
0;
i--)
{p=(Lnode*)malloc(sizeof(Lnode));
printf("
请输入%2.1d个元素:
"
j);
scanf("
%ld"
M);
//回车缓冲区
p->
data=M;
q->
next=p;
q=p;
j++;
}
return1;
statusListinsert(LinklistL,inti,ElemTypee)
{ //向单链表指定位置插入一个元素
intj=0;
Lnode*p=L,*s;
while(p&
{p=p->
++j;
}
if(!
i-1){printf("
输入错误!
\n"
return0;
}
s=(Lnode*)malloc(sizeof(Lnode));
data=e;
statusListdelete(LinklistL,inti,ElemType*e)
{ //删除单链表指定位置的元素,返回删除后的。
链表元素
p=L;
while(p->
j++;
q=p->
*e=q->
data;
free(q);
voidprint(LinklistL)
{ //输出单链表中的元素
Linklistp;
p=L->
输出单链表:
while(p!
=NULL)
{printf("
%5ld"
p->
data);
p=p->
}
structLnode*inter_link(structLnode*chain1,inta,structLnode*chain2,intb)
{ //单链表的合并
inttemp;
structLnode*head,*p1,*p2,*p3;
//判断a,b大小并合并
if(a>
=b)
{
head=p1=chain1;
p2=chain2;
}
else
head=p1=chain2;
p2=chain1;
temp=a,a=b,b=temp;
p3=head;
while(p2!
=NULL)
p1=p1->
p3->
next=p2;
p3=p2;
p2=p2->
next=p1;
p3=p1;
returnhead;
main()
{
inti,n,a,b,h;
structLnode*p1,*p2;
ElemTypee;
请输入创建的链表的个数:
%1d"
switch(n)
{
case1:
{
LinklistL;
initlist(&
L);
/*创建链表*/
Createlist(L);
print(L);
/*插入元素*/
printf("
请输入需要插入元素的值和位置\n"
scanf("
e);
i);
Listinsert(L,i,e);
printf("
/*删除元素*/
请输入要删除的元素的位置:
Listdelete(L,i,&
被删除元素为:
%ld\n"
e);
};
break;
case2:
{
LinklistL,H;
initlist(&
H);
Createlist(H);
print(H);
L=inter_link(L,a,H,b);
\n合并后的链表