关于链表的C语言实现(中级)
来源:互联网 发布:2012nba总决赛数据 编辑:程序博客网 时间:2024/06/05 00:13
多项式加减法(实验名称)
一、实验目的
掌握单链表应用:用链表表示多项式,并实现多项式的加减运算。
二、实验内容
设计一个一元稀疏多项式简单的加减法计算器,要求:
(1)和多项式仍然占用原来的结点空间,并输出和多项式。
(2)多项式按照指数递增的顺序输入,用户输入的多项式没有按照指数递增时,对多项式进行排序。
(3)核心的加法算法要考虑到加法的各种情况。
三、实验代码(包括运行结果截图)
1. #include<stdio.h> 2. #include<stdlib.h> 3. #define MAXSIZE 200 4. 5. struct Node 6. { 7. int exp;//指数 8. int coe;//系数 9. struct Node *Next; 10. }; 11. typedef struct Node *LinkList; 12. typedef struct Node *PNode; 13. 14. /*初始化链表*/ 15. LinkList initList() 16. { 17. LinkList head = (LinkList)malloc(sizeof(struct Node)); 18. if (head == NULL) 19. { 20. printf("内存分配失败\n"); 21. return 0; 22. } 23. head->Next = NULL; 24. return head; 25. } 26. 27. /*对输入数据进行插入排序处理*/ 28. LinkList insertLinkList(LinkList head,PNode p) 29. { 30. PNode q; 31. LinkList pm; 32. pm = (LinkList)malloc(sizeof(struct Node)); 33. pm = head; 34. while (pm->Next != NULL) 35. { 36. if (pm->Next->exp > p->exp)//判断指数大小,根据指数顺序来 37. { 38. p->Next = pm->Next; 39. pm->Next = p;//将最大的存入p 40. return 1; 41. } 42. else if (pm->Next->exp == p->exp) 43. { 44. pm->Next->coe += p->coe; 45. if (pm->coe == 0) 46. { 47. q = pm->Next; 48. pm->Next = pm->Next->Next; 49. free(q); 50. } 51. free(p); 52. return 1; 53. } 54. pm = pm->Next; 55. } 56. if (pm->Next == NULL)//当所有节点都比p小时 57. { 58. pm->Next = p; 59. return 1; 60. } 61. } 62. 63. /*输入数据并处理*/ 64. LinkList createLinkList(LinkList head)//开始输入数据 65. { 66. PNode p; 67. int data_exp, data_coe; 68. scanf_s("%d%d", &data_coe, &data_exp); 69. p = head; 70. while (data_coe != -1 || data_exp != -1) 71. { 72. p = (PNode)malloc(sizeof(struct Node)); 73. if (p == NULL) 74. { 75. printf("内存分配失败\n"); 76. return 0; 77. } 78. p->coe = data_coe; 79. p->exp = data_exp; 80. p->Next = NULL; 81. insertLinkList(head,p);//对输入的节点进行排序处理 82. scanf_s("%d%d", &data_coe, &data_exp); 83. } 84. return head; 85. } 86. 87. /*多项式相加*/ 88. void addLinkList(LinkList l1,LinkList l2) 89. { 90. PNode p,pr; 91. PNode pa, pb; 92. pr = l1; 93. pa = l1->Next; 94. pb = l2->Next; 95. while (pa != NULL && pb != NULL) 96. { 97. if (pa->exp < pb->exp) 98. { 99. pr = pa; 100. pa = pa->Next; 101. } 102. else if (pa->exp == pb->exp) 103. { 104. if (pa->coe + pb->coe == 0)//如果两者相加为0 105. { 106. pr->Next = pa->Next; 107. p = pa; 108. free(p); 109. } 110. else 111. { 112. pa->coe += pb->coe; 113. pr = pa; 114. } 115. pa = pr->Next; 116. p = pb; 117. pb = pb->Next; 118. free(p); 119. } 120. else//如果要配入的主链表当前节点比l2大的话 将l2当前节点放置l1当前节点的前端并释放l2节点 121. { 122. p = pb->Next; 123. pb->Next = pa; 124. pr->Next = pb; 125. pr = pb; 126. pb = p; 127. } 128. } 129. if(pb) 130. { 131. pr->Next = pb; 132. } 133. } 134. 135. /*输出链表*/ 136. void printLinkList(LinkList head) 137. { 138. if (head->Next == NULL) 139. printf("此链表为空!\n"); 140. else 141. while (head->Next != NULL) 142. { 143. printf("%d %d\n", head->Next->coe, head->Next->exp); 144. head = head->Next; 145. } 146. } 147. 148. int main() 149. { 150. LinkList LA, LB; 151. printf("输入多项式LA的系数和指数,以-1 -1结尾\n"); 152. LA = initList(); 153. createLinkList(LA); 154. printf("此链表表示为\n"); 155. printLinkList(LA); 156. printf("输入多项式LB的系数和指数,以-1 -1结尾\n"); 157. LB = initList(); 158. createLinkList(LB); 159. printLinkList(LB); 160. printf("两式相加结果为\n"); 161. addLinkList(LA, LB); 162. printLinkList(LA); 163. return 0; 164. }
阅读全文
0 0
- 关于链表的C语言实现(中级)
- 关于链表的C语言实现(初级)
- C语言中级
- C语言中级部分
- C语言中级
- c 语言中级篇
- 链表的实现(C语言)
- 关于C语言俄罗斯方块的基本实现!
- 关于ceiling 的C语言实现
- 关于希尔伯特变换的 c语言实现
- 关于c语言链表的操作
- 【C语言】C语言实现简单的链表
- 关于C语言通用双向链表实现的测试--回调函数的作用
- C语言:银行储蓄系统开发(中级)
- C语言单向链表的实现
- C语言实现数据结构的链表
- 链表的c语言实现
- 链表的C语言实现
- HRBUST 1547
- Idea自带的文件过滤功能,功能类似gitignore不过只能过滤文件夹
- LSH系列二:p-稳定E2LSH
- T
- 如何编写测试用例(APP)
- 关于链表的C语言实现(中级)
- SSH框架和SVN技术分析以及客户端的使用
- 顶级程序员和普通程序员在思维模式上的5个区别
- 171111__quartz定时任务
- 炮兵阵地 POJ
- Linux下安装Mysql数据库且给用户授权(安装包安装)
- 2017NOIP TG D1 D2 爆炸记
- 【mac笔记】jenkins+svn+Xcode7.2构建成功
- mybatis 分页插件和插件的安装方法