单链表之一元多项式求和C++实现
单链表之一元多项式求和
一元多项式求和单链表实现伪代码
1、工作指针 pre、p、qre、q 初始化
2、while(p 存在且 q 存在)执行下列三种情况之一:
2.1、若 p->exp < q->exp:指针 p 后移;
2.2、若 p->exp > q->exp,则
2.2.1、将结点 q 插到结点 p 之前
2.2.2、指针 p 指向他原指结点的下一个结点;
2.3、若 p->exp == q->exp,则
2.3.1、p->coef = p->coef + q->coef
2.3.2、若 p->coef == 0,则执行下列操作,否则指针 p 后移,
2.3.2.1、删除结点 p
2.3.2.2、使指针 p 指向它原指结点的下一个结点
2.3.3、删除结点 q
2.3.4、使指针 q 指向它原指结点的下一个结点
3、如果 q 不为空,将结点 q 链接在第一个单链表的后面。
一、一元多项式求和单链表实现头文件:PolynomialOfOneIndeterminateAdd.h
- //一元多项式求和头文件
- #include<iostream>
- using namespace std;
- template<class DataType>
- //定义单链表结点
- struct Node
- {
- //数据域:非零项的系数和指数
- DataType coef, exp;
- //指针域
- Node<DataType> *next;
- };
- //定义存放一元多项式的类
- template<class DataType>
- class Linklist
- {
- private:
- Node<DataType> *first;
- //一元多项式的项数
- int size;
- public:
- //构造函数
- Linklist();
- //初始化一元多项式
- void Init();
- //输出一元多项式
- void Print();
- //定义一元多项式的的加法操作
- Linklist<DataType> operator+(Linklist &p2);
- };
- //构造函数
- template<class DataType>
- Linklist<DataType>::Linklist()
- {
- first = new Node<DataType>;
- first = NULL;
- size = ;
- }
- //实现一元多项式单链表的初始化
- template<class DataType>
- void Linklist<DataType>::Init()
- {
- cout << "多项式的元素个数为:";
- cin >> size;
- DataType x, y;
- cout << "请输入第1项的系数:";
- cin >> x;
- cout << "请输入第1项的指数:";
- cin >> y;
- Node<DataType> *m;
- m = new Node<DataType>;
- m->coef = x;
- m->exp = y;
- m->next = NULL;
- first = m;
- for (int i = ; i <= size; i++)
- {
- cout << "请输入第" << i << "项的系数:";
- cin >> x;
- cout << "请输入第" << i << "项的指数:";
- cin >> y;
- Node<DataType> *n;
- n = new Node<DataType>;
- n->coef = x;
- n->exp = y;
- n->next = NULL;
- m->next = n;
- m = n;
- }
- }
- //实现一元多项式单链表实的输出
- template<class DataType>
- void Linklist<DataType>::Print()
- {
- Node<DataType> *m = first;
- while (m != NULL)
- {
- if (m == first)
- {
- if (m->coef != && m->exp != )
- {
- cout << m->coef << "x^" << m->exp;
- }
- else if (m->coef != && m->exp == )
- {
- cout << m->coef;
- }
- }
- else
- {
- if (m->coef > && m->exp != ){
- cout << "+" << m->coef << "x^" << m->exp;
- }
- else if (m->coef< && m->exp != )
- {
- cout << m->coef << "x^" << m->exp;
- }
- else if (m->coef> && m->exp == )
- {
- cout << "+" << m->coef;
- }
- else if (m->coef < && m->exp == )
- {
- cout << m->coef;
- }
- }
- m = m->next;
- }
- cout << endl;
- }
- //实现一元多项式单链表的相加
- template<class DataType>
- Linklist<DataType> Linklist<DataType>::operator+(Linklist &p2)
- {
- //声明工作指针
- Node<DataType> *pre, *p, *qre, *q;
- //初始化工作指针
- pre = this->first;
- p = pre->next;
- qre = p2.first;
- q = qre->next;
- while (p != NULL&&q != NULL)
- {
- //p->exp < q->exp:指针 p 后移
- if (p->exp < q->exp)
- {
- pre = p;
- p = p->next;
- }
- //p->exp > q->exp:将结点 q 插到结点 p 之前,指针 p 指向他原指结点的下一个结点
- if (p->exp > q->exp)
- {
- Node<DataType> *s;
- s = q->next;
- pre->next = q;
- q->next = p;
- q = s;
- }
- //p->exp == q->exp:
- if (p->exp == q->exp)
- {
- //p->coef = p->coef + q->coef
- p->coef = p->coef + q->coef;
- if (p->coef == )
- {
- //使指针 p 指向它原指结点的下一个结点
- pre->next = p->next;
- //删除结点 p
- delete p;
- p = p->next;
- }
- else
- {
- pre = p;
- p = pre->next;
- }
- //使指针 q 指向它原指结点的下一个结点
- qre->next = q->next;
- //删除结点 q
- delete q;
- q = qre->next;
- }
- }
- //如果 q 不为空,将结点 q 链接在第一个单链表的后面。
- if (q != NULL)
- {
- pre->next = q;
- delete p2.first;
- }
- return *this;
- }
二、测试一元多项式单链表实现的源程序:TestPolynomialOfOneIndeterminateAdd.cpp
- #include<iostream>
- //引入一元多项式之单链表实现的头文件
- #include "PolynomialOfOneIndeterminateAdd.h"
- using namespace std;
- int main()
- {
- //声明一元多项式单链表
- Linklist<int> p1, p2, p3;
- cout << "请按指数由小到大的顺序定义多项式A(x):" << endl;
- p1.Init();
- cout << "输入的多项式A(x)为:";
- p1.Print();
- cout << "\n请按指数由小到大的顺序定义多项式B(x):" << endl;
- p2.Init();
- cout << "输入的多项式B(x)为:";
- p2.Print();
- //一元多项式相加
- p3 = p1 + p2;
- cout << "\n多项式A(x)和多项式B(x)的和为:" << endl;
- p3.Print();
- return ;
- }
三、运行示例结果
单链表之一元多项式求和C++实现的更多相关文章
- leetcode 题解 Add Two Numbers(两个单链表求和)
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
- 数据结构 C++ 单链表 一元多项式的相加
#include <iostream> using namespace std; struct Node { double coe; //系数 int exp; //指数 Node *ne ...
- PTA基础编程题目集6-6求单链表结点的阶乘和(函数题)
本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义: int FactorialSum( List L ); 其中单链表List的定义 ...
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...
- 单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作. 链表结构定义 定义单链表 ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- [LeetCode] Linked List Cycle II 单链表中的环之二
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- c++单链表基本功能
head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...
- 单链表、循环链表的JS实现
数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑...... 当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...
随机推荐
- react 带参数事件方法不立即执行
handleClick:()=>{this.to_step('to_step3_2')}}
- MySQL GTID你知多少【转】
MySQL在5.6的版本推出了GTID复制,相比传统的复制,GTID复制对于运维更加友好,这个事务是谁产⽣,产⽣多少事务,⾮常直接的标识出来,当然GTID也有限制,对于什么是GTID可以参考我之前的文 ...
- java递归遍历获取目录下所有文件
import java.io.File; import java.util.ArrayList; import java.util.List; public class GetFiles { Arra ...
- 03.JavaScript简单介绍
一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) N ...
- excl筛选求和
Excel中的筛选,是一个很常用的功能.但不知道是有意还是疏忽,Excel没有直接提供在筛选后的一些统计功能,例如求和.平均值等.而由于筛选的主要功能之一就是可以方便快捷的进行变换,所普通的以直接在数 ...
- Python基础 - 正则表达式
Python自带正则表达式模块,即re模块. 导入正则模块: import re 用dir()函数查看re模块内的属性和方法: dir(re)
- java IO流知识点总结
I/O类库中使用“流”这个抽象概念.Java对设备中数据的操作是通过流的方式.表示任何有能力产出数据的数据源对象,或者是有能力接受数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节.IO流 ...
- IPC对象的持续性
转载:http://book.51cto.com/art/201006/207275.htm <UNIX网络编程:第2版.第2卷,进程间通信>本书全面深入地讲解了各种进程间通信形式,包括消 ...
- C++之构造函数的继承
#include<iostream> usingnamespace std; classBase1 { public: Base1()=default; Base1(const strin ...
- 利用sys.dm_db_index_physical_stats查看索引碎片等数据
我们都知道,提高sql server的数据查询速度,最有效的方法,就是为表创建索引,而索引在对数据进行新增,删除,修改的时候,会产生索引碎片,索引碎片多了,就需要重新组织或重新生成索引,以达到索引的最 ...