NOJ_1005_多项式加法(采用尾插法建立单链表的运用)
来源:互联网 发布:南阳炳盛网络 编辑:程序博客网 时间:2024/05/30 20:09
多项式加法
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 3360 测试通过 : 485
最后附上 王道数据结构给的头插法,微插法建立链表的代码
思想就是 先建立新节点,初始化节点,(判断节点),然后将节点添加到链表中!这样比直接在链表上加new lnode 然后xxx 好在一切来得及,指针还没变化!
总提交 : 3360 测试通过 : 485
比赛描述
线性表是一种最简单、最基本,也是最常用的数据结构,其用途十分广泛,例如,用带表头结点的单链表求解一元整系数多项式加法和乘法运算。
现给两个一元整系数多项式,请求解两者之和。
输入
两组数据,每一组代表一个一元整系数多项式,有多行组成,其中每一行给出多项式每一项的系数和指数,这些行按指数递减次序排序,每一组结束行为
0 -1
输出
三组数据,前两组为一元整系数多项式,最后一组为两个多项式的和。
一元整系数多项式输出形式如下:
(1)多项式项4x输出为4X
(2)多项式项4x2输出为4X^2
(3)第一项系数为正数时,加号不要输出
(4)除常系数项外,项系数为1不显式输出,-1输出为-
例如,4x3- x2+x-1正确输出形式为4X^3-X^2+X-1,错误输出形式为 +4X^3-1X^2+1X-1样例输入
3 14
-8 8
6 2
2 0
0 -1
2 10
4 8
-6 2
0 -1
样例输出
3X^14-8X^8+6X^2+2
2X^10+4X^8-6X^2
3X^14+2X^10-4X^8+2
提示
该题属于南京邮电大学《数据结构A》实验一中的内容,验证的是课本代码,请慎重解答。
题目来源
CHENZ
#include <iostream>using namespace std;//待会可以尝试用list容器去写struct lnode{ int zhishu,xishu; lnode *next;};lnode* creat(lnode* L){ lnode* p = L; lnode *s; int m,n; do { cin >> m >> n; s = new lnode; s->xishu = m; s->zhishu = n; p->next = s; p=s; }while((m!=0)&&(n!=-1)); return L;}int display(lnode* L){ lnode* p; if(L->next->zhishu==-1) cout<<"0"; else for(p=L->next;p->zhishu>=0;p=p->next) { if(p->xishu>0&&p!=L->next) cout << "+"; if(p->xishu==1&&p->zhishu>0); else if(p->xishu==-1&&p->zhishu>0) cout << "-"; else cout << p->xishu; if(p->zhishu>0) cout << "X" ; if(p->zhishu>1) cout << "^" <<p->zhishu ; } cout << endl;}lnode* xiangjia(lnode *L,lnode *L1,lnode* L2){ lnode *p=L1->next; lnode *q=L2->next; lnode *r=L; lnode *s; while((p->zhishu>=0)||(q->zhishu>=0)) { s = new lnode; s->next = NULL; //r->next = new lnode; //r=r->next; if(p->zhishu>q->zhishu) { s->xishu=p->xishu; s->zhishu=p->zhishu; p=p->next; r->next = s; r = r->next; } else if(p->zhishu<q->zhishu) { s->xishu=q->xishu; s->zhishu=q->zhishu; q=q->next; r->next = s; r = r->next; } else { s->xishu=p->xishu+q->xishu; s->zhishu=p->zhishu; p=p->next; q=q->next; if(s->xishu != 0) { r->next = s; r = r->next; } else delete(s); } } r->next = new lnode; r=r->next; r->xishu=0; r->zhishu=-1; return L;}int main(){ int m,n; lnode *L1; lnode *L2; lnode *L; L1 = new lnode; L1 = creat(L1); display(L1); L2 = new lnode; L2 = creat(L2); display(L2); L = new lnode; L = xiangjia(L,L1,L2); display(L);}
最后附上 王道数据结构给的头插法,微插法建立链表的代码
lnode* creat1(lnode *L) //头插法{lnode *s;int x;L = (lnode *)malloc(sizeof(lnode));L->next = NULL;scanf("%d",&x);while(x!=9999){s = (lnode*)malloc(sizeof(lnode));s->date = x;s->next = L->next;L->next = s;scanf("%d",&x);}return L;}lnode* creat2(lnode *L) //尾插法{lnode *s;int x;lnode *p;L = (lnode *)malloc(sizeof(lnode));L->next = NULL;p=L;scanf("%d",&x);while(x!=9999){s= (lnode *)malloc(sizeof(lnode));s->date = x;s->next = NULL;p->next=s;p=s;scanf("%d",&x);}}
思想就是 先建立新节点,初始化节点,(判断节点),然后将节点添加到链表中!这样比直接在链表上加new lnode 然后xxx 好在一切来得及,指针还没变化!
0 0
- NOJ_1005_多项式加法(采用尾插法建立单链表的运用)
- 数据结构 P42-43 算法实现 多项式的建立及加法
- 单链表实现多项式加法的头文件(待删改)
- 单链表实现多项式的存储和加法
- //单链表1-求两个多项式的加法
- 多项式的加法运算(等待修改)
- 多项式加法的实现(链表版)
- 多项式的加法
- 两个多项式的加法
- 多项式的加法
- 多项式加法的实现
- 运用java的数组实现 多项式加法 java数组 编程习题
- 链表的多项式加法链表的多项式加法
- 一元多项式的加法C++
- 多项式加法的Java实现
- 多项式的加法乘法实现
- 多项式的加法与乘法
- 多项式的加法和乘法
- datetime的时间处理逻辑
- 最小路径覆盖问题[网络流24题之3]
- Python包帮助文档
- 4.SUID、SGID、SBIT、chattr权限
- Hibernate实现将图片保存至数据库、显示在页面
- NOJ_1005_多项式加法(采用尾插法建立单链表的运用)
- 在Xcode中使用Git进行源码版本控制
- RGB、HSB\HSV、HSL三种颜色空间的原理理解与转换
- java代码获取服务器的地址
- ClassyShark查看apk包信息
- web跨域问题的解决
- PassCode - 打造一个简单易用的安全锁类库
- 我常用的linux命令
- Android:Ubuntu 16.04上编译Android主线最新代码