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 }
  • 相关阅读:
    ajax的调用
    jqurey的应用
    php数据访问数据层
    php租房子练习
    php投票
    Thinkphp 控制器
    ThinkPHP 框架基础
    php留言板
    php上传文件及头像预览
    php文件操作
  • 原文地址:https://www.cnblogs.com/DullRabbit/p/12558717.html
Copyright © 2011-2022 走看看