//定义一元多项式链表结点结构HLink
//创建一元多项式链表函数 void Build(HLink &H);
//输出一元多项式链表函数 void Exp(HLink H);#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;struct PNode{float xishu;int zhishu;struct PNode *next;
}; int Build(PNode *H);
void Exp(PNode *H);
int jiancei();
float jiancef();
int add(PNode *H,PNode *HA,PNode *HB);int main(){PNode *HeadA,*HeadB,*H;HeadA=new PNode;HeadA->next=NULL;      //建立带 头结点 的单链表HeadB=new PNode;HeadB->next=NULL;        //建立带 头结点 的单链表H=new PNode;H->next=NULL;        //建立带 头结点 的单链表int lena,lenb;while(1){int n;printf("\n请输入指令,1-建立并输出A,2-建立并输出B,3-显示已经建立的多项式,4-相加,5-继续建立并输出A,6-继续建立并输出B,9-退出");n=jiancei();if(n==0){printf("输入错误"); }if(n==1){HeadA=new PNode;HeadA->next=NULL;lena=Build(HeadA);     //√ Exp(HeadA);} else if(n==2){HeadB=new PNode;HeadB->next=NULL;lenb=Build(HeadB);      //√ Exp(HeadB);}else if(n==3){if(HeadA->next!=NULL){printf("A:");Exp(HeadA);}cout<<endl;if(HeadB->next!=NULL){printf("B:");Exp(HeadB);}cout<<endl;        }else if(n==4){int i=add(H,HeadA,HeadB);if(i==1){Exp(H);}else{printf("相加错误"); }}else if(n==5){lena=Build(HeadA);      //√ Exp(HeadA);}else if(n==6){lenb=Build(HeadB);     //√ Exp(HeadB);}else if(n==9){break;}else{printf("wrong");}}
}int Build(PNode *H){ int n;printf("请输入结点个数");n=jiancei();for(int i=0;i<n;i++){PNode *s;       s=new PNode;       //新结点 printf("请输入系数");    s->xishu=jiancef();printf("请输入指数");s->zhishu=jiancei(); PNode *pre=H;            //pre用于保存q的前驱,初值为头结点PNode *q=H->next;        //q初始化while(q&&q->zhishu<s->zhishu){pre=q;q=q->next;}if(q&&q->zhishu==s->zhishu){q->xishu=q->xishu+s->xishu;continue;} s->next=q;pre->next=s;}return n;
}void Exp(PNode *H){  PNode *h=H->next;PNode *pre=H;if(pre->next){  while(h->next){cout<<" "<<h->xishu<<"x^"<<h->zhishu<<" +";h=h->next;}while(h->next==NULL){cout<<" "<<h->xishu<<"x^"<<h->zhishu;break;}}else{printf("0");}printf("\n");
}int jiancei(){int n,ret=0;do{ret=scanf("%d",&n);if(ret!=1){printf("输入有误,请重新输入\n");fflush(stdin);}if(n>10000){printf("输入值过大,请重新输入\n");fflush(stdin);}}while(ret!=1);//cout<<"输入的值为"<<n<<endl;return n;
}float jiancef(){float n;int ret=0;do{ret=scanf("%f",&n);if(ret!=1){printf("输入有误,请重新输入\n");fflush(stdin);}if(n>10000){printf("输入值过大,请重新输入\n");fflush(stdin);}}while(ret!=1);//cout<<"输入的值为"<<n<<endl;return n;
}int add(PNode *H,PNode *HA,PNode *HB){PNode *a,*b,*p;a=HA;b=HB;  //√ if(HA->next==NULL||HB->next==NULL){printf("多项式为空\n");return 0;}else{while(1){if(a->next==NULL){while(b->next!=NULL){b=b->next;PNode *s;        s=new PNode;       //新结点 s->xishu=b->xishu;s->zhishu=b->zhishu;  p->next=s;p=s;}p->next=NULL;return 1;}else if(b->next==NULL){while(a->next!=NULL){a=a->next;PNode *s;     s=new PNode;       //新结点 s->xishu=a->xishu;s->zhishu=a->zhishu;  p->next=s;p=s;}p->next=NULL;return 1;}else if(a->next->zhishu < b->next->zhishu){a=a->next;PNode *s;        s=new PNode;       //新结点 s->xishu=a->xishu;s->zhishu=a->zhishu;  if(H->next==NULL){H->next=s; }else{p->next=s;}p=s;     }else if(a->next->zhishu > b->next->zhishu){b=b->next;PNode *s;     s=new PNode;       //新结点 s->xishu=b->xishu;s->zhishu=b->zhishu;  if(H->next==NULL){H->next=s; }else{p->next=s;}p=s;}else if(a->next->zhishu == b->next->zhishu){a=a->next;b=b->next;PNode *s;        s=new PNode;       //新结点 s->xishu=a->xishu + b->xishu;s->zhishu=a->zhishu;   if(H->next==NULL){H->next=s; //如果是第一个结点 }else{p->next=s;//否则连向上一个结点的next }p=s;        //用p记录s,再下一个循环中,p是s的上一个结点 }else{printf("wrong\n");}}   }
}

问题:

1.输入系数为负数和零

2.输入指数为零

3.界面好看

【数据结构】一元多项式相加(链表应用实验)相关推荐

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

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

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

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

  3. 《数据结构》单链表操作实验报告

    用于复习链表,自己写的有关链表的一些操作,包括后插前插创建链表,删除,插入,有序合并,查找,遍历,反转,查中间节点,删倒数节点,检测环结构的功能.可以用做C语言实训参考. #include<io ...

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

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

  5. 数据结构—— 一元多项式的运算(相加,相减,相乘)【C语言实现】

    用 C语言实现一元多项式的运算(相加,相减,相乘) 1.创建多项式时,无论指数项按什么顺序输入,输出均能实现以升幂顺序输出,且输入时有相同指数项时能够实现合并. 2.能够代入确切的X计算出最终多项式的 ...

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

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

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

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

  8. 数据结构—— 一元多项式的加法运算

    一. 需求分析 0.问题描述 在数学上,一个一元n次多项式 可按降序写成: 它由n+1个系数唯一确定,因此,在计算机里他可以用一个线性表表示: 设Pn(x)和Qn(x)分别为两个一元多项式,请求出两个 ...

  9. 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告

    20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...

  10. 数据结构-一元多项式加减程序

    //一元多项式加减程序 //程序:张建波 //时间:2005/7/12 PM:20-08 //功能: //     1:可以计算 1+2+3-1+2-5+6+3 (加减法均可) //     2: 可 ...

最新文章

  1. 大数据教程(9.1)流量汇总排序的mr实现
  2. 网络编程(原始套接字)
  3. 从生命周期去看互联网金融产品的风险管理框架
  4. mac命令行ftp操作
  5. windosw应用提示内存不足
  6. mysql5.7.17完全卸载_MySQL5.7完全卸载步骤详解
  7. 在 Panorama 页面中添加 ApplicationBar
  8. 壁面函数matlab,Y+的查看及FLUENT壁面函数的选择
  9. html中播放m3u8文件
  10. Git- 报错 error: bad signature 0x00000000 fatal: index file corrupt
  11. sql升级重启计算机失败win10,win10纯净版安装sql server 2008重启失败的解决办法
  12. 详解电路设计中的RC电路
  13. 高鹏清华计算机系,中国最顶尖的学霸到底有多厉害?看完,膝盖已跪碎!
  14. 市场估值-指数PE讨论
  15. 【实战项目惜时App需求分析说明书】Vue-cli3+Vant UI+Vue-element-admin+Egg.js+Mysql
  16. 计算机方面的英语文章300字,关于电脑作文300字5篇
  17. [CQOI2005]三角形面积并
  18. md文件转html文件
  19. flink 教程 Window
  20. 张正友平面标定方法 超详细

热门文章

  1. 煤气表液晶LCD显示屏
  2. 苹果html5,苹果新官网上线 使用HTML5全副武装
  3. 华为鸿蒙HarmonyOS,万物皆鸿蒙,华为 HarmonyOS 连发三个视频
  4. 20190711 - 淘宝架构演进之路(十四次)
  5. linux文件夹文件颜色及命令
  6. B-Mine Sweeper II
  7. 全球及中国电子级聚合物行业未来发展预测及投资前景分析报告2022-2028年
  8. 女生学中山大学计算机专业就业前景,CCTV.com
  9. 微信小程序 --- CSS实现仿网易云音乐播放界面效果(黑胶唱片与唱针纯CSS实现)
  10. UILabel上显示笑脸符号 .