zoukankan      html  css  js  c++  java
  • 数据结构实训(一)--- 单链表应用------一元多项式

    【问题描述】编写一个程序用单链表存储多项式,并实现两个一元多项式A与B相加的函数。A,B刚开始是升序的,A与B之和按降序排列。例如:
    多项式A: 1.2X^0 2.5X^1 3.2X^3 -2.5X^5
    多项式B: -1.2X^0 2.5X^1 3.2X^3 2.5X^5 5.4X^10
    多项式A与B之和:5.4X^10 6.4X^3 5X^1

    【输入形式】任意两个多项式A和B

    【输出形式】多项式中某一项的系数与指数,系数保留一位小数。

    【样例输入】1.2 0 2.5 1 3.2 3 -2.5 5
    -1.2 0 2.5 1 3.2 3 2.5 5 5.4 10
    2

    【样例输出】6.4 3

    【样例说明】 第一个多项式的系数与指数对,以空格隔开
    第二个多项式的系数与指数对,以空格隔开
    输出第2项的系数与指数,系数与指数间用空格隔开,系数保留一位小数

    【评分标准】必须用链表实现。

      1 #include <iostream>
      2 #include <vector>
      3 #include <iomanip>
      4 using namespace std;
      5 
      6 
      7 // 节点定义
      8 typedef struct node
      9 {
     10     float data;     // 数据项
     11     int exp;        // 指数项
     12     node* next;     // 指向下个节点的指针
     13 } node;
     14 
     15 // 函数声明
     16 node* LinkList(node* first,vector<float> dataTemp,vector<int> expTemp,int len); // 链表构建
     17 node* LinkCreate();    // 多项式构建
     18 void SaveLeft(vector<float> &dataTemp, vector<int> &expTemp, int &LengthTemp, node* polyTemp1, node* polyTemp2); // 参数一二存储多项式A和B的和
     19 
     20 // 主程序
     21 int main()
     22 {
     23     node* poly_1 = LinkCreate(); // 多项式A
     24     node* poly_2 = LinkCreate(); // 多项式B
     25 
     26     vector<float> dataMain; // 存储数据向量
     27     vector<int> expMain;    // 存储指数向量
     28     int length, num;        // length 存储 dataMain、expMain、两向量的长度; num为需要找的第几项
     29 
     30     SaveLeft(dataMain, expMain, length, poly_1, poly_2); // 存储多项式的和
     31     cin >> num;
     32     cout << fixed << setprecision(1) << dataMain[length-num];
     33     cout << " " << expMain[length-num];
     34 
     35 }
     36 
     37 
     38 /**
     39 * 尾插法单链表
     40 * @param
     41 * first 头指针、 dataTemp 数据项数组、 expTemp 指数项数组、 len 链表长度
     42 */
     43 node* LinkList(node* first,vector<float> dataTemp,vector<int> expTemp,int len)
     44 {
     45     // 头结点
     46     first = new node;
     47     first->next = NULL;
     48     // 中间节点
     49     node* p;
     50     node* rear = first;
     51     // 数据插入
     52     for(int i=0; i<len; i++)
     53     {
     54         p = new node;
     55         p->data = dataTemp[i];
     56         p->exp = expTemp[i];
     57         rear->next = p;
     58         rear = p;
     59     }
     60     rear->next = NULL;
     61     // 返回头结点
     62     return first;
     63 }
     64 
     65 
     66 // 链表创建
     67 node* LinkCreate()
     68 {
     69     int le = 0; // 链表长度
     70     vector<float> dT; // 存储数据向量
     71     vector<int> eT;    // 存储指数向量
     72 
     73     do
     74     {
     75         float a;
     76         int b;
     77         cin >> a >> b;
     78         dT.push_back(a);
     79         eT.push_back(b);
     80         le++;
     81     }
     82     while(cin.get() != '
    ');
     83 
     84     node* poly = NULL;
     85     poly = LinkList(poly, dT, eT, le);
     86 
     87     return poly;
     88 }
     89 
     90 
     91 /**
     92 * @param
     93 * dataTemp 存储多项式A+B的系数 expTemp存储多项式A+B的指数 LengthTemp存储A+B的长度
     94 * polyTemp1 多项式A polyTemp2 多项式B
     95 */
     96 void SaveLeft(vector<float> &dataTemp, vector<int> &expTemp, int &LengthTemp, node* polyTemp1, node* polyTemp2)
     97 {
     98     node* i = polyTemp1->next;
     99     node* j = polyTemp2->next;
    100     LengthTemp = 0;
    101     while(i != NULL || j!=NULL)
    102     {
    103         if(i == NULL)
    104         {
    105             while(j != NULL)
    106             {
    107                 dataTemp.push_back(j->data);
    108                 expTemp.push_back(j->exp);
    109                 // cout << dataMain[k] << " " << expMain[k] << endl;
    110                 LengthTemp++;
    111                 j = j->next;
    112             }
    113         }
    114         else if(j == NULL)
    115         {
    116             while(i != NULL)
    117             {
    118                 dataTemp.push_back(i->data);
    119                 expTemp.push_back(i->exp);
    120                 // cout << dataMain[k] << " " << expMain[k] << endl;
    121                 LengthTemp++;
    122                 i = i->next;
    123             }
    124         }
    125         else if(i->exp == j->exp)
    126         {
    127             if(i->data != -(j->data) )
    128             {
    129                 dataTemp.push_back(i->data+j->data);
    130                 expTemp.push_back(i->exp);
    131                 LengthTemp++;
    132             }
    133             i = i->next;
    134             j = j->next;
    135         }
    136         else if(i->exp > j->exp)
    137         {
    138             dataTemp.push_back(j->data);
    139             expTemp.push_back(j->exp);
    140             LengthTemp++;
    141             j = j->next;
    142         }
    143         else if(i->exp < j->exp)
    144         {
    145             dataTemp.push_back(i->data);
    146             expTemp.push_back(i->exp);
    147             LengthTemp++;
    148             i = i->next;
    149         }
    150     }
    151 }
  • 相关阅读:
    6. Flask请求和响应
    5. Flask模板
    FW:Software Testing
    What is the difference between modified duration, effective duration and duration?
    How to push master to QA branch in GIT
    FTPS Firewall
    Query performance optimization of Vertica
    (Forward)5 Public Speaking Tips That'll Prepare You for Any Interview
    (转)The remote certificate is invalid according to the validation procedure
    Change
  • 原文地址:https://www.cnblogs.com/DullRabbit/p/12558717.html
Copyright © 2011-2022 走看看