多项式相加·数据结构

简介: 思路: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环境配置
502 3
|
消息中间件 SQL 分布式计算
一篇文章搞定数据同步工具SeaTunnel
一篇文章搞定数据同步工具SeaTunnel
10693 1
|
SQL 关系型数据库 MySQL
|
11月前
|
数据采集 存储 安全
一文带你讲透数据仓库分层!
在数据处理中,常遇到数据混乱、指标不一致、开发排期长等问题,根源往往在于数据分层设计不合理。本文详解数据仓库分层(ODS、DWD、DWS、DM、APP等),阐述其在数据清洗、整合、管理及应用中的关键作用,帮助提升数据质量、减少重复开发、增强系统扩展性,从而高效支撑业务决策。
一文带你讲透数据仓库分层!
|
算法 前端开发 定位技术
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
1374 1
|
12月前
|
弹性计算 人工智能 边缘计算
阿里云国际站2025年最新动态:全球云计算加速,中小企业出海利器
2025年,阿里云国际站凭借领先技术与本地化服务,助力企业高效出海。核心产品如弹性计算ECS Enterprise、云原生数据库PolarDB-X及边缘计算ENS Pro全面升级,覆盖全球28个区域,提供低延迟、高稳定性支持。同时推出“海外现货”模式,缩短外贸订单周期50%。通过技术+生态优势,助力中小企业实现全球化增长。
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
10430 123
|
存储 关系型数据库 MySQL
OceanBase的架构
【8月更文挑战第9天】OceanBase的架构
1008 59
|
Docker 容器
『Docker Compose』使用国内镜像极速安装Docker Compose
📣读完这篇文章里你能收获到 - 使用国内镜像极速安装Docker Compose
23069 0
『Docker Compose』使用国内镜像极速安装Docker Compose
|
算法 Java C语言
【数据结构】后缀(逆波兰)表达式的计算以及中缀转后缀的方法
【数据结构】后缀(逆波兰)表达式的计算以及中缀转后缀的方法
5040 1