- 浏览: 778114 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
polynomial.h
polynomial.cpp
#ifndef POLYNOMAL_H #define POLYNOMAL_H #include<iostream> using namespace std; class Term{//多项式结点 public: float coef; //系数 int exp;//指数 Term *link; Term(float c,int e,Term *next=NULL):coef(c),exp(e),link(next){} Term* InsertAfter(float c,int e); friend ostream& operator<<(ostream&,const Term&); }; class Polynomial{ public: Polynomial(){ first = new Term(0,-1); } Polynomial(Polynomial& R); int maxOrder();//最大阶数 Term *getHead()const{ return first; } Term* InsertAfter(Term*); private: Term *first; friend ostream& operator<<(ostream&,const Polynomial&); friend istream& operator>>(istream&,Polynomial&); friend Polynomial operator+(Polynomial&,Polynomial&); friend Polynomial operator*(Polynomial&,Polynomial&); }; #endif // POLYNOMAL_H
polynomial.cpp
#include"Polynomial.h" using namespace std; /* 在当前结点再插入一个结点:c的e次方 */ Term* Term::InsertAfter(float c, int e) { link = new Term(c,e,link); return link; } ostream& operator<<(ostream& out,const Term& x) { if(x.coef == 0.0){ return out; } out << x.coef; switch(x.exp){ case 0: break; case 1: out << "X"; break; default: out << "X^" << x.exp; break; } return out; } Polynomial::Polynomial(Polynomial &R) { Term* src = R.getHead()->link; Term* dest = new Term(0,-1); while(NULL!=src){ dest->InsertAfter(src->coef,src->exp); dest = dest->link; src = src->link; } } /* 最大阶数 */ int Polynomial::maxOrder() { Term* current = getHead()->link; int maxOrder,times=0; while(NULL!=current){ if(times==0){ maxOrder = current->exp; times++; }else{ maxOrder = max(maxOrder,current->exp); } current = current->link; } return maxOrder; } Term* Polynomial::InsertAfter(Term *term) { Term* current = first; while(NULL!=current->link){ current = current->link; } current->InsertAfter(term->coef,term->exp); return current; } istream& operator>>(istream& in,Polynomial& x) { Term* current = x.getHead(); float c; int e; while(1){ cout << "Input a term(coef,exp):" << endl; in >> c >> e; if(e<0) break; current = current->InsertAfter(c,e); } return in; } ostream& operator<<(ostream& out,Polynomial& x) { Term* current = x.getHead()->link; bool first = true; while(NULL!=current){ if(current->coef>0.0&&(not first)){ out << "+"; } out << *current; first = false; current = current->link; } out << endl; return out; } Polynomial operator+(Polynomial& p1,Polynomial& p2) { Polynomial p3; Term *current1,*current2,*current3; current3 = p3.getHead(); current1 = p1.getHead()->link; current2 = p2.getHead()->link; float coef; while(NULL!=current1&&NULL!=current2){ if(current1->exp==current2->exp){ coef = current1->coef+current2->coef; p3.InsertAfter(new Term(coef,current1->exp)); current1 = current1->link; current2 = current2->link; }else if(current1->exp<current2->exp){ p3.InsertAfter(new Term(current1->coef,current1->exp)); current1 = current1->link; }else{ p3.InsertAfter(new Term(current2->coef,current2->exp)); current2 = current2->link; } } //处理长的那个多项式 while(NULL!=current1){ p3.InsertAfter(new Term(current1->coef,current1->exp)); current1 = current1->link; } while(NULL!=current2){ p3.InsertAfter(new Term(current2->coef,current2->exp)); current2 = current2->link; } return p3; } /* 先把所有的乘出来,再合并 */ Polynomial operator*(Polynomial& p1,Polynomial& p2) { Polynomial p3,p4; Term *current1,*current2,*current3,*current4; current1 = p1.getHead()->link; current2 = p2.getHead()->link; current3 = p3.getHead(); current4 = p4.getHead(); int minExp,currExp; bool flag = true; while(NULL!=current1){ current2 = p2.getHead()->link; while(NULL!=current2){ currExp = current1->exp+current2->exp; if(flag){ minExp = currExp; flag = false; }else{ minExp = minExp<currExp?minExp:currExp; } p3.InsertAfter(new Term(current1->coef*current2->coef, current1->exp+current2->exp)); current2 = current2->link; } current1 = current1->link; } Term t(0,-1); int maxExp = p2.maxOrder()+p1.maxOrder(); for(int i=minExp;i<=maxExp;++i){ current3 = p3.getHead()->link; t.exp = i; while(NULL!=current3){ if(current3->exp==i){ t.coef += current3->coef; } current3 = current3->link; } if(t.coef!=0){ p4.InsertAfter(new Term(t.coef,t.exp)); t.coef=0; } } return p4; } int main() { Polynomial p1,p2,p3,p4; p1.getHead()->InsertAfter(3,-1)->InsertAfter(-2,1)->InsertAfter(3,3); p2.getHead()->InsertAfter(2,0)->InsertAfter(2,2)->InsertAfter(4,3)->InsertAfter(3,5); cout << "p1:" << p1; cout << "p2:" << p2; p3 = p1+p2; p4 = p1*p2; cout << "p1+p2:" << p3; cout << "p1*p2:" << p4; } p1:3X^-1-2X+3X^3 p2:2+2X^2+4X^3+3X^5 p1+p2:3X^-1+2-2X+2X^2+7X^3+3X^5 p1*p2:6X^-1+2X+12X^2+2X^3+1X^4+6X^5+6X^6+9X^8
发表评论
-
时间复杂度推导
2012-06-05 22:57 9961.用常数1取代运行时间中的所有加法常数 2.在修改后的运行次 ... -
数据结构概论2
2012-06-04 22:19 816数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为 ... -
排序概念
2011-06-24 14:51 798数据表:待排序数据元素的有很集合 排序码:通常数据元素有多个 ... -
图的基本概念
2011-06-20 16:18 758完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全 ... -
红黑树
2011-06-16 14:29 526红黑树: 1.根结点和所有的叶结点都是黑色 2.从根结点到叶结 ... -
链表反转
2011-06-12 18:03 1111template<typename T> v ... -
散列表(哈希表)
2011-06-09 09:55 1092散列表(hash table):是表示集合和字典的另一种有效方 ... -
跳 表
2011-06-08 11:12 815#ifndef SKIPLIST_H #define S ... -
字 典
2011-06-08 10:06 935字典:以集合为基础,并支持支持Member,Insert和Re ... -
LinkedSet
2011-06-07 13:08 935改了很久的bug #ifndef LINKEDSET_H ... -
bitset
2011-06-06 12:27 894bitSet.h #ifndef BITSET_H #d ... -
Huffman树
2011-06-02 11:06 927Huffman树,又称最优二叉树,是一类加权路径长度最短的二叉 ... -
堆
2011-06-02 09:19 958在优先级队列的各种实现中,堆是最高效的一种数据结构 关键码: ... -
森 林
2011-06-01 11:09 615森林与二叉树互转,主要是子结点转左子树,兄弟结点转右子树 深 ... -
二叉树的链式实现
2011-05-31 11:24 1274binaryTree.h #ifndef LINKEDBI ... -
二叉树基本概念
2011-05-30 10:05 855一棵二叉树的结点的一个有限集合:该集合或者为空,或者是由一个根 ... -
树基本概念
2011-05-30 09:28 904结点(node):包含数据项及指向其他结点的分支。 结点的度( ... -
广义表
2011-05-27 10:57 945广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表 ... -
矩阵相关
2011-05-26 10:22 942矩阵:是一个具有m行n列的二维数组。 上三角矩阵:只存储对角 ... -
优先级队列
2011-05-21 11:24 609PQueue.h #ifndef PQUEUE_H #d ...
相关推荐
在本实验“数据结构简单的多项式运算”中,我们将关注如何利用数据结构来表示和操作多项式,特别是涉及加法、减法和乘法等基本运算。多项式是一种数学表达式,由常数、变量和它们之间的加法、乘法组合而成,例如 \(2...
利用数据结构中的运算符优先算法实现整数的加、减、乘、除、括号的多项式运算,运算表达式以#结尾。测试表达式如下运算: "1+(1+2)*(5+25/5)#" 利用数据结构中的运算符优先算法实现整数的加、减、乘、除、括号的...
《C++数据结构课程设计:一元多项式运算》 一元多项式运算是数据结构课程中的一个重要实践项目,它涉及到链表数据结构的操作以及基本的数学运算。在这个设计中,开发者利用C++语言实现了一个简易的一元多项式运算...
数据结构一元多项式运算的实现,输入两个一元多项式,如:A(x)=15+6x+9x7+3x18, B(x)=4x+5x6+16x7,求 A+B,A-B ,A*B。
《一元多项式运算C语言》 一元多项式运算在计算机科学中是一个常见的数学问题,尤其是在编程领域,它涉及到数据结构和算法的设计。本文主要探讨如何使用C语言实现一元多项式的运算,特别是求和操作,以及相关的设计...
本主题聚焦于"数据结构--多项式运算",这是一门南开大学计算机科学与技术课程的作业,由辛运帏老师指导。在此作业中,学生被要求实现多项式的操作,如加法、减法、乘法等,这些操作在数学和算法中具有广泛的应用。 ...
《用 C 语言实现一元多项式运算源程序》这篇文档是关于如何使用 C 语言编写一个程序,来处理一元多项式的加法、减法和乘法运算。该程序设计考虑了人机交互界面,使得用户能够方便地输入多项式,并进行相应的计算。 ...
### 一元多项式运算(C++链表) 在计算机科学与编程领域中,多项式的表示和处理是一项基本且重要的任务。本篇文章将基于提供的代码片段来深入探讨如何使用链表来实现一元多项式的创建、复制、显示、求值、加法、...
"cj多项式运算器"是一款专门用于处理多项式运算的应用软件,它提供了便捷的界面和高效的功能,使得用户能够轻松解决各种数学问题,包括单个多项式的操作以及方程组的求解。这款软件的核心是其强大的算法实现,能够...
本主题聚焦于“多项式运算”这一特定的数据结构应用,这是计算机科学,尤其是算法和计算理论中的一个重要部分。多项式运算在解决数学问题、科学计算以及工程应用中都扮演着关键角色。 首先,我们来理解什么是多项式...
在IT领域,多项式运算是一项基础且重要的数学概念,它被广泛应用于计算机科学的多个分支,如数值计算、符号计算、计算机图形学等。这里我们将深入探讨如何在编程环境中实现这些运算,主要针对C语言环境。 首先,...
在IT行业中,软件开发是一项核心任务,而"多项式运算器/方程组求解器"是这样的一个工具,它专为解决数学问题而设计,尤其是处理多项式运算和线性方程组的求解。这类软件对于学习、研究或工程计算来说非常有价值,...
多项式运算器是一种能够执行多项式运算的电子设备,多项式在数学中是一类具有固定格式的代数表达式,由变量(通常是x)的非负整数次幂和系数构成。 数字电路实现运算主要有加法、减法、乘法和除法等基本运算。在...
本项目“用链表实现多项式运算”聚焦于利用链表来表示和操作多项式,涵盖了多项式的基本运算:加法、减法、乘法以及求导。下面将详细讨论这些知识点。 首先,链表是一种非连续存储结构,由一系列节点组成,每个节点...
一元多项式运算在计算机科学和数学中是一个基础但重要的概念。它涉及到对单变量的多项式进行操作,如加法、乘法等。在本实验中,我们使用线性表来表示一元多项式,这是一个高效且灵活的数据结构。 线性表是一种常见...
本项目聚焦于“基于C#的多项式运算”,它实现了多项式的基本数学操作,如加法、减法、乘法和除法。在本文中,我们将深入探讨这些运算在C#中的实现方式,以及如何构建用户界面来呈现这些运算结果。 首先,多项式是由...