【数据结构】一元多项式相加(链表应用实验)
//定义一元多项式链表结点结构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.界面好看
【数据结构】一元多项式相加(链表应用实验)相关推荐
- 数据结构 - 一元多项式相加减(C语言)
通常情况下,一元多项式可写成: an(x) = a1x^e1 + a2x^e2 + a3x^e3 + ... + amx^em (数字,m为下标),其中:pi是指数为ei的项的非零系数,0<= ...
- 数据结构——一元多项式相加(C语言版本)
本关任务:设计一种单链表存储结构,每个结点存储一项的系数和指数,类型都是整型,编写完成产生多项式的函数.多项式相加及输出多项式的函数. 相关知识 为了完成本关任务,你需要掌握: 如何存储一个一元多项式 ...
- 《数据结构》单链表操作实验报告
用于复习链表,自己写的有关链表的一些操作,包括后插前插创建链表,删除,插入,有序合并,查找,遍历,反转,查中间节点,删倒数节点,检测环结构的功能.可以用做C语言实训参考. #include<io ...
- 数据结构——有序链表的合并,链表实现一元多项式相加
1.有序链表的合并 void Connect(LinkList a, LinkList b, LinkList& c) {LNode* pa, * pb, * pc;//三个结点指针pa = ...
- 数据结构—— 一元多项式的运算(相加,相减,相乘)【C语言实现】
用 C语言实现一元多项式的运算(相加,相减,相乘) 1.创建多项式时,无论指数项按什么顺序输入,输出均能实现以升幂顺序输出,且输入时有相同指数项时能够实现合并. 2.能够代入确切的X计算出最终多项式的 ...
- C语言一元多项式相加(链表)
今天写一个关于一元多项式相加的程序,就当是在练习运用一下链表的知识.首先,我们先来分析一波,一元多项式相加,首先要用链表创建两个或多个多项式,每个节点里的数据有两个,系数和指数:其次,如果要实现乱幂输 ...
- 基于C++的一元多项式相加
资源下载地址:https://download.csdn.net/download/sheziqiong/85996014 资源下载地址:https://download.csdn.net/downl ...
- 数据结构—— 一元多项式的加法运算
一. 需求分析 0.问题描述 在数学上,一个一元n次多项式 可按降序写成: 它由n+1个系数唯一确定,因此,在计算机里他可以用一个线性表表示: 设Pn(x)和Qn(x)分别为两个一元多项式,请求出两个 ...
- 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告
20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...
- 数据结构-一元多项式加减程序
//一元多项式加减程序 //程序:张建波 //时间:2005/7/12 PM:20-08 //功能: // 1:可以计算 1+2+3-1+2-5+6+3 (加减法均可) // 2: 可 ...
最新文章
- 大数据教程(9.1)流量汇总排序的mr实现
- 网络编程(原始套接字)
- 从生命周期去看互联网金融产品的风险管理框架
- mac命令行ftp操作
- windosw应用提示内存不足
- mysql5.7.17完全卸载_MySQL5.7完全卸载步骤详解
- 在 Panorama 页面中添加 ApplicationBar
- 壁面函数matlab,Y+的查看及FLUENT壁面函数的选择
- html中播放m3u8文件
- Git- 报错 error: bad signature 0x00000000 fatal: index file corrupt
- sql升级重启计算机失败win10,win10纯净版安装sql server 2008重启失败的解决办法
- 详解电路设计中的RC电路
- 高鹏清华计算机系,中国最顶尖的学霸到底有多厉害?看完,膝盖已跪碎!
- 市场估值-指数PE讨论
- 【实战项目惜时App需求分析说明书】Vue-cli3+Vant UI+Vue-element-admin+Egg.js+Mysql
- 计算机方面的英语文章300字,关于电脑作文300字5篇
- [CQOI2005]三角形面积并
- md文件转html文件
- flink 教程 Window
- 张正友平面标定方法 超详细