用单链表实现一元多项式相加

#include<stdio.h>
#include<stdlib.h>
typedef struct Node{float coef;//系数 int exp;//项数 struct Node *next;
}LNode,*Linklist;void newPolynomial(Linklist &head){LNode *p;int i,tempExp;float tempCoef;scanf("%f%d",&tempCoef,&tempExp);head=(struct Node*)malloc(sizeof(struct Node));head->next=NULL;while(tempCoef!=0){  //当系数为0的时候停止录入数据p=(struct Node*)malloc(sizeof(struct Node));p->coef=tempCoef;p->exp=tempExp;p->next=head->next;head->next=p;scanf("%f%d",&tempCoef,&tempExp);}
}void addupPolynomial(Linklist &p1,Linklist &p2,Linklist &sum){Linklist temp1,temp2,tempSum;sum=(struct Node*)malloc(sizeof(struct Node));sum->next=NULL;//新多项式的头结点 temp1=p1->next;temp2=p2->next;while(temp1!=NULL&&temp2!=NULL){    //当p1,p2多项式都没遍历完 tempSum=(struct Node*)malloc(sizeof(struct Node));if(temp1->exp==temp2->exp){tempSum->exp=temp1->exp;tempSum->coef=temp1->coef+temp2->coef;tempSum->next=sum->next;sum->next=tempSum;temp1=temp1->next;temp2=temp2->next;}else if(temp1->exp<temp2->exp){tempSum->exp=temp1->exp;tempSum->coef=temp1->coef;tempSum->next=sum->next;sum->next=tempSum;temp1=temp1->next;}else{tempSum->exp=temp2->exp;tempSum->coef=temp2->coef;tempSum->next=sum->next;sum->next=tempSum;temp2=temp2->next;}}while(temp1!=NULL){//当p1没遍历完 tempSum=(struct Node*)malloc(sizeof(struct Node));tempSum->exp=temp1->exp;tempSum->coef=temp1->coef;tempSum->next=sum->next;sum->next=tempSum;temp1=temp1->next;}while(temp2!=NULL){//当p2没遍历完 tempSum=(struct Node*)malloc(sizeof(struct Node));tempSum->exp=temp2->exp;tempSum->coef=temp2->coef;tempSum->next=sum->next;sum->next=tempSum;temp2=temp2->next;}
}void bubbleSort(Linklist &head){ //冒泡排序 Linklist p,q,tail;tail = NULL;while((head->next->next) != tail){p = head;q = head->next;while(q->next != tail){if((q->exp) > (q->next->exp)){p->next = q->next;q->next = q->next->next;p->next->next = q;q = p->next;}q = q->next;p = p->next;}tail = q;}
}void printPolynomial(Linklist &head){Linklist temp;temp=head;printf("多项式为:");while(temp->next!=NULL){temp=temp->next;if(temp->next!=NULL){printf("%.1fx^%d+",temp->coef,temp->exp);}else{printf("%.1fx^%d",temp->coef,temp->exp);}}
}void newPolynomial(Linklist &head);
void addupPolynomial(Linklist &p1,Linklist &p2,Linklist &sum);
void bubbleSort(Linklist &head);
void printPolynomial(Linklist &head);int main()
{   Linklist L1,L2,sumL; printf("\n**************请输入第一个多项式***************\n");newPolynomial(L1);bubbleSort(L1);printPolynomial(L1);printf("\n**************请输入第二个多项式***************\n");newPolynomial(L2);bubbleSort(L2);printPolynomial(L2);addupPolynomial(L1,L2,sumL);bubbleSort(sumL);printf("\n相加的多项式为:");printPolynomial(sumL);
}

算法的核心思想是,
先把输入的多项式,按次数从小到大排序,然后用temp1,temp2同时分别遍历两个多项式,

当temp1所指结点的次数小于temp2所指结点,取temp1所指结点作为新多项式的新项,
同时temp1前进一个节点,temp2不动;
当temp1所指结点的次数大于temp2所指结点,取temp2所指结点作为新多项式的新项,
同时temp2前进一个节点,temp1不动;
当temp1所指结点的次数等于temp2所指结点的次数,取temp1所指结点和temp2所指结点之和作为新多项式的新项,此时temp1,temp2都前进一个结点。

注意,排序是必不可少的一步
这里的排序方法采用的是冒泡排序,不懂的同鞋可以自行百度学习;

c语言一元多项式相加相关推荐

  1. C语言一元多项式相加(链表)

    今天写一个关于一元多项式相加的程序,就当是在练习运用一下链表的知识.首先,我们先来分析一波,一元多项式相加,首先要用链表创建两个或多个多项式,每个节点里的数据有两个,系数和指数:其次,如果要实现乱幂输 ...

  2. C语言实现一元多项式相加

    C语言 链表实现一元多项式相加 这里的代码复制后,可以直接运行,按照规定的输入即可得出多项式的结果. 问题描述 设计一种单链表存储结构,每个节点成员有一个系数和一个指数,以及下一个节点的指针,数据类型 ...

  3. 一元多项式c语言顺序存储,一元多项式相加程序(C语言)

    /* 2007-3-22 一元多项式的加法 */ # include # include # include typedef struct  PolyNode { int  coef; int  ex ...

  4. 数据结构 - 一元多项式相加减(C语言)

    通常情况下,一元多项式可写成: an(x) = a1x^e1 + a2x^e2 + a3x^e3 + ... + amx^em (数字,m为下标),其中:pi是指数为ei的项的非零系数,0<= ...

  5. 基于C++的一元多项式相加

    资源下载地址:https://download.csdn.net/download/sheziqiong/85996014 资源下载地址:https://download.csdn.net/downl ...

  6. 数据结构——有序链表的合并,链表实现一元多项式相加

    1.有序链表的合并 void Connect(LinkList a, LinkList b, LinkList& c) {LNode* pa, * pb, * pc;//三个结点指针pa = ...

  7. 一元多项式加法c语言,C语言一元多项式加法.doc

    C语言一元多项式加法 //C语言数据结构_一元多项式加法#include #include #include #define OK 1#define ERROR 0typedef int Status ...

  8. 编写一个程序实现两个一元多项式相加的运算。

    [问题描述]编写一个程序实现两个一元多项式相加的运算. [输入形式]从标准输入中读入四行数据, 其中第一行和第三行:各是是一个整数,表示第二行和第四行数据的个数: 第二行和第四行是若干个以空格分隔的整 ...

  9. 数据结构——一元多项式相加(C语言版本)

    本关任务:设计一种单链表存储结构,每个结点存储一项的系数和指数,类型都是整型,编写完成产生多项式的函数.多项式相加及输出多项式的函数. 相关知识 为了完成本关任务,你需要掌握: 如何存储一个一元多项式 ...

最新文章

  1. 张仰彪第二排序法_十大排序之冒泡和选择排序
  2. thrift - C#(CSharp)客户端连接池(ConnectionPool)
  3. 零基础学编程学java还是python-小白学编程选java、php、前端还是python
  4. 实现数组(java)
  5. ZOJ 3609 Modular Inverse(扩展欧几里得)题解
  6. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作...
  7. OO实现ALV TABLE 四:ALV的显示样式
  8. C++编程思想:继承与虚函数以及多态
  9. sinh_带有Python示例的math.sinh()方法
  10. C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握)
  11. PyCharm:调试遇到问题
  12. 细分将成为2011手机市场的主旋律
  13. React-组件生命周期
  14. 谁说文艺青年开花店必亏,我用3年时间挣了20万
  15. WireGuard组建大内网
  16. 美团在外卖市场一家独大,但餐饮商家对高企的佣金抽成日益不满
  17. 修改源码文件的编码格式的小技巧
  18. 【DSP开发】帮您快速入门 TI 的 Codec Engine
  19. AdminLTE3 Table插件
  20. 懒汉模式-双重同步锁机制

热门文章

  1. 球重力异常matlab程序,球体重力异常正演程序介绍.docx
  2. win10彻底删除软件
  3. 开发在线文档时,这个技术难点你解决了吗?
  4. Java 数组和List的使用
  5. 利用MATLAB仿真实现交通红绿灯识别的目的
  6. ajax angular点击事件_angularjs和ajax的结合使用 (三)
  7. tkinterQQ音乐与音频可视化
  8. Drozer – Android APP安全评估工具(附测试案例)
  9. Android项目猜纸牌游戏之一 界面设计和资源文件的设计
  10. Java怎么除以2_哪个更好的选项用于将整数除以2?