多项式相加的函数(数据结构_C语言版)

更新时间:2023-08-09 09:02:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、编写一个程序用单链表存储多项式,并实现两个多项式相加的函数。

【源程序】#include<stdio.h>

#include <malloc.h>

#define MAX 20

typedef struct

{

float coef; int exp;

}PolyArray[MAX];

typedef struct pnode

{ float coef;//系数

int exp;//指数 struct pnode *next;

}PolyNode;

void DispPoly(PolyNode *L)//输出多项式

{

}

void CreateListR(PolyNode *&L,PolyArray a,int n)

//尾插法建立单链表

{

PolyNode *s,*r;int i; L=(PolyNode *)malloc(sizeof(PolyNode)); L->next=NULL; r=L; //创建头结点 PolyNode *p=L->next; while(p!=NULL) { } printf("%gx^%d",p->coef,p->exp); p=p->next; printf("\n"); //r始终指向终端结点,开始时指向头结点 for (i=0;i<n;i++) { s=(PolyNode *)malloc(sizeof(PolyNode));//创建新结点 s->coef=a[i].coef; s->exp=a[i].exp; r->next=s; r=s; //将*s插入*r之后 } r->next=NULL;

}

void Sort(PolyNode *&head)//按exp域递减排序

{ PolyNode *p=head->next,*q,*r;

if(p!=NULL) { r=p->next; p->next=NULL; p=r; while(p!=NULL)

} } q=head; while(q->next!=NULL&&q->next->exp>p->exp) q=q->next; p->next=q->next; q->next=p; p=r;

}

void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc)//求两个有序集合的并 {

PolyNode *pa=ha->next,*pb=hb->next,*s,*tc; float c; hc=(PolyNode *)malloc(sizeof(PolyNode)); tc=hc; while(pa!=NULL&&pb!=NULL) { if(pa->exp>pb->exp) { s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 } s->exp=pa->exp; s->coef=pa->coef; tc->next=s; tc=s; pa=pa->next; else if(pa->exp<pb->exp) { s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 } else { c=pa->coef+pb->coef; if(c!=0)//系数之和不为0事创建新结点 { s=(PolyNode *)malloc(sizeof(PolyNode)); s->exp=pa->exp; s->coef=c; tc->next=s; tc=s; s->exp=pb->exp; s->coef=pb->coef; tc->next=s; tc=s; pb=pb->next; } pa=pa->next; pb=pb->next;

} } if(pb!=NULL) pa=pb;//复制余下的结点 while(pa!=NULL) { s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 } s->exp=pa->exp; s->coef=pa->coef; tc->next=s; tc=s; pa=pa->next; tc->next=NULL;

void main() { } PolyNode *ha,*hb,*hc; PolyArray a={{1.5,0},{2.5,1},{3.3,3},{-2.5,5}}; PolyArray b={{-1.5,0},{2.5,1},{3.7,3},{-2.5,5},{5.6,7}}; CreateListR(ha,a,4); CreateListR(hb,b,5); printf("原多项式A为:");DispPoly(ha); printf("原多项式B为:");DispPoly(hb); Sort(ha); Sort(hb); printf("有序多项式A:");DispPoly(ha); printf("有序多项式B:");DispPoly(hb); Add(ha,ha,hc); printf("多项式相加结果:");DispPoly(hc); printf("\n");

本文来源:https://www.bwwdw.com/article/pbkj.html

Top