一元多项式的相加和相乘
typedef struct Lnode{ int coef; // xishu int expon; // zhishu struct Lnode *next; }Lnode,*Link;
读取函数:
void insert(Link &L){ int n; Link end,p; end=L; printf("请输入需要输入的项数:"); scanf("%d",&n); while(n--){ p=(Link)malloc(sizeof(Lnode)); scanf("%d",&p->coef); scanf("%d",&p->expon); end->next=p; end = p; } end->next=NULL; }/*void attach (int c,int e,Link end ){ Link p; p=(Link)malloc(sizeof(Lnode)); p->coef=c; p->expon=e; p->next=NULL; end->next=p; end = p; }*/
加法函数:
void add(Link &p1,Link &p2,Link &p3){ //p3带有头结点 Link pa,pb,pc,p; pa=p1->next; pb=p2->next; pc=(Link)malloc(sizeof(Lnode)); // 为方便表头插入,先产生一个临时空节点 p3=pc; while(pa&&pb){ if(pa->expon>pb->expon){ p=(Link)malloc(sizeof(Lnode)); p->coef=pa->coef; p->expon=pa->expon; p->next=NULL; pc->next=p; pc=p; pa=pa->next; } else if(pa->expon<pb->expon){ p=(Link)malloc(sizeof(Lnode)); p->coef=pb->coef; p->expon=pb->expon; p->next=NULL; pc->next=p; pc=p; pb=pb->next; } else{ p=(Link)malloc(sizeof(Lnode)); p->coef=pb->coef+pa->coef; p->expon=pb->expon; p->next=NULL; pc->next=p; pc=p; pa=pa->next; pb=pb->next; } } pc->next=pa?pa:pb; }
乘法函数:
void mult(Link &s,Link p1,Link p2){ Link p,rear,t1,t2,t; t1=p1->next; t2=p2->next; int c,e; rear=s; while(t2){ p=(Link)malloc(sizeof(Lnode)); p->coef=t1->coef*t2->coef; p->expon=t1->expon+t2->expon; p->next=NULL; rear->next=p; rear = p; t2=t2->next; } // 先用p1的第一项乘以p2,然后在逐个插入进去 t1=t1->next; while(t1){ //循环嵌套 t2=p2->next; rear=s; while(t2){e=t1->expon+t2->expon; c=t1->coef+t1->coef; while(rear->next&&rear->next->expon>e) rear=rear->next; //这里就开始进行逐个插入,先比较指数,直到比较出小于e, if(rear->next->expon==e){ // 判断指数是相等还是大于 ,若相等就比较系数的值,不相等就插入 if(rear->next->coef+c) rear->next->coef+=c; else{ t=rear->next; rear->next=t->next; free(t); } } else{ p=(Link)malloc(sizeof(Lnode)); p->coef=c; p->expon=e; p->next=rear->next;rear->next=p; rear=rear->next; } } } }
整体函数为:
#include<stdio.h> #include<stdlib.h> typedef struct Lnode{ int coef; // xishu int expon; // zhishu struct Lnode *next; }Lnode,*Link; void initial(Link &L){ L=(Link)malloc(sizeof(Lnode)); L->next=NULL; } void insert(Link &L){ int n; Link end,p; end=L; printf("请输入需要输入的项数:"); scanf("%d",&n); while(n--){ p=(Link)malloc(sizeof(Lnode)); scanf("%d",&p->coef); scanf("%d",&p->expon); end->next=p; end = p; } end->next=NULL; }/*void attach (int c,int e,Link end ){ Link p; p=(Link)malloc(sizeof(Lnode)); p->coef=c; p->expon=e; p->next=NULL; end->next=p; end = p; }*/ void print(Link L){ Link tem=L->next; int flag=1; while(tem){ if(flag) flag=0; else printf(" "); printf("%d %d",tem->coef,tem->expon); tem=tem->next; } printf("\n"); } /*void bianli(Link L){ Link p; p=L->next; if(p->coef<0) printf(" - "); printf("%dx^%d",p->coef,p->expon); p=p->next; do{ if(p->coef>0) printf(" + "); printf("%d^%d",p->coef,p->expon); p=p->next; }while(p!=NULL); } */ void add(Link &p1,Link &p2,Link &p3){ //p3带有头结点 Link pa,pb,pc,p; pa=p1->next; pb=p2->next; pc=(Link)malloc(sizeof(Lnode)); // 为方便表头插入,先产生一个临时空节点 p3=pc; while(pa&&pb){ if(pa->expon>pb->expon){ p=(Link)malloc(sizeof(Lnode)); p->coef=pa->coef; p->expon=pa->expon; p->next=NULL; pc->next=p; pc=p; pa=pa->next; } else if(pa->expon<pb->expon){ p=(Link)malloc(sizeof(Lnode)); p->coef=pb->coef; p->expon=pb->expon; p->next=NULL; pc->next=p; pc=p; pb=pb->next; } else{ p=(Link)malloc(sizeof(Lnode)); p->coef=pb->coef+pa->coef; p->expon=pb->expon; p->next=NULL; pc->next=p; pc=p; pa=pa->next; pb=pb->next; } } pc->next=pa?pa:pb; } void mult(Link &s,Link p1,Link p2){ Link p,rear,t1,t2,t; t1=p1->next; t2=p2->next; int c,e; rear=s; while(t2){ p=(Link)malloc(sizeof(Lnode)); p->coef=t1->coef*t2->coef; p->expon=t1->expon+t2->expon; p->next=NULL; rear->next=p; rear = p; t2=t2->next; } // 先用p1的第一项乘以p2 t1=t1->next; while(t1){ t2=p2->next; rear=s; while(t2){e=t1->expon+t2->expon; c=t1->coef+t1->coef; while(rear->next&&rear->next->expon>e) rear=rear->next; if(rear->next->coef==e){ if(rear->next->coef+c) rear->next->coef+=c; else{ t=rear->next; rear->next=t->next; free(t); } } else{ p=(Link)malloc(sizeof(Lnode)); p->coef=c; p->expon=e; p->next=rear->next;rear->next=p; rear=rear->next; } } } } main(){ Link a,b,c,d; initial(a); initial(b); insert(a); print(a); insert(b); print(b); add(a,b,c); print(c); mult(d,a,b); print(d); }