数据结构作业 ------ 用链表实现简单多项式加法

数据结构作业01 ------ 用链表实现简单多项式加法

代码实现:

  1 #include <iostream>
  2 #include <cstring>
  3 #include <cassert>
  4 
  5 using namespace std;
  6 
  7 class Node {
  8     public:
  9         int coff, exp;
 10 
 11         Node * next;
 12 
 13         Node(){
 14             next = NULL;
 15         }
 16 
 17         Node(int n1, int n2, Node* p = NULL):coff(n1),exp(n2), next(p){}
 18 };
 19 
 20 //输出结果
 21 void PrintExp(Node *head){
 22     //cout << "\n进入输出函数----------------\n";
 23     Node *p = head->next;
 24 
 25     if(head->next == 0 ){
 26         cout << "0";
 27     }
 28     while(p){
 29         
 30         if(p->coff == 1 && !p->exp){
 31             cout << p->coff ;
 32         }
 33 
 34         if(p->coff != 1){
 35             cout << p->coff;
 36         }
 37 
 38         //cout << p->coff;
 39         if(p->exp == 0){
 40             ;
 41         } else if(p->exp == 1){
 42             cout << "X";
 43         } else if(p->exp < 0){
 44             cout << "X^(" << p->exp << ")";
 45         } else {
 46             cout << "X^" << p->exp;
 47         }
 48         if(p->next){
 49             cout << " + ";
 50         }
 51         p = p->next;
 52     }
 53     
 54 
 55     //cout << endl << endl;
 56 }
 57 
 58 //创建多项式
 59 Node* CreatExp(char * str)
 60 {
 61     Node *head, *p, *NewNode, *temp;
 62 
 63     head = new Node();
 64     
 65 
 66     int count = 1, n;
 67     do{
 68         cout << "\n请输入您要添加的项数:";
 69         cin >> n;
 70     }while(n < 1);
 71     
 72     do{
 73         p = head->next;
 74         temp = head;
 75 
 76         cout << "请输入第 " << count << " 项系数和指数:";
 77         count++;
 78 
 79         /*
 80          * 创建一项数据
 81          */
 82         NewNode = new Node();
 83         cin >> NewNode->coff >> NewNode->exp;
 84         if(!NewNode->coff){//如果新创建的数据项的系数是0,则不加入多项式中
 85             delete NewNode;
 86             continue;
 87         }
 88         
 89         /*
 90          * 插入的时候升序排列 
 91          */
 92         while((p != NULL) && (p->exp < NewNode->exp)){//找到插入的位置
 93             temp = p;
 94             p = p->next;
 95         }
 96 
 97         if((p != NULL) && (p->exp == NewNode->exp)){
 98             p->coff += NewNode->coff;
 99             delete NewNode;
100         } else {
101             temp->next = NewNode;
102             NewNode->next = p;
103         }
104 
105     }while(--n);
106 
107     cout << "您输入的表达式 Expression(" << str << ") = ";
108     
109 
110     //输出表达式语句
111     PrintExp(head);
112     cout << endl;
113 
114     return head;
115 }
116 
117 
118 //多项式加法实现
119 Node* Add(Node* pExp1, Node* pExp2)
120 {
121     //cout << "\n进入加法函数----------......\n";
122     Node *head, *p, *temp;
123 
124     head = p = new Node();
125     pExp1 = pExp1->next;
126     pExp2 = pExp2->next;
127 
128     while(pExp1 != NULL && pExp2 != NULL ){
129         //cout << "\n------------------进入大循环XXXXXX\n";
130         if((pExp1->exp) < (pExp2->exp)){
131             p->next = new Node(pExp1->coff, pExp1->exp);
132             pExp1 = pExp1->next;
133         } else if((pExp1->exp) > (pExp2->exp)) {
134             p->next = new Node(pExp2->coff, pExp2->exp);
135             pExp2 = pExp2->next;
136         } else {
137             if(pExp2->coff + pExp1->coff){//如果系数和为0,则不加入
138                 p->next = new Node(pExp2->coff + pExp1->coff, pExp2->exp);
139             }
140             pExp1 = pExp1->next;
141             pExp2 = pExp2->next;
142         }
143 
144         p = p->next;
145     }
146 
147 
148 
149     //将尚未结束的表达式并入结果表达式
150     if(pExp1 == NULL){ //如果表达式1已经结束
151         temp = pExp2;
152     } else {           //如果表达式1已经结束
153         temp = pExp1;
154     }
155 
156     while(temp != NULL){
157         if(temp->exp == p->exp){
158             p->coff += temp->coff;
159             temp = temp->next;
160 
161         } else {
162             p->next = new Node(temp->coff, temp->exp);
163             temp = temp->next;
164             p = p->next;
165         }
166         
167     }168 
169     //assert(p->next == NULL);
170 
171 
172     return head;
173 }
174 
175 int main()
176 {
177     while(true){
178         Node *A = CreatExp("A");
179         Node *B = CreatExp("B");
180 
181         Node *C = Add(A,B);
182 
183         cout << "\nExpresion< "   ;
184         PrintExp(A);
185         cout << " > + Expresion< " ;
186         PrintExp(B);
187         cout << " > = < ";
188         PrintExp(C);
189 
190         cout << " >\n\n\n-------------------------------------------";
191     }
192 
193     return 0;
194 }


