数据结构实验报告4Word文档下载推荐.docx
《数据结构实验报告4Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告4Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
(2)两个升幂多项式的相加。
三、算法描述
(采用自然语言描述)
1.
创建带头节点的链表,
输入两个有序表数据LaLb
归并两个有序表得有序表Lc
输出三个有序表
输入需插入数据e
将e插入有序表Lc
输出插入e后的Lc
2.
创建链表
按指数升序输入多项式得序数和指数
输出多项式
按指数升序输入第二个多项式得序数和指数
两个多项式相加
输出第二个多项式和两个多项式得和
四、详细设计
(画出程序流程图)
1.
五、程序代码
(给出必要注释)
#include<
stdio.h>
malloc.h>
typedefstructLNode
{
intdate;
structLNode*next;
}LNode,*Link;
typedefstructLinkList
Linkhead;
//头结点
intlenth;
//链表中数据元素的个数
}LinkList;
intcompare(LinkList*L,inte)//有序判定函数compare
intLc=0;
Linkp;
p=L->
head;
p=p->
next;
while(p!
=NULL)
{
if(e>
p->
date)
Lc++;
}
else
returnLc;
}
voidOrderInsert(LinkList*L,inte,int(*compare)())//根据有序判定函数compare,在有序表L的适当位置插入元素e;
Linktemp,p,q;
intLc,i;
temp=(Link)malloc(sizeof(LNode));
temp->
date=e;
p=q=L->
Lc=(*compare)(L,e);
if(Lc==L->
lenth)
while(q->
next!
q=q->
q->
next=temp;
next=NULL;
for(i=0;
i<
Lc;
i++)
next=p;
++L->
lenth;
voidOrderMerge(LinkList*La,LinkList*Lb,int(*compare)())//根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表
inti,Lc=0;
q=La->
head->
while(q!
p=Lb->
date=q->
date;
Lc=(*compare)(Lb,q->
date);
if(Lc==Lb->
while(p->
p->
next=p->
++Lb->
LinkList*Initialize(LinkList*NewList)
inti;
Linktemp;
NewList=(LinkList*)malloc((2+1)*sizeof(LinkList));
2+1;
date=0;
(NewList+i)->
head=temp;
lenth=0;
returnNewList;
voidInsert(LinkList*NewList)
inta,i;
charc;
printf("
在第1个表中插入数据,输入“N”再对下个表插入数据\n"
);
2;
while
(1)
scanf("
%d"
&
a);
c=getchar();
if(c=='
N'
)
if(i<
2-2)
在第%d个表中插入数据,输入“N”再对下个表插入数据\n"
i+2);
elseif(i==2-2)
在第%d个表中插入数据,输入“N”结束。
\n"
break;
OrderInsert((NewList+i),a,compare);
voidShow(LinkList*L)//输出有序表
%d"
p->
voidvisit(LinkList*NewList,void(*Show)())
有序表如下:
\n"
第一个有序表为:
(*Show)(NewList+0);
第二个有序表为:
(*Show)(NewList+1);
归并后有序表为:
(*Show)(NewList+2);
intmain()
LinkList*NewList=NULL;
LinkList*L;
inti,e;
请按要求输入数据\n"
NewList=Initialize(NewList);
Insert(NewList);
OrderMerge(NewList+i,NewList+2,compare);
visit(NewList,Show);
L=NewList;
\n请输入将要插入的e:
e);
OrderInsert((NewList+i),e,compare);
对归并后有序表插入e后得\n"
Show(NewList+2);
return0;
typedefstructnode
intxi;
intzi;
structnode*next;
}Node;
Node*Creat()//用链表储存多项式的序数与指数
Node*head,*p,*q;
intor,in;
head=(Node*)malloc(sizeof(Node));
head->
q=head;
请输入多项式的序数与指数\n(注意:
按照指数升序输入,系数不能等于0且指数不能小于0,序数与指数用空格隔开,并以00结束输入)\n"
%d%d"
or,&
in);
while(or)
p=(Node*)malloc(sizeof(Node));
xi=or;
zi=in;
next=q->
q=p;
returnhead;
voidvisit(Node*head)//输出多项式
Node*p=head->
while(p)
%dX^%d+"
xi,p->
zi);
NULL\n\n"
Node*Add(Node*head1,Node*head2)//多项式相加
Node*p,*head,*p1,*p2;
intsum;
p=head;
p1=head1->
p2=head2->
while(p1&
&
p2)//当两多项式都存在时
if(p1->
zi==p2->
zi)//如果指数相等
sum=p1->
xi+p2->
xi;
if(sum)
p1->
xi=sum;
next=p1;
p=p1;
p1=p1->
p2=p2->
else//指数不相等分两种情况
zi<
p2->
zi)
next=p2;
p=p2;
if(p1)p->
//将1中剩余结点接到和链表中因为最终只剩下一段链表多项式
elsep->
//将2中剩余结点接到和链表中这段链的链头接到目标链表就可以了
请输入第一个多项式\n"
Node*head,*p1,*p2;
p1=Creat();
多项式为:
visit(p1);
请输入第二个多项式\n"
p2=Creat();
visit(p2);
head=Add(p1,p2);
\n多项式相加后得:
visit(head);
六、测试和结果
(给出测试用例,并给出测试结果)
七、用户手册
(告诉用户如何使用程序,使用注意事项等)
1.按照要求输入