多项式相加·数据结构

简介: 思路:1.创建一个结点结构(1)系数域(2)指数域(3)指针域2.创建一个多项式的类(1)定义头结点和表长(len)(2)函数<1>初始化函数<2>插入函数<3>输入函数<4>输出函数<5>相加函数(精华)对于相加函数,我的做法是传入两个多项式类,再对它进行累加

思路:

1.创建一个结点结构

(1)系数域

(2)指数域

(3)指针域

2.创建一个多项式的类

(1)定义头结点和表长(len)

(2)函数

<1>初始化函数

<2>插入函数

<3>输入函数

<4>输出函数

<5>相加函数(精华)

对于相加函数,我的做法是传入两个多项式类,再对它进行累加

代码如下:

#include<iostream>
using namespace std;
//定义结点
struct Node {
  int coef;//系数
  int exp;//指数
  Node* next;//指针
};
//定义类
class Polynomial {
public:
  Node* head;
  int len;
  //插入pos:1-(n+1)
  void Insert(int pos, int coef, int exp) {
    Node* p = head;
    //移动
    for (int i = 1; i < pos; i++) {
      p = p->next;
    }
    //分配结点,赋值
    Node* s = new Node;
    s->coef = coef;
    s->exp = exp;
    //插入结点
    s->next = p->next;
    p->next = s;
    //长度加一
    len++;
  }
  //初始化
  void Init() {
    head = new Node;
    head->next = NULL;
    len = 0;
  }
  //输出
  void Output()
  {
    Node* p;
    if (len == 0) {
      cout << "该多项式为空" << endl;
    }
    else {
      cout << "该多项式为:" << endl;
      p = head->next;
      for (int i = 0; i < len; i++) {
        cout << "<" << p->coef << "," << p->exp << ">||";
        p = p->next;
      }
      cout << endl;
    }
  }
  //输入函数
  void Input() {
    int number,coef,exp;
    cout << "请输入多项式的项数:";
    cin >> number;
    for (int i = 0; i < number; i++) {
      cout << "请输入第" << (i + 1) << "项的系数:" << endl;
      cin >> coef;
      cout << "请输入第" << (i + 1) << "项的指数:" << endl;
      cin >> exp;
      //插入
      Insert(len+1, coef, exp);
    }
  }
  //相加,传入两个Polynomial的链表
  void Add(Polynomial x, Polynomial y) {
    Node* pa = x.head->next;//pa指针指向a的第一个结点
    Node* pb = y.head->next;//pb指针指向b的第一个结点
    while ((pa != NULL) && (pb != NULL)) {
      //第一种情况
      if (pa->exp < pb->exp) {
        Insert(len + 1, pa->coef, pa->exp);
        pa = pa->next;//后移一格
      }
      //第二种情况
      else if (pa->exp > pb->exp) {
        Insert(len + 1, pb->coef, pb->exp);
        pb = pb->next;//后移一格
      }
      else if (pa->exp == pb->exp) {
        int temp = pa->coef + pb->coef;
        if (temp!=0) {//如果相加不为零
          Insert(len + 1, temp, pa->exp);
        }
        pa = pa->next;//后移一格
        pb = pb->next;//后移一格
      }
    }
    pa = (pa == NULL) ? pb : pa;
    while (pa != NULL) {
      Insert(len + 1, pa->coef, pa->exp);
      pa = pa->next;//后移
    }
  }
};
int main()
{
  //定义三个类
  Polynomial a;
  Polynomial b;
  Polynomial c;
  //对三个类进行初始化
  a.Init();
  b.Init();
  c.Init();
  //先输入a和b
  a.Input();
  b.Input();
  //多项式相加
  c.Add(a, b);
  //输出abc
  a.Output();
  b.Output();
  c.Output();
}
相关文章
|
5月前
|
设计模式 算法 Java
【数据结构和算法】除自身以外数组的乘积
给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32 位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题。
52 1
|
5月前
|
存储 算法 数据建模
总结的数据结构小公式
总结的数据结构小公式
99 0
|
5月前
|
存储 机器学习/深度学习 算法
【C/C++ 数据结构 】对称矩阵解析:数学原理与C/C++实践探索
【C/C++ 数据结构 】对称矩阵解析:数学原理与C/C++实践探索
179 0
离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)
离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)
198 0
|
存储 算法
一篇文章让你彻底理解数组及其扩展的数据结构,快速转置算法等,千字超详细总结!
数组 本章主要介绍数组基本概念及其扩展,二维数组的特殊矩阵:对称矩阵、三角矩阵、稀疏矩阵、十字链表等存储解耦;然后介绍并实现了稀疏矩阵的快速转置算法。 可以转载,但请声明源链接:文章源链接justin3go.com(有些latex公式某些平台不能渲染可查看这个网站)
119 0
|
存储 算法
数据结构上机实践第四周项目7 - 多项式求和
数据结构上机实践第四周项目7 - 多项式求和
150 0
数据结构上机实践第四周项目7 - 多项式求和
|
存储 人工智能
数据结构上机实践第八周项目7—对称矩阵的压缩存储及基本运算
数据结构上机实践第八周项目7—对称矩阵的压缩存储及基本运算
数据结构上机实践第八周项目7—对称矩阵的压缩存储及基本运算
|
存储
数据结构— 数组、特殊矩阵、稀疏矩阵(一)
数据结构— 数组、特殊矩阵、稀疏矩阵
124 0
数据结构— 数组、特殊矩阵、稀疏矩阵(一)
|
存储 人工智能
数据结构— 数组、特殊矩阵、稀疏矩阵(二)
数据结构— 数组、特殊矩阵、稀疏矩阵
269 0
数据结构— 数组、特殊矩阵、稀疏矩阵(二)
|
存储 算法 Windows
数据结构— 数组、特殊矩阵、稀疏矩阵(三)
数据结构— 数组、特殊矩阵、稀疏矩阵
180 0
数据结构— 数组、特殊矩阵、稀疏矩阵(三)