一元稀疏多项式简单计算器数据结构:一元稀疏多项式相加 设计一个一元多项式加法器.实现:(1)输入并建立多项式; (2)输出多项式:n,c1,e1,c2,e2,…cn ,en,其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列.(3) 多项式a和b相加,建立多项式a+b(4)多项式a和b相减,建立多项式a-b
网友回答
除以上功能外,还有乘法和除法的计算和导数计算呢.
这是我以前做的数据结构课程设计.希望能帮上你的忙.
#include
#include
typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial; //Polyn为结点指针类型
void Insert(Polyn p,Polyn h){
if(p->coef==0) free(p); //系数为0的话释放结点
else{ Polyn q1,q2;
q1=h;q2=h->next; while(q2&&p->expnexpn){ //查找插入位置
q1=q2;
q2=q2->next; } if(q2&&p->expn==q2->expn){ //将指数相同相合并
q2->coef+=p->coef; free(p);
if(!q2->coef){ //系数为0的话释放结点
q1->next=q2->next; free(q2);
} } else{ //指数为新时将结点插入
p->next=q2;
q1->next=p;
}}}//Insert
Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为head、项数为m的一元多项式
int i;Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
printf(请输入第%d项的系数与指数:,i+1);
scanf(%f %d,&p->coef,&p->expn);
Insert(p,head); //调用Insert函数插入结点
}return head;
}//CreatePolyn
void DestroyPolyn(Polyn p){//销毁多项式p
Polyn q1,q2;
q1=p->next;q2=q1->next;while(q1->next){
free(q1);
q1=q2;//指针后移 q2=q2->next;}}void PrintPolyn(Polyn P){ Polyn q=P->next; int flag=1;//项数计数器if(!q) { //若多项式为空,输出0 putchar('0'); printf(\n); return;} while (q){ if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项 if(q->coef!=1&&q->coef!=-1){//系数非1或-1的普通情况 printf(%g,q->coef); if(q->expn==1) putchar('X'); else if(q->expn) printf(X^%d,q->expn); } else{ if(q->coef==1){ if(!q->expn) putchar('1'); else if(q->expn==1) putchar('X'); else printf(X^%d,q->expn); }