多项式ADT的链表实现
2014-04-04 20:23
141 查看
昨天用数组实现了多项式,今天用链表实现了一下。在写代码的过程中,发现以前一直忽略的弱点。在链表的插入过程中要注意开创新的空间,要不修改了以后链表会随着改变。同时申请的空间需要销毁,我这里偷懒没有写了。在看我是歌手,谁是歌王呢。注意函数InsertNode,等下再来详细复习一下
//Using List to achieve Polynomial #include<iostream> #include<stdio.h> using namespace std; struct Node; typedef Node *PtrNode; typedef PtrNode Polynomial; //struct used to store inform of polynomial struct Node{ double Coefficient; double Exponent; PtrNode Next; }; //method to initialize void ZeroPolynomial(Polynomial Poly) { Poly->Coefficient=0; Poly->Exponent=0; Poly->Next=NULL; } //method to find previous PtrNode FindPrevious(PtrNode PNode,Polynomial Poly) { PtrNode TempNode; TempNode=Poly; while(TempNode->Next!=PNode) { TempNode=TempNode->Next; } return TempNode; } //method used to insert the node to the right place void InsertNode(PtrNode InNode,Polynomial Poly) { PtrNode TempNode; PtrNode InsertNodes; InsertNodes=(PtrNode)malloc(sizeof(struct Node)); ZeroPolynomial(InsertNodes); InsertNodes->Coefficient=InNode->Coefficient; InsertNodes->Exponent=InNode->Exponent; TempNode=Poly->Next; if(TempNode==NULL) { Poly->Next=InsertNodes; } while(TempNode!=NULL) { if(InNode->Exponent==TempNode->Exponent) { TempNode->Coefficient+=InsertNodes->Coefficient; break; } if(InNode->Exponent>TempNode->Exponent) { TempNode=FindPrevious(TempNode,Poly); InsertNodes->Next=TempNode->Next; TempNode->Next=InsertNodes; break; } if(TempNode->Next==NULL) { TempNode->Next=InsertNodes; break; } TempNode=TempNode->Next; } } //method used to sum Polynomial SumPolynomial(const Polynomial Poly1,const Polynomial Poly2) { Polynomial SumPoly; SumPoly=(Polynomial)malloc(sizeof(struct Node)); ZeroPolynomial(SumPoly); PtrNode Node1,Node2; Node1=Poly1->Next; Node2=Poly2->Next; while(Node1!=NULL) { InsertNode(Node1,SumPoly); Node1=Node1->Next; } while(Node2!=NULL) { InsertNode(Node2,SumPoly); Node2=Node2->Next; } return SumPoly; } //method used to multi Polynomial MultiPolynomial(const Polynomial Poly1,const Polynomial Poly2) { Polynomial MultiPoly; MultiPoly=(Polynomial)malloc(sizeof(struct Node)); ZeroPolynomial(MultiPoly); PtrNode Node1,Node2,TempNode; Node1=Poly1->Next; Node2=Poly2->Next; TempNode=(PtrNode)malloc(sizeof(struct Node)); while(Node1!=NULL) { while(Node2!=NULL) { TempNode->Coefficient=Node1->Coefficient*Node2->Coefficient; TempNode->Exponent=Node1->Exponent+Node2->Exponent; InsertNode(TempNode,MultiPoly); Node2=Node2->Next; } Node2=Poly2->Next; Node1=Node1->Next; } free(TempNode); return MultiPoly; } //print the Polynomial void PrintPolynomial(Polynomial Poly) { PtrNode TempNode; TempNode=Poly->Next; while(TempNode!=NULL) { if((TempNode->Coefficient>0)&&TempNode!=Poly->Next) cout<<"+"; cout<<TempNode->Coefficient<<"X^"<<TempNode->Exponent; TempNode=TempNode->Next; } cout<<endl; } //The main method to test int main() { Polynomial Poly1,Poly2; Poly1=(Polynomial)malloc(sizeof(struct Node)); Poly2=(Polynomial)malloc(sizeof(struct Node)); ZeroPolynomial(Poly1); ZeroPolynomial(Poly2); PtrNode Nodes; Nodes=(PtrNode)malloc(sizeof(struct Node)); ZeroPolynomial(Nodes); char ch; int count=0; while((ch=getchar())!='\n') { if(ch!=' ') { if(count%2==0) Nodes->Coefficient=ch-48; else { Nodes->Exponent=ch-48; InsertNode(Nodes,Poly1); } } else { count++; } } count=0; while((ch=getchar())!='\n') { if(ch!=' ') { if(count%2==0) Nodes->Coefficient=ch-48; else { Nodes->Exponent=ch-48; InsertNode(Nodes,Poly2); } } else { count++; } } cout<<"The First Polynomial is:"; PrintPolynomial(Poly1); cout<<"The Second Polynomial is:"; PrintPolynomial(Poly2); Polynomial SumPoly; SumPoly=(Polynomial)malloc(sizeof(struct Node)); ZeroPolynomial(SumPoly); SumPoly=SumPolynomial(Poly1,Poly2); cout<<"The sum of them is:"; PrintPolynomial(SumPoly); Polynomial MultiPoly; MultiPoly=(Polynomial)malloc(sizeof(struct Node)); ZeroPolynomial(MultiPoly); MultiPoly=MultiPolynomial(Poly1,Poly2); cout<<"The Multi if them is:"; PrintPolynomial(MultiPoly); system("pause"); return 0; }
相关文章推荐
- python数据结构学习笔记-2016-10-28-03-用链表实现多项式ADT
- 链表实践—多项式ADT(数组实现)
- 数据结构学习笔记2(链表 上 单链表基础操作&实现多项式相乘)
- Java链表形式实现多项式相加
- 一元多项式求和(Java链表实现)
- 单向链表实现多项式加和乘--自己写数据结构
- 链表实现的多项式表达式(记住系数和指数)
- 【数据结构_链表_List_1040】一元多项式加法运算的实现
- 链表实现多项式相加 相乘
- 用链表实现的多项式
- 多项式的加法运算实现(利用链表结构)
- 链表实现多项式的加法和乘法
- 用无序链表实现字典ADT(C++描述)
- 链表实现多项式加法和乘法
- 用链表实现一元多项式的加、减、乘、求导运算
- 数据结构和算法C语言实现:使用链表实现稀疏多项式
- 数据结构C语言描述——用单链表实现多项式的相加
- 通过链表实现的多项式乘法【C++】
- 数据结构 —— 链表实现多项式加减乘
- 数据结构_链表_稀疏多项式求值_C++实现