3数据结构实验链表答案要点Word文件下载.docx

上传人:b****3 文档编号:13564406 上传时间:2022-10-11 格式:DOCX 页数:18 大小:131.74KB
下载 相关 举报
3数据结构实验链表答案要点Word文件下载.docx_第1页
第1页 / 共18页
3数据结构实验链表答案要点Word文件下载.docx_第2页
第2页 / 共18页
3数据结构实验链表答案要点Word文件下载.docx_第3页
第3页 / 共18页
3数据结构实验链表答案要点Word文件下载.docx_第4页
第4页 / 共18页
3数据结构实验链表答案要点Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

3数据结构实验链表答案要点Word文件下载.docx

《3数据结构实验链表答案要点Word文件下载.docx》由会员分享,可在线阅读,更多相关《3数据结构实验链表答案要点Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

3数据结构实验链表答案要点Word文件下载.docx

2.掌握线性链表的建立、插入和删除等方法。

3.掌握线性链表的基本算法。

一、程序:

#include"

stdio.h"

stdlib.h"

typedefcharelemtype;

typedefstructnode{

elemtypedata;

structnode*next;

}NODE,*NODEPTR;

NODEPTRcreatelistf()

{charch;

NODEPTRhead;

NODE*p;

head=(NODEPTR)malloc(sizeof(NODE));

head->

next=0;

ch=getchar();

while(ch!

='

\n'

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

p->

data=ch;

next=head->

next;

next=p;

}

return(head);

intInsLinkList(NODE*p,charx)

{

NODE*s;

/*定义指向结点类型的指针*/

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

/*生成新结点*/

s->

data=x;

next=p->

next=s;

return1;

}

voidDelLinkList(NODE*p)

{NODE*q;

if(p->

next!

=0)

{q=p->

/*q指向p的后继结点*/

next=q->

/*修改p结点的指针域*/

free(q);

}/*删除并释放结点*/

NODE*lbcz(NODE*h,intx)

{NODE*p;

p=h;

while(p!

=0&

&

data!

=x)p=p->

return(p);

voidprintlink(NODE*h)

{NODE*p;

p=h->

printf("

\n"

);

while(p!

{printf("

%c"

p->

data);

p=p->

printf("

voidmain()

{NODE*h,*p;

charx;

\n头插法建立单链表,应包含字符a,以回车作为结束符\n"

h=createlistf();

\n建立的单链表为\n"

printlink(h);

\n在链表中查找字符a\n"

p=lbcz(h,'

a'

\n将字符k插入到字符a后面\n"

InsLinkList(p,'

k'

\n插入字符后的链表为\n"

\n输入链表中被删除字符的前一个字符\n"

scanf("

&

x);

p=lbcz(h,x);

\n删除该字符后的一个字符\n"

DelLinkList(p);

\n删除字符后的链表为\n"

二、源代码以及输入数据输出结果为:

typedefintelemtype;

{intch;

scanf("

%d"

ch);

intInsLinkList(NODE*h,intx)

NODE*s,*q,*p;

q=p;

while(p->

=NULL&

data<

x)

{q=p;

p=p->

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

q->

%d"

}

{NODE*h;

用头插法建升序链表,注意输入数字的顺序与得到顺序相反,以0作为结束\n"

建立的链表为"

InsLinkList(h,55);

插入后的链表为"

运行情况为:

三、已知单链表L,写一算法,删除其重复结点。

算法思路:

用指针p指向第一个数据结点,从它的后继结点开始到表的结束,找与其值相同的结点并删除之;

p指向下一个;

依此类推,p指向最后结点时算法结束。

源程序如下:

头插法建立链表\n"

请输入字符串,以回车键结束:

"

voiddeLinkList(NODEPTRH)

{NODE*p,*q,*r;

p=H->

//p指向第一个结点

=NULL)

{q=p;

while(q->

=NULL)//从*p的后继开始找重复结点

{if(q->

next->

data==p->

data)

{r=q->

//找到重复结点,用r指向,删除*r

q->

next=r->

free(r);

}

elseq=q->

}//while(q->

next)

//p指向下一个,继续

}//while(p->

voidplink(NODE*h)

NODE*p;

plink(h);

deLinkList(h);

删除了重复结点的链表为"

四、设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。

typedefstructnode

NODEPTRcreatelistf()//使用尾插法建立线性链表

{intx;

NODEPTRhead,r;

r=head;

//r作为尾指针

请输入整型数据到线性表中,以-1作为结束符\n"

while(x!

=-1)//使用-1作为输入结束符

r->

r=p;

NODEPTRmerge(NODEPTRA,NODEPTRB)//线性链表的合并

{NODEPTRC;

NODE*p,*q,*s;

p=A->

q=B->

C=A;

//C表的头结点

C->

next=NULL;

free(B);

while(p&

q)

{if(p->

q->

{s=p;

else

{s=q;

q=q->

}//从原AB表上摘下较小者

next=C->

//插入到C表的头部

}//while

if(p==NULL)p=q;

while(p)//将剩余的结点一个个摘下插入到C表的头部*/

returnC;

voidplink(NODE*h)//线性链表的输出

%d"

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

当前位置:首页 > 经管营销 > 金融投资

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

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