新手学习数据结构与算法---链表多项式

来源:互联网 发布:中国网络通信有限公司 编辑:程序博客网 时间:2024/05/25 08:13

链表多项式。。。

如有错误多多指教微笑

//多项式链表-------采用尾插法建立/*polynomial --- 多项式 coef---系数exp----指数next---指针*/#include <stdio.h> typedef struct Node         //定义一个结构体,一个存系数,一个存指数  { int coef;int exp;struct Node * next;  }PolyNode; //通过键盘按升幂的次序输入多项式各项的系数,指数,以输入指数-1为结束标志PolyNode * Create()         //创建多项式链表,带有头结点 {PolyNode * Head, * R, * S;int c;int e;Head = (PolyNode *)malloc(sizeof(PolyNode));Head->next = NULL;R = Head;scanf("%d %d",&c, &e);while(e != -1){S = (PolyNode *)malloc(sizeof(PolyNode));S->coef = c;S->exp = e;S->next = R->next;R->next = S;R = S;                          //R永远是最后一个结点 scanf("%d %d",&c, &e);}return Head;} /*两个多项式也就是两个链表:指针p,q指向链表A,B的首元素结点;结果插到链表A (1): 若p->exp < q->exp ,指针p右移(2): 若p->exp = q->exp, 将两个结点系数相加:①系数之和不为0,就相加                 ② 系数之和为0,将p,q结点都后移,再将他们删除 (3): 若p->exp > q->exp, 将 q结点插到p结点前面(4):若q=NULL,链表A 即为多项式链表 */PolyNode * PolyAdd(PolyNode * A, PolyNode * B)       //将结果存在链表A中 ,B则删除 {PolyNode *p, *q, *temp, *pre;int sum;p = A->next;                 //从首元素结点开始 q = B->next;pre = A;free(B);           //释放B头结点while((p != NULL) && (q != NULL)) {if(p->exp < q->exp){pre = p;            //指向p前面的结点,方便以后操作 p = p->next;}else if(p->exp == q->exp)           //如果指数相等 {sum = p->coef + q->coef;if(sum != 0){p->coef = sum;pre = p;p = p->next;          //将p后移 B = q;q = q->next;free(B);                   //将B释放 }else{temp = p;p = p->next;pre->next = p;free(temp);               //释放pB = q;q = q->next;free(B);                 //释放q } }else                 //若p->exp > q->exp {B = q->next;pre->next = q;q->next = p;pre = pre->next;p = B;}}if(q != NULL)pre->next = q;                //若q还有剩余 } int main(){//自己测试}


 

原创粉丝点击