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


    数据结构作业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 >
  • 相关阅读:
    C++ 三数之和
    C++ 保存读取二进制
    流媒体 Ubuntu部署srs、windows部署nginx
    sql函数(三)MERGE INTO函数
    sql函数(二)LISTAGG()函数(列转行函数)
    sql函数(一)ROW_NUMBER() OVER()--表内分组并排序
    java注释(类、构造函数、方法、代码块、单行、属性注释)
    springBoot注解整理
    @DateTimeFormat与@JsonFormat作用
    DataJPA简述与注解
  • 原文地址:https://www.cnblogs.com/CocoonFan/p/2969185.html
Copyright © 2020-2023  润新知