线性表的链式存储结构实验报告.docx

上传人:b****6 文档编号:4407354 上传时间:2022-12-01 格式:DOCX 页数:10 大小:55.23KB
下载 相关 举报
线性表的链式存储结构实验报告.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

线性表的链式存储结构实验报告

线性表的链式存储结构实验报告

实验报告

课程名称:

数据结构与算法分析

实验名称:

链表的实现与应用

实验日期:

2015.01.30班级:

数媒1401姓名:

范业嘉学号1030514108

一、实验目的

掌握线性表的链式存储结构设计与基本操作的实现。

二、实验内容与要求

⑴定义线性表的链式存储表示;

⑵基于所设计的存储结构实现线性表的基本操作;

⑶编写一个主程序对所实现的线性表进行测试;

⑷线性表的应用:

①设线性表L1和L2分别代表集合A和B,试设计算法求A和B的并集C,并用

线性表L3代表集合C;②(选做)设线性表L1和L2中的数据元素为整数,且均已按值非递减有序排列,试设计算法对L1和L2进行合并,用线性表L3保存合并结果,要求L3中的数据元素也按值非递减有序排列。

⑸设计一个一元多项式计算器,要求能够:

①输入并建立多项式;②输出多项式;③执行两个多项式相加;④执行两个多项式相减;⑤(选做)执行两个多项式相乘。

三、数据结构设计

1.按所用指针的类型、个数、方法等的不同,又可分为:

线性链表(单链表)

静态链表

循环链表

双向链表

双向循环链表

2.用一组任意的存储单元存储线性表中数据元素,用指针来表示数据元素间的逻辑关系。

四、算法设计

1.定义一个链表

voidcreatlist(Linklist&L,intn)

{

inti;

Linklistp,s;

L=(Linklist)malloc(sizeof(Lnode));

p=L;

L->next=NULL;

for(i=0;i

{

s=(Linklist)malloc(sizeof(Lnode));

scanf("%d",&s->data);

s->next=NULL;

p->next=s;p=s;

}

}

2.

(1)两个链表的合并

voidMergelist(Linklist&La,Linklist&Lb,Linklist&Lc)

{

Linklistpa,pb,pc;

pa=La->next;pb=Lb->next;

Lc=pc=La;

while(pa&&pb)

{

if(pa->data<=pb->data)

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

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

}

pc->next=pa?

pa:

pb;

free(Lb);

}

(2)两个链表的并集

Linklistunionlist(Linklist&La,Linklist&Lb)

{

Linklistp1,p2,head,q,s;

intflag;

head=q=(Linklist)malloc(sizeof(Lnode));

p1=La->next;

while(p1)

{

flag=0;

p2=Lb->next;

while(p2)

{

if(p1->data==p2->data)

{

flag=1;

break;

}

p2=p2->next;

}

if(flag==0)

{

s=(Linklist)malloc(sizeof(Lnode));

s->data=p1->data;

q->next=s;

q=s;

}

p1=p1->next;

}

q->next=Lb->next;

returnhead;

}

3.

(1)一元多项式的加法

Listaddpoly(Listpa,Listpb)//一元多项式的加法

{

intn;

Listpc,s,p;

pa=pa->next;

pb=pb->next;

pc=(List)malloc(sizeof(structLinklist));

pc->next=NULL;

p=pc;

while(pa!

=NULL&&pb!

=NULL)

{

if(pa->expn>pb->expn)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;

}

elseif(pa->expnexpn)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pb->expn;

s->coef=pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;

}

else

{

n=pa->coef+pb->coef;

if(n!

=0)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pa->expn;

s->coef=n;

s->next=NULL;

p->next=s;

p=s;

}

pb=pb->next;

pa=pa->next;

}

}

while(pa!

=NULL)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;

}

while(pb!

=NULL)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pb->expn;

s->coef=pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;

}

returnpc;

}

(2)一元多项式的减法

Listsubpoly(Listpa,Listpb)//一元多项式的减法

{

intn;

Listpc,s,p;

pa=pa->next;

pb=pb->next;

pc=(List)malloc(sizeof(structLinklist));

pc->next=NULL;

p=pc;

while(pa!

=NULL&&pb!

=NULL)

{

if(pa->expn>pb->expn)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;

}

elseif(pa->expnexpn)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pb->expn;

s->coef=-pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;

}

else

{

n=pa->coef-pb->coef;

if(n!

=0)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pa->expn;

s->coef=n;

s->next=NULL;

p->next=s;

p=s;

}

pb=pb->next;

pa=pa->next;

}

}

while(pa!

=NULL)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pa->expn;

s->coef=pa->coef;

s->next=NULL;

p->next=s;

p=s;

pa=pa->next;

}

while(pb!

=NULL)

{

s=(List)malloc(sizeof(structLinklist));

s->expn=pb->expn;

s->coef=-pb->coef;

s->next=NULL;

p->next=s;

p=s;

pb=pb->next;

}

returnpc;

}

(3)一元多项式的乘法

voidmulpolyn(polynomailpa,polynomailpb,polynomail&pc)

{

LNode*p,*q,*s,*hc;

p=pa->next;

q=pb->next;

hc=pc;

while(p!

=NULL)

{

while(q!

=NULL)

{

s=(polynomail)malloc(sizeof(LNode));

hc->next=s;

hc=hc->next;

hc->coef=q->coef*p->coef;

hc->expn=q->expn+p->expn;

q=q->next;

}

p=p->next;

q=pb->next;

}

hc->next=NULL;

}

五、测试结果

2.

3.

六、心得体会(包括对于本次实验的小结,实验过程中碰到的问题等)

1.首先书上给的链表输入是倒序的,写的时候想都没想就抄上去了,结果运行时发现问题,可是上网XX依然没有把问题解决,导致最后输出链表倒序的,并且链表的合并并集依旧是倒序的。

2.当写一元多项式的加减时,前提是弄清楚各种情况,系数相同时就相加减,系数不同就保留原有多项式;当系数相加减为0时,就free这个节点。

在做减法时,我考虑到了减数与被减数之间的关系。

3.在做多项式时,我准备按照书上的算法一个一个写小函数,结果到最后发现写不下去了,就去问问同学和上网看看,结果感觉写这个数据结构的程序其实不必想麻烦了,只是指针,数组的高级运用。

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

当前位置:首页 > 工程科技 > 信息与通信

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

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