算法与数据结构实验一元多项式求和

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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->zz)

{

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;

相关文档
最新文档