用单向链表计算多项式的加法
来源:互联网 发布:手机淘宝商城首页登录 编辑:程序博客网 时间:2024/06/06 15:49
如果用数列表示多项式,可能会造成很大的空间浪费,我们这里利用单向链表表示多项式,并进行加法运算,其中多项式采用不带头结点的单向链表,按照指数递减的顺序排列各项,定义的链表结构是
struct PolyNode{int coef;int expon;struct PolyNode *link;};typedef struct PolyNode *Polynomial;算法思路:
1.P1->expon==P2->expon:系数相加,若结果不为0,则作为结果多项式对应项的系数。同事,P1和P2都分别指向下一项;
2.P1->expon>P2->expon:将P1的当前项存入结果多项式,并使P1指向下一项
3..P1->expon<P2->expon:将P2的当前项存入结果多项式,并使P2指向下一项
当某一多项式处理完时,将另一个多项式的所有节点依次复制到结果多项式中去
具体流程如图上所示
其中最主要的函数如下图
值得注意的是Attach函数,传递的是指针
完整的代码
#include <stdio.h> #include <stdlib.h>struct PolyNode{int coef;int expon;struct PolyNode *link;};typedef struct PolyNode *Polynomial;//读入多项式Polynomial Read();//输出多项式void Print(Polynomial P);//多项式相加Polynomial PolyAdd(Polynomial P1,Polynomial P2);void Attach(int c,int e,Polynomial *pRear);int Compare(int a, int b); int main() { Polynomial P1=Read();Polynomial P2=Read();Print(P1); Print(P2);Polynomial P=PolyAdd(P1,P2);Print(P); return 0; }//读入多项式Polynomial Read() { int coef = 0; int expon = 0; Polynomial P = NULL; PolyNode *last = NULL; PolyNode *temp=NULL; P = ( Polynomial )malloc( sizeof( struct PolyNode ) );//建立头结点 P->link = NULL; last = P; scanf( "%d",&coef ); scanf( "%d",&expon ); while(expon>=0){ PolyNode *node = ( PolyNode *)malloc( sizeof( struct PolyNode ) ); node->coef=coef; node->expon = expon; last->link = node; last = node; scanf( "%d",&coef ); scanf( "%d",&expon ); } last->link=NULL; temp=P; P=P->link; free(temp); return P; }//输出多项式void Print(Polynomial P){Polynomial Q=P;while(Q){printf("系数%d 指数%d ",Q->coef,Q->expon);Q=Q->link;}printf("\n");}//多项式相加Polynomial PolyAdd(Polynomial P1,Polynomial P2){Polynomial front,rear,temp;int sum;rear=(Polynomial)malloc(sizeof(struct PolyNode));front=rear;while(P1&&P2){switch(Compare(P1->expon,P2->expon)){case 1:Attach(P1->coef,P1->expon,&rear);P1=P1->link;break;case -1: Attach(P2->coef,P2->expon,&rear); P2=P2->link;break;case 0:sum=P1->coef+P2->coef;if(sum)Attach(sum,P1->expon,&rear);P1=P1->link;P2=P2->link;break;}}for(;P1;P1=P1->link)Attach(P1->coef,P1->expon,&rear);for(;P2;P2=P2->link)Attach(P2->coef,P2->expon,&rear);rear->link=NULL;temp=front;front=front->link;free(temp);return front;}void Attach(int c,int e,Polynomial *pRear){Polynomial P;P=(Polynomial)malloc(sizeof(struct PolyNode));P->coef=c;P->expon=e;P->link=NULL;(*pRear)->link=P;*pRear=P;}int Compare(int a, int b){if(a>b)return 1;else if(a<b) return -1;else return 0;}运行的结果是
看起来是没错的,嘿嘿
1 0
- 用单向链表计算多项式的加法
- 利用单向链表计算多项式的乘法
- 链表的多项式加法链表的多项式加法
- 5-2 一元多项式的乘法与加法运算 (20分) (单向链表)
- 链表存储的多项式加法
- 链表实现两个多项式的加法
- 多项式加法 链表方法
- 链表的应用:单元多项式的加法、减法、乘法
- 一元多项式加法计算问题
- 链表实现多项式的加法和乘法
- 链表实现多项式的加法和乘法
- Java链表练习实现一元多项式的加法
- 链表练习:多项式的加法和乘法
- 【数据结构】C++链表实现一元多项式的加法
- 一元多项式的计算 包括加法减法 降幂排列
- 多项式的加法
- 两个多项式的加法
- 多项式的加法
- vimrc配置文件
- 用Pygame实现Pie Game
- leetCode练习(127)
- 51nod-【1094 和为k的连续区间】
- USB鼠标抓包数据
- 用单向链表计算多项式的加法
- 简易教程
- C++与设计模式(8)——代理模式
- mongguoDB配置
- Tenth Line(leetcode195-t4.sh)
- 嵌入式学习心得(四)
- 矩阵乘法
- 将集合转换成字符串,中间以逗号隔开
- 链表