测试结果:

请输入您要添加的项数:1
请输入第 1 项系数和指数:1 5
您输入的表达式 Expression(A) = X^5

请输入您要添加的项数:1
请输入第 1 项系数和指数:3 8
您输入的表达式 Expression(B) = 3X^8

Expresion< X^5 > + Expresion< 3X^8 > = < X^5 + 3X^8 >


-------------------------------------------
请输入您要添加的项数:1
请输入第 1 项系数和指数:4 0
您输入的表达式 Expression(A) = 4

请输入您要添加的项数:1
请输入第 1 项系数和指数:0 4
您输入的表达式 Expression(B) = 0

Expresion< 4 > + Expresion< 0 > = < 4 >


-------------------------------------------
请输入您要添加的项数:1
请输入第 1 项系数和指数:2 0
您输入的表达式 Expression(A) = 2

请输入您要添加的项数:1
请输入第 1 项系数和指数:0 3
您输入的表达式 Expression(B) = 0

Expresion< 2 > + Expresion< 0 > = < 2 >


-------------------------------------------
请输入您要添加的项数:1
请输入第 1 项系数和指数:3 6
您输入的表达式 Expression(A) = 3X^6

请输入您要添加的项数:1
请输入第 1 项系数和指数:-3 6
您输入的表达式 Expression(B) = -3X^6

Expresion< 3X^6 > + Expresion< -3X^6 > = < 0 >


-------------------------------------------
请输入您要添加的项数:2
请输入第 1 项系数和指数:1 2
请输入第 2 项系数和指数:2 4
您输入的表达式 Expression(A) = X^2 + 2X^4

请输入您要添加的项数:2
请输入第 1 项系数和指数:3 8
请输入第 2 项系数和指数:3 4
您输入的表达式 Expression(B) = 3X^4 + 3X^8

Expresion< X^2 + 2X^4 > + Expresion< 3X^4 + 3X^8 > = < X^2 + 5X^4 + 3X^8 >


-------------------------------------------
请输入您要添加的项数:1
请输入第 1 项系数和指数:2 3
您输入的表达式 Expression(A) = 2X^3

请输入您要添加的项数:4
请输入第 1 项系数和指数:1 9
请输入第 2 项系数和指数:4 0
请输入第 3 项系数和指数:3 2
请输入第 4 项系数和指数:7 -4
您输入的表达式 Expression(B) = 7X^(-4) + 4 + 3X^2 + X^9

Expresion< 2X^3 > + Expresion< 7X^(-4) + 4 + 3X^2 + X^9 > = < 7X^(-4) + 4 + 3X^2 + 2X^3 + X^9 >


-------------------------------------------
请输入您要添加的项数:5
请输入第 1 项系数和指数:1 8
请输入第 2 项系数和指数:3 21
请输入第 3 项系数和指数:-6 8
请输入第 4 项系数和指数:0 2
请输入第 5 项系数和指数:7 4
您输入的表达式 Expression(A) = 7X^4 + -5X^8 + 3X^21

请输入您要添加的项数:7
请输入第 1 项系数和指数:9 9
请输入第 2 项系数和指数:8 8
请输入第 3 项系数和指数:7 7
请输入第 4 项系数和指数:6 6
请输入第 5 项系数和指数:5 5
请输入第 6 项系数和指数:4 4
请输入第 7 项系数和指数:3 3
您输入的表达式 Expression(B) = 3X^3 + 4X^4 + 5X^5 + 6X^6 + 7X^7 + 8X^8 + 9X^9

Expresion< 7X^4 + -5X^8 + 3X^21 > + Expresion< 3X^3 + 4X^4 + 5X^5 + 6X^6 + 7X^7 + 8X^8 + 9X^9 >
= < 3X^3 + 11X^4 + 5X^5 + 6X^6 + 7X^7 + 3X^8 + 9X^9 + 3X^21 >

 

 

posted @ 2013-03-19 14:50  Cocoon  阅读(719)  评论(0编辑  收藏  举报