第四周项目5-多项式求和
来源:互联网 发布:淘宝信用查询网 编辑:程序博客网 时间:2024/04/30 20:53
问题及代码:[cpp] view plain copy 1./* 2.Copyright (c)2015,烟台大学计算机与控制工程学院 3.All rights reserved. 4.文件名称:多项式求和.cpp 5.作 者:朱建豪 6.完成日期:2016年9月23日 7.版 本 号:v1.0 8.问题描述:用单链表存储一元多项式,并实现两个多项式的加法。 9.输入描述:若干数据。 10.程序输出:多项式A,多项式B,有序多项式A,B,相加后的多项式。 11.*/ [cpp] view plain copy 1.#include <stdio.h> 2.#include <malloc.h> 3.#define MAX 20 //多项式最多项数 4.typedef struct //定义存放多项式的数组类型 5.{ 6. double coef; //系数 7. int exp; //指数 8.} PolyArray; 9. 10.typedef struct pnode //定义单链表结点类型,保存多项式中的一项,链表构成多项式 11.{ 12. double coef; //系数 13. int exp; //指数 14. struct pnode *next; 15.} PolyNode; 16. 17.void DispPoly(PolyNode *L) //输出多项式 18.{ 19. bool first=true; //first为true表示是第一项 20. PolyNode *p=L->next; 21. while (p!=NULL) 22. { 23. if (first) 24. first=false; 25. else if (p->coef>0) 26. printf("+"); 27. if (p->exp==0) 28. printf("%g",p->coef); 29. else if (p->exp==1) 30. printf("%gx",p->coef); 31. else 32. printf("%gx^%d",p->coef,p->exp); 33. p=p->next; 34. } 35. printf("\n"); 36.} 37.void DestroyList(PolyNode *&L) //销毁单链表 38.{ 39. PolyNode *p=L,*q=p->next; 40. while (q!=NULL) 41. { 42. free(p); 43. p=q; 44. q=p->next; 45. } 46. free(p); 47.} 48.void CreateListR(PolyNode *&L, PolyArray a[], int n) //尾插法建表 49.{ 50. PolyNode *s,*r; 51. int i; 52. L=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点 53. L->next=NULL; 54. r=L; //r始终指向终端结点,开始时指向头结点 55. for (i=0; i<n; i++) 56. { 57. s=(PolyNode *)malloc(sizeof(PolyNode));//创建新结点 58. s->coef=a[i].coef; 59. s->exp=a[i].exp; 60. r->next=s; //将*s插入*r之后 61. r=s; 62. } 63. r->next=NULL; //终端结点next域置为NULL 64.} 65.void Sort(PolyNode *&head) //按exp域递减排序 66.{ 67. PolyNode *p=head->next,*q,*r; 68. if (p!=NULL) //若原单链表中有一个或以上的数据结点 69. { 70. r=p->next; //r保存*p结点后继结点的指针 71. p->next=NULL; //构造只含一个数据结点的有序表 72. p=r; 73. while (p!=NULL) 74. { 75. r=p->next; //r保存*p结点后继结点的指针 76. q=head; 77. while (q->next!=NULL && q->next->exp>p->exp) 78. q=q->next; //在有序表中找插入*p的前驱结点*q 79. p->next=q->next; //将*p插入到*q之后 80. q->next=p; 81. p=r; 82. } 83. } 84.} 85.void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc) //求两有序集合的并,完成加法 86.{ 87. PolyNode *pa=ha->next,*pb=hb->next,*s,*tc; 88. double c; 89. hc=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点 90. tc=hc; 91. while (pa!=NULL && pb!=NULL) 92. { 93. if (pa->exp>pb->exp) 94. { 95. s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 96. s->exp=pa->exp; 97. s->coef=pa->coef; 98. tc->next=s; 99. tc=s; 100. pa=pa->next; 101. } 102. else if (pa->exp<pb->exp) 103. { 104. s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 105. s->exp=pb->exp; 106. s->coef=pb->coef; 107. tc->next=s; 108. tc=s; 109. pb=pb->next; 110. } 111. else //pa->exp=pb->exp 112. { 113. c=pa->coef+pb->coef; 114. if (c!=0) //系数之和不为0时创建新结点 115. { 116. s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 117. s->exp=pa->exp; 118. s->coef=c; 119. tc->next=s; 120. tc=s; 121. } 122. pa=pa->next; 123. pb=pb->next; 124. } 125. } 126. if (pb!=NULL) pa=pb; //复制余下的结点 127. while (pa!=NULL) 128. { 129. s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 130. s->exp=pa->exp; 131. s->coef=pa->coef; 132. tc->next=s; 133. tc=s; 134. pa=pa->next; 135. } 136. tc->next=NULL; 137.} 138.int main() 139.{ 140. PolyNode *ha,*hb,*hc; 141. PolyArray a[]= {{1.2,0},{2.5,1},{3.2,3},{-2.5,5}}; 142. PolyArray b[]= {{-1.2,0},{2.5,1},{3.2,3},{2.5,5},{5.4,10}}; 143. CreateListR(ha,a,4); 144. CreateListR(hb,b,5); 145. printf("原多项式A: "); 146. DispPoly(ha); 147. printf("原多项式B: "); 148. DispPoly(hb); 149. Sort(ha); 150. Sort(hb); 151. printf("有序多项式A: "); 152. DispPoly(ha); 153. printf("有序多项式B: "); 154. DispPoly(hb); 155. Add(ha,hb,hc); 156. printf("多项式相加: "); 157. DispPoly(hc); 158. DestroyList(ha); 159. DestroyList(hb); 160. DestroyList(hc); 161. return 0; 162.} 运行结果:<img src="http://img.blog.csdn.net/20160923111834346?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />知识点总结:实现了链表的使用。学习心得:对于这种看上去比较难以理解的项目,要借助老师的代码去理解,将别人的智慧变成自己的智慧,这样才抄的合理。
0 0
- 第四周项目5 多项式求和
- 第四周 项目5-多项式求和
- 第四周项目5--多项式求和
- 第四周 项目5-多项式求和
- 第四周项目5-多项式求和
- 第四周--项目5-多项式求和
- 【第四周项目5-多项式求和】
- 第四周项目5-多项式求和
- 第四周项目5-多项式求和
- 第四周 项目5-多项式求和
- 第四周项目5-多项式求和
- 第四周项目5多项式求和
- 第四周项目5 多项式求和
- 第四周项目 多项式求和
- 第四周--项目六--多项式求和
- 第四周 项目6—多项式求和
- 第四周项目6-多项式求和
- 第四周项目6-多项式求和
- eclipse使用总结:自动补全(临时保存)
- 缓冲溢出保护
- [iOS Xcode8]上传AppStore 无法构建版本 没有➕号
- 俄罗斯最大社交网站(vk.com)被黑一亿数据 附图
- MongoDB基础部分及实现(二)
- 第四周项目5-多项式求和
- http的一个在线工具(推荐)
- Qt之QStringListModel
- RDLC 使用经验谈
- Android框架学习笔记03Retrofit框架
- Mac下ZooKeeper环境部署,Linux方法相同
- 2016ACM/ICPC Shengyang Online-1002 List wants to travel
- Cygwin安装和配置
- 超高清视频体验-4K片源