多项式相加·数据结构

简介: 思路: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环境配置
398 3
|
前端开发 JavaScript
纯样式或使用JS的canvas实现图片旋转
纯样式或使用JS的canvas实现图片旋转
295 0
|
SQL 关系型数据库 MySQL
|
数据安全/隐私保护
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
543 0
|
SQL 分布式计算 DataWorks
dataworks学习
【9月更文挑战】
459 5
|
存储 关系型数据库 MySQL
OceanBase的架构
【8月更文挑战第9天】OceanBase的架构
748 59
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
编解码 人工智能 开发者
长短大小样样精通!原始分辨率、超长视频输入:更灵活的全开源多模态架构Oryx
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据。其核心创新在于能够对图像和视频进行任意分辨率编码,并通过动态压缩器模块提高处理效率。Oryx 在处理长视觉上下文(如视频)时表现出色,同时在图像、视频和3D多模态理解方面也展现了强大能力。该模型的开源性质为多模态研究社区提供了宝贵资源,但同时也面临一些挑战,如选择合适的分辨率和压缩率以及计算资源的需求。
242 3
|
关系型数据库 MySQL 数据库
ClickHouse(07)ClickHouse数据库引擎解析
ClickHouse支持多种数据库引擎,包括Atomic(默认)、MySQL、MaterializeMySQL、Lazy、PostgreSQL、MaterializedPostgreSQL。Atomic提供非阻塞的表操作和原子的表交换,有UUID标识和延迟删除功能。MySQL引擎允许与远程MySQL服务器交互,支持INSERT和SELECT,不支持RENAME操作。PostgreSQL引擎类似,可与远程PostgreSQL服务进行读写操作。SQLite引擎用于连接SQLite数据库。实验性引擎如MaterializeMySQL和MaterializedPostgreSQL用于实现实时数据同步。
1074 5
|
存储 安全 算法
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
718 1