NOJ_1005_多项式加法(采用尾插法建立单链表的运用)
2016-05-19 15:13
423 查看
多项式加法
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 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 好在一切来得及,指针还没变化!
相关文章推荐
- hanio 塔和递规的理解。
- [转]struts1.2的action参数配置
- jquery复选框操作
- 1008. 数组元素循环右移问题 (20)
- datetime的时间处理逻辑
- 如何通过OWA登录界面修改域用户的密码
- 表的复杂查询-—多表查询
- 如何通过OWA登录界面修改域用户的密码
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
- Unity之AssetPostprocessor学习一
- Matlab-直方图
- java springMVC里搭建redis
- java中 0xff的意义
- Solr 6.0 学习(三)Schema.xml 配置
- Excel 列索引 转 列英文序号
- 【福利】个推携手Testin,总价16万“企业服务大礼包”免费领!
- js刷新页面方法大全
- 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
- 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法
- WIndows 相关知识