当前位置:   article > 正文

02-线性结构2 一元多项式的乘法与加法运算(20 分)_返回 02-线性结构2 一元多项式的乘法与加法运算 (20 分)

返回 02-线性结构2 一元多项式的乘法与加法运算 (20 分)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef struct node *p;
  4. struct node{
  5. int a;
  6. int b;
  7. struct node *next;
  8. };
  9. typedef p l;
  10. l read();
  11. l add(l l1,l l2);
  12. void print(l l1);
  13. l m(l l1,l l2);
  14. l mul(l l1,l l2);
  15. int main()
  16. {
  17. l l1,l2,l3,l4;
  18. l1=read();
  19. l2=read();
  20. l3=add(l1,l2);
  21. l4=m(l1,l2);
  22. print(l4);
  23. print(l3);
  24. return 0;
  25. }
  26. l read()
  27. {
  28. l p=(l)malloc(sizeof(node));
  29. l head;
  30. p->next=NULL;
  31. head=p;
  32. int n;
  33. cin>>n;
  34. while(n--)
  35. {
  36. l t=(l)malloc(sizeof(node));
  37. t->next=NULL;
  38. cin>>t->a>>t->b;
  39. p->next=t;
  40. p=t;
  41. }
  42. return head;
  43. }
  44. l add(l l1,l l2)
  45. {
  46. l t1,t2;
  47. t1=l1->next;
  48. t2=l2->next;
  49. l t=(l)malloc(sizeof(node));
  50. t->next=NULL;
  51. l head;
  52. head=t;
  53. while(t1&&t2)
  54. {
  55. l temp=(l)malloc(sizeof(node));
  56. temp->next=NULL;
  57. if(t1->b<t2->b)
  58. {
  59. temp->a=t2->a;
  60. temp->b=t2->b;
  61. t->next=temp;
  62. t=temp;
  63. t2=t2->next;
  64. }
  65. else if(t1->b>t2->b)
  66. {
  67. temp->a=t1->a;
  68. temp->b=t1->b;
  69. t->next=temp;
  70. t=temp;
  71. t1=t1->next;
  72. }
  73. else if(t1->b==t2->b)
  74. {
  75. if(t1->a+t2->a==0)
  76. {
  77. t1=t1->next;
  78. t2=t2->next;
  79. }
  80. else
  81. {
  82. temp->a=t1->a+t2->a;
  83. temp->b=t1->b;
  84. t1=t1->next;
  85. t2=t2->next;
  86. t->next=temp;
  87. t=temp;
  88. }
  89. }
  90. }
  91. if(!t1)
  92. {
  93. t->next=t2;
  94. }
  95. else if(!t2)
  96. t->next=t1;
  97. return head;
  98. }
  99. void print(l l1)
  100. {
  101. l p;
  102. p=l1->next;
  103. if(!p)
  104. {
  105. cout<<"0"<<" "<<"0"<<endl;
  106. }
  107. else
  108. while(p)
  109. {
  110. if(p->next!=NULL)
  111. {
  112. cout<<p->a<<" "<<p->b<<" ";
  113. p=p->next;
  114. }
  115. else
  116. {
  117. cout<<p->a<<" "<<p->b<<endl;
  118. p=p->next;
  119. }
  120. }
  121. }
  122. l m(l l1,l l2)
  123. {
  124. l head,p;
  125. p=(l)malloc(sizeof(node));
  126. p->next=NULL;
  127. head=p;
  128. l t1,t2;
  129. t1=l1->next;
  130. t2=l2->next;
  131. l temp;
  132. if(t1&&t2)
  133. {
  134. temp=mul(l1,t2);
  135. t2=t2->next;
  136. while(t2)
  137. {
  138. l te=mul(l1,t2);
  139. temp=add(temp,te);
  140. t2=t2->next;
  141. }
  142. p->next=temp->next;
  143. }
  144. return head;
  145. }
  146. l mul(l l1,l l2)
  147. {
  148. l head,p;
  149. p=(l)malloc(sizeof(node));
  150. p->next=NULL;
  151. head=p;
  152. l t1;
  153. t1=l1->next;
  154. while(t1)
  155. {
  156. l L=(l)malloc(sizeof(node));
  157. L->next=NULL;
  158. L->a=t1->a*l2->a;
  159. L->b=t1->b+l2->b;
  160. t1=t1->next;
  161. p->next=L;
  162. p=L;
  163. }
  164. return head;
  165. }

对于这题其实很中规中矩,需要小心的使用链表,

总结:

1.一定要有个头结点作为返回,因为它是指向第一个节点;

2.既然头结点不能移动,那么就需要一个新的节点作为移动,同时对它更新;

3.如果添加节点,那么要动态分配一个空间节点;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/342829
推荐阅读
相关标签
  

闽ICP备14008679号