算法与数据结构实验一元多项式求和
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法与数据结构》实验报告
姓名:***
班级:计科01
学号:**********
实验题目:链表的应用
实验内容:一元多项式求和
把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。
设计分析:
一元多项式可以用单链表表示,结点结构图示如下:Array
一元多项式链表的结点结构
一元多项式算法伪代码如下:
源程序代码:
#include"StdAfx.h"
#include
typedef struct LNode
{
int x,z;
struct LNode *next;
}LinkList;
void OutLinkList(LinkList *L);
void PutLinkList(LinkList *&L,int n);
LinkList *AddLinkList(LinkList *a,LinkList *b);
void OutXLinkList(LinkList *L);
void OutZLinkList(LinkList *L);
void main()
{
int n,m;
LinkList *a,*b,*c;
printf("\t\t\t本À?程¨¬序¨°可¨¦以°?完ª¨º成¨¦两¢?个?一°?元a多¨¤项?式º?的Ì?加¨®法¤¡§运?算?。¡ê\n");
printf("请?输º?入¨?一°?元a多¨¤项?式º?a的Ì?项?数ºym:êo");
scanf("%d",&m);
printf("请?按ã¡ä照?从䨮低̨ª次ä?到Ì?高?次ä?的Ì?顺3序¨°依°¨¤此ä?输º?入¨?一°?元a多¨¤项?式º?a的Ì?系¦Ì数ºy和¨ª指?数ºy:êo\n");
PutLinkList(a,m);
printf("a=");
OutLinkList(a);
printf("请?输º?入¨?一°?元a多¨¤项?式º?b的Ì?项?数ºyn:êo");
scanf("%d",&n);
printf("请?按ã¡ä照?从䨮低̨ª次ä?到Ì?高?次ä?的Ì?顺3序¨°依°¨¤此ä?输º?入¨?一°?元a多¨¤项?式º?b的Ì?系¦Ì数ºy和¨ª指?数ºy:êo\n");
PutLinkList(b,n);
printf("b=");
OutLinkList(b);
c=AddLinkList(a,b);
printf("两¢?个?多¨¤项?式º?的Ì?和¨ª为a:êo\na+b=");
OutLinkList(c);
}
void PutLinkList(LinkList *&L,int n)
{
LinkList *s,*r;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for(int i=0;i { s=(LinkList *)malloc(sizeof(LinkList)); printf("请?输º?入¨?第̨²%d项?的Ì?系¦Ì数ºy:êo",i+1); scanf("%d",&s->x); printf("请?输º?入¨?第̨²%d项?的Ì?指?数ºy:êo",i+1); scanf("%d",&s->z); r->next=s; r=s; } r->next=NULL; } void OutLinkList(LinkList *L) { char FuHao; LinkList *p=L->next; FuHao=p->x>0? '+':'-'; if(FuHao=='-') { printf("%c",FuHao); if(p->x==-1) printf("1"); } OutXLinkList(p); OutZLinkList(p); p=p->next; while(p!=NULL) { FuHao=p->x>0? '+':'-'; printf("%c",FuHao); OutXLinkList(p); OutZLinkList(p); p=p->next; } printf("\n"); } void OutXLinkList(LinkList *L) { int xi=L->x>0? L->x:-L->x; if(L->x==1||L->x==-1) ; else printf("%d",xi); } void OutZLinkList(LinkList *L) { if(L->z==0) ; else if(L->z==1||L->z==-1) { if(L->z<0) { if(L->x==1||L->x==-1) printf("1"); printf("/"); } printf("X"); } else { if(L->z<0) printf("/"); int zhi=L->z>0? L->z:-L->z; printf("X^%d",zhi); } } LinkList *AddLinkList(LinkList *a,LinkList *b) { a=a->next; b=b->next; LinkList *c,*d,*s; c=(LinkList *)malloc(sizeof(LinkList)); d=c; while(a!=NULL&&b!=NULL) { if(a->z { s=(LinkList *)malloc(sizeof(LinkList)); s->x=b->x; s->z=b->z; d->next=s; d=s; b=b->next; } else if(a->z>b->z) { s=(LinkList *)malloc(sizeof(LinkList)); s->x=a->x;