创建链表和链表操作实验报告文档格式.doc

上传人:b****1 文档编号:13165091 上传时间:2022-10-07 格式:DOC 页数:9 大小:615.50KB
下载 相关 举报
创建链表和链表操作实验报告文档格式.doc_第1页
第1页 / 共9页
创建链表和链表操作实验报告文档格式.doc_第2页
第2页 / 共9页
创建链表和链表操作实验报告文档格式.doc_第3页
第3页 / 共9页
创建链表和链表操作实验报告文档格式.doc_第4页
第4页 / 共9页
创建链表和链表操作实验报告文档格式.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

创建链表和链表操作实验报告文档格式.doc

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

创建链表和链表操作实验报告文档格式.doc

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合并后的链表

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

当前位置:首页 > 考试认证 > IT认证

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

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