#include
#include #include #define M 20 typedef struct Term { float coef; //系数 int exp; //指数 struct Term * link; //指针 }pNode,* Polynomial;//建立多项式,带有头节点
Polynomial createPoly(int n) { Polynomial head, p , pre ,s; float c; //c为系数 int e,i = 0; //e为指数printf("建立多项式单链表\n");
head = (Polynomial)malloc(sizeof(pNode)); head->coef = -1; head->link = NULL;while(i < n){
printf("输入第%d项\n",++i); scanf("%f%d",&c,&e); if( c == 0){ printf("输入的系数为零!\n"); break; } s = (Polynomial)malloc(sizeof(pNode)); s ->coef = c; s ->exp = e; p = head; pre = NULL; while(p != NULL && p->exp < e){ pre = p; p = p->link; } if(p != NULL && p->exp == e) printf("输入项的指数重复\n"); else{ s ->link = p; pre ->link =s; } } return head; }//多项式显示
void printPoly(Polynomial poly,int n) { Polynomial s; int i = 1;s = poly;
s = s->link; while(i printf("%.f*x^%d+",s->coef,s->exp); s = s->link; i ++; } printf("%.f*x^%d",s->coef,s->exp); printf("\n"); }//多项式的插入
void Insert(Polynomial &poly, float c ,int e,int &n) { Polynomial s = poly, t = NULL, p;while(s != NULL && s->exp < e)
{ t = s; s = s->link; } if(s != NULL && s ->exp == e){//相同指数,系数合并 if(s ->coef + c != 0){ s ->coef = s->coef + c; } else { t ->link = s->link; free(s); n--;//系数之和为0,项数减1 } } else{ p = (Polynomial)malloc(sizeof(pNode)); p ->exp = e; p ->coef = c; if(t == NULL) { p ->link =poly; poly = p; } else{ t ->link = p; p ->link = s; } n++; } }//多项式乘法实现
Polynomial Mul(Polynomial a, Polynomial b, int &n) { Polynomial s,t,result; n = 0; result = (Polynomial)malloc(sizeof(pNode)); result ->exp = -1; result ->link = NULL; t = b->link; while(t !=NULL){ s = a->link; while(s != NULL){ Insert(result,s->coef*t->coef,s->exp+t->exp,n); s = s->link; } t = t->link; } return result; } void main() { int n; Polynomial mul;printf("请输入多项式的项数:");
scanf("%d",&n); Polynomial poly = createPoly(n); printf("当前多项式为:"); printPoly(poly,n); printf("插入指数为1,系数为1的项\n"); Insert(poly,1,1,n); printPoly(poly,n); printf("多项式相乘\n"); mul = Mul(poly,poly,n); printPoly(mul,n); getch(); }