利用顺序表实现多项式相加
来源:互联网 发布:js怎么让按钮不可点击 编辑:程序博客网 时间:2024/05/21 08:50
//利用顺序表实现多项式相加#include <iostream>#include <algorithm>#include <conio.h>#include<stdlib.h>#include<time.h>using namespace std;const int N=10;struct Data{ int xishu; int zhishu;};template <class T>class SeqList {private: T* list; int MaxSize; int size;public: SeqList(int max); //构造函数,初始化得到一个容量为max的空表 ~SeqList(); //析构函数,释放线性表占用的存储空间 int Size(); //求线性表的长度 int Maxsize(); //求线性表的最大元素个数 int Find(const T& x); //在线性表中查找与元素x同指数的元素位置 T GetData(int i); //取线性表的第i个元素 void Insert(int i,const T & x ); //把x插入线性表中第i位 /*线性表加入一项x; 若有序表中不存在与x同指数的元素,则按x的指数大小插入; 否则,在表中已存在与x同指数的元素,则该元素的系数加上x的系数,若系数和为0,则要删除该元素; */ void Add(const T& x); void Delete(int i); // 删除第i个元素 void Print(); void operator =(const SeqList<T>& other); //多项式线性表复制 SeqList<T> operator +(const SeqList<T>& other); //多项式线性表相加};template <class T>int SeqList<T>::Find(const T& x){for(int i=0;i<size;++i)if(list[i].zhishu==x.zhishu)return i;return -1;//这里原来写0,但是总是会出现重复的指数,最后发现当i==0时相等也是返回0}template <class T>SeqList<T>::SeqList(int max) { list = new T[max]; MaxSize = max; size = 0;}template <class T>SeqList<T>::~SeqList() { delete []list;}template <class T>int SeqList<T>::Size() { return size;}template <class T>int SeqList<T>::Maxsize() { return MaxSize;}template <class T>T SeqList<T>::GetData(int i) { return list[i];}template <class T>void SeqList<T>::Delete(int i) { if((i<0)||(i>size-1)) { cout<<"元素不存在!!"<<endl; exit(0); } for(int j=i;j<=size-2;j++) list[j] = list[j+1]; size--; }template <class T>void SeqList<T>::Insert(int i,const T& x) { if(size == MaxSize) { cout<<"顺序表已满,插入错误!"<<endl; exit(0); } if((i<0)||(i>size)) { cout<<"插入位置错误!"<<endl; exit(0); } //list[i]~list[size-1]整体往后移动 for(int j=size-1;j>=i;j--) list[ j+1] = list[ j]; list[i] = x; size++; }template <class T>void SeqList<T>::Print() { for(int i=0;i<=size-1;i++) { if(list[i].xishu>0) cout<<"+"; cout<<list[i].xishu<<"x^"<<list[i].zhishu<<" "; } cout<<endl;}template <class T> void SeqList<T>::Add(const T& x){/*线性表加入一项x; 若有序表中不存在与x同指数的元素,则按x的指数大小插入; 否则,在表中已存在与x同指数的元素,则该元素的系数加上x的系数,若系数和为0,则要删除该元素; */ //请在此处完成函数/*int t;if(!size)list[size++]=x;else{*//* t=Find(x); if(!t){*/list[size++]=x;for(int i=size-1;i>0;--i)if(list[i].zhishu<list[i-1].zhishu)swap(list[i],list[i-1]); /* }*//*}*/}template <class T> void SeqList<T>::operator =(const SeqList<T>& other){ //请在此处完成函数MaxSize = other.MaxSize;size = other.size;for(int i=0;i<size;++i)list[i] = other.list[i];}template <class T> SeqList<T> SeqList<T>::operator +(const SeqList<T>& other){ /*SeqList<T>* temp=new SeqList<T>(N);*/ //请在此处完成函数 MaxSize+=other.MaxSize;int t;for(int i=0;i<other.size;++i){t=Find(other.list[i]); if(t==-1){ list[size++]=other.list[i];for(int j=size-1;j>0;--j)//就是变量还是用了i,所以一直出错if(list[j].zhishu<list[j-1].zhishu)swap(list[j],list[j-1]);else break; } else{ if(list[t].xishu+other.list[i].xishu==0) Delete(t); else list[t].xishu += other.list[i].xishu; }}return *this;}void main(){ Data temp;SeqList<Data> L1(N),L2(N),L3(N);srand((unsigned)time(NULL));while(L1.Size()<N/2)//利用随机函数产生构造多项式L1{ temp.zhishu=int(rand())%10+1; temp.xishu=int(rand())%100-50+1;if(L1.Find(temp)!=-1) continue;L1.Add(temp);}L1.Print();while(L2.Size()<N/2)//利用随机函数产生构造多项式L2{ temp.zhishu=int(rand())%10; temp.xishu=int(rand())%100-50; if(L2.Find(temp)!=-1)continue;L2.Add(temp);}L2.Print(); L3=L1+L2; //利用对“+”运算符重载实现两多项式相加 L3.Print();getch();}
0 0
- 利用顺序表实现多项式相加
- 两个一元多项式相加(链表 || 顺序表实现)
- 利用栈实现两个一元多项式相加
- 链表实现多项式相加
- 链表实现多项式相加
- 链表实现多项式相加
- 利用链表计算多项式的相加
- 利用链表计算多项式的相加
- 利用单链表实现一元多项式的表示及相加
- 链表实现的多项式相加相乘
- 链表实现多项式相加 相乘
- Java链表形式实现多项式相加
- JAVA实现多项式相加
- 多项式相加 单链表实现
- 单链表实现多项式相加
- 多项式相加单链表实现
- 单链表实现多项式相加
- 多项式相加链表
- FZU 2156 Climb Stairs
- 黑马程序员 String和StringBuffer的区别
- apk openssl版本过低的问题
- 利用顺序表实现集合的并运算
- 黑马程序员 abstract class和interface的区别
- 利用顺序表实现多项式相加
- hdu 5113 Black And White
- 2015年9月9日
- Android 一个把时间转换成类似“几天前”一类模糊时间的类
- 45个实用的JavaScript技巧、窍门和最佳实践
- 移动 app 测试工具 bugtags
- Unity中使用ulua的个人经验总结
- blkio.weight使用感想
- Linux内核如何加载编译进内核的模块