多项式相加·数据结构

简介: 思路: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();
}
相关文章
|
Java Linux Maven
Linux中安装MAVEN环境配置
Linux中安装MAVEN环境配置
389 3
|
前端开发 JavaScript
纯样式或使用JS的canvas实现图片旋转
纯样式或使用JS的canvas实现图片旋转
260 0
|
SQL 关系型数据库 MySQL
|
2月前
|
数据采集 存储 安全
一文带你讲透数据仓库分层!
在数据处理中,常遇到数据混乱、指标不一致、开发排期长等问题,根源往往在于数据分层设计不合理。本文详解数据仓库分层(ODS、DWD、DWS、DM、APP等),阐述其在数据清洗、整合、管理及应用中的关键作用,帮助提升数据质量、减少重复开发、增强系统扩展性,从而高效支撑业务决策。
一文带你讲透数据仓库分层!
|
数据安全/隐私保护
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
509 0
|
SQL 分布式计算 DataWorks
dataworks学习
【9月更文挑战】
444 5
|
存储 关系型数据库 MySQL
OceanBase的架构
【8月更文挑战第9天】OceanBase的架构
714 59
|
10月前
|
机器学习/深度学习 人工智能 算法
《AI芯片:如何让硬件与AI计算需求完美契合》
在人工智能快速发展的今天,AI芯片成为推动该领域前行的关键力量。AI芯片如同“超级大脑”,支撑着从智能语音助手到自动驾驶汽车等各种复杂应用。它通过GPU、ASIC和FPGA等架构,优化矩阵运算、内存管理和数据传输,满足大规模数据处理需求。尽管面临通用性和成本挑战,未来AI芯片有望在异构计算、新兴技术和降低成本方面取得突破,为AI发展注入强大动力。
506 17
|
11月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
算法 Java C语言
【数据结构】后缀(逆波兰)表达式的计算以及中缀转后缀的方法
【数据结构】后缀(逆波兰)表达式的计算以及中缀转后缀的方法
2738 1