一元稀疏多项式加减

来源:互联网 发布:mac怎么删除照片快捷 编辑:程序博客网 时间:2024/05/17 04:16




//一元稀疏多项式加减#include<stdio.h>#include<stdlib.h>#include<math.h>#define OK1#define ERROR0typedef int status;typedef struct PNode{float coef;int expn;struct PNode *next;}PNode,*PolyNomial;/*  建立一个多项式链表  */status CreatPolyNnomial(PolyNomial &L){//建立一元稀疏多项式,按照指数递减排列,不包含指数重复项int n;//n表示一元多项式的项数,如果输入为小于0的数,则继续输入,直到n合法为止,接下来输入n项的稀疏和指数,若指数小于0,返回ERRORPolyNomial p, pre, r;L = (PolyNomial)malloc(sizeof(PNode));L->coef = NULL; L->expn = -1;L->next = NULL; printf("请输入项数:\n");scanf("%d", &n); while(n == 0){printf("输入的项数有误:\n");scanf("%d", &n); } //根据合法的系数和指数,生成结点,按照指数从大到小的顺序插入链表,若已存在指数相同的项,则放弃当前项for(int i = 1; i <= n; i++){p = (PolyNomial)malloc(sizeof(PNode)); printf("请输入%d项系数",i);scanf("%f", &p->coef); printf("请输入%d项指数",i);scanf("%d", &p->expn);p->next = NULL;pre = L;r = L->next;while(r && r->expn > p->expn){pre = r;r = r->next;}if(r == NULL || r->expn < p->expn){p->next = r;pre->next = p;}else if(r->expn == p->expn){free(p);}} return OK;}void add(PolyNomial &La,PolyNomial &Lb,PolyNomial &Lc){//求Lc=La+Lb,利用原表空间实现PolyNomial p1, p2, p3, r;int sum;p1 = La->next;p2 = Lb->next;p3 =  La;while(p1 && p2){if(p1->expn == p2->expn){sum = p1->coef + p2->coef;if(sum != 0){p1->expn = sum;p3->next = p1;p3 = p1;p1 = p1->next;r = p2;p2 = p2->next;free(r);}else{r = p1; p1 = p1->next;free(r);r = p2; p2 = p2->next;free(r);}}else if(p1->expn > p2->expn){p3->next = p1;p3 = p1;p1 = p1->next;}else{p3->next = p2;p3 = p2;p2 = p2->next;}}p3->next = p1 ? p1 : p2;free(Lb);}void print(PolyNomial L){//输出多项式LPolyNomial p;p = L->next;while(p){printf("%fX^%d+", p->coef,p->expn);p = p->next;}}int main(){PolyNomial La = NULL,Lb = NULL,Lc = NULL;int ch;printf("*****************一元稀疏多项式相加*****************\n");printf("1、建立多项式La   2、建立多项式Lb   3、输出多项式La   4、输出多项式Lb   5、多项式相加   6、输出和多项式   7、退出\n");printf("请选择:");scanf("%d",&ch);while(ch!=7){switch(ch){case 1:CreatPolyNnomial(La);break;case 2:CreatPolyNnomial(Lb);break;case 3:print(La);break;case 4:print(Lb);break;case 5:add(La, Lb, Lc); break;case 6:print(La);break;default: printf("输入错误,请重新输入!\n");}printf("请选择:");scanf("%d",&ch);}return 0;}


0 0