数据结构--线性表的基本运算及多项式的算术运算(共33页).doc
《数据结构--线性表的基本运算及多项式的算术运算(共33页).doc》由会员分享,可在线阅读,更多相关《数据结构--线性表的基本运算及多项式的算术运算(共33页).doc(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构:线性表的基本运算及多项式的算术运算一、 实验目的和要求实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。要求:能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。二、实验环境(实验设备)X64架构计算机一台,Windows 7操作系统,IDE: Dev C+ 5.11编译器: gcc 4.9.2 64bit二、 实验原理及内容程序一:实现顺序表和单链表的实现本程序包含了四个文件,分别是LinearListMain.cpp,linearlist.h,seqlist.h,singlelist.h。分别是主程序,线性表抽象类,顺序储存
2、线性表的实现,链表储存顺序表的实现。文件之间的关系图:本程序一共包含了三个类:分别是LinearList(线性表抽象类),SeqList(顺序储存的线性表),SingleList(链表储存的线性表)。 类与类之间的关系图如下:其实,抽象类LinearList规定了公共接口。分别派生了SeqList类和SingleList。SingleList类与SingleList类分别实现了LinearList类中的所有接口。程序代码以及分析:Linearlist类:#include using namespace std;template class LinearList protected: int n
3、; /线性表的长度 public: virtual bool IsEmpty() const=0; /判读是否是空线性表 virtual int Length() const=0; /返回长度 virtual bool Find(int i,T& x) const=0; /将下标为i的元素储存在x中,成功返回true,否则返回false virtual int Search(T x) const=0; /寻找值是x的元素,找到返回true,否则返回false virtual bool Insert(int i,T x)=0; /在下标为i的元素后面插入x virtual bool Delete
4、(int i)=0; /删除下标为i的元素 virtual bool Update(int i,T x)=0;/将下标为i的元素更新为x virtual void Output(ostream& out)const=0; /将线性表送至输出流;包含了一个保护数据成员n,和8种运算,具体说明见注释。专心-专注-专业实 验 报 告Seqlist类:template class SeqList:public LinearListprotected: int maxLength; /顺序表的最大长度 T *elements; /动态一维数组的指针 int n;public:SeqList(int mS
5、ize); /构造函数 SeqList() delete elements; /析构函数 bool IsEmpty() const; int Length() const; bool Find(int i,T& x) const; int Search(T x) const; bool Insert(int i,T x); bool Delete(int i); bool Update(int i,T x); void Output(ostream& out)const ; ;实 验 报 告核心算法:Search函数:算法分析:Search函数功能是查找值是x的元素,返回下标,不存在返回-1;
6、本程序采用从第一个元素依次遍历的方法,时间复杂度为O(n)。代码:template int SeqList:Search(T x) constint i;for(i=0;in;i+)if(elementsi=x)break;if(i=n) /没有找到return -1;Else /找到return i;Insert()函数:算法分析:对每一个i要先判断是否越界,然后判断是否有剩余空间可以插入;符合条件之后依次后移元素,腾出空间将x插在i+1的位置。时间复杂度是O(n)。代码:template bool SeqList:Insert(int i,T x)if(i=n) /判断越界coutout
7、of boundsendl;return false;if(n=maxLength) /判断剩余空间是否充足coutoverflowi+1;j-) /移位操作elementsj=elementsj-1;elementsi+1=x; /插入n+; /元素总数+1return true;Delete()函数:算法分析:首先判断链表是否是空链表,再判断下标是否越界。符合条件后,从i+1的位置依次向前移动一个位置,再将总数n减1.算法时间复杂度是O (n)代码:template bool SeqList:Delete(int i)if(n=0)coutUnderflowendl;return fals
8、e;if(i=n)coutout of boundsendl;return false;for(int j=i;jn-1;j+)elementsj=elementsj+1;n-;return true;SingleList 类:template class SingleList; /提前声明singlelist类,结点类中用到template class node /结点类protected:T element;node* link;friend class SingleList;template class SingleList:public LinearListprivate:node*
9、first; /头指针int n;public: SingleList() first=NULL; n=0; /构造函数 SingleList(); bool IsEmpty() const; int Length() const; bool Find(int i,T& x) const; int Search(T x) const; bool Insert(int i,T x); bool Delete(int i); bool Update(int i,T x); void Output(ostream& out)const; ;核心算法:Find函数:算法分析:首先判断下标是不是越界,然
10、后定义临时变量j用来计数,标记当前遍历位置的下标,到达下标i是停止,并赋值给x。时间复杂度是O(n)代码:template bool SingleList:Find(int i,T& x) constif(i=n)coutout of boundsendl;return false;node* p=first;int j=0;while(jlink;j+;x= p-element;return true;Search函数:算法分析:首先定义指针p和标记位置下标的j。然后从first依次遍历,每次遍历j加1,以此来标记当前位置的下标,一旦遍历到了x,则返回下标。如果到尾节点还没有遍历到,则不存在
11、x,返回-1;时间复杂度是O(n)代码:template int SingleList:Search(T x) constnode* p;p=first;int j=0;while(p)if(p-element=x)return j;j+;p=p-link;return -1;Insert函数:算法分析:首先判断下标是否越界,然后分两种情况进行插入,第一种情况是插入到第一个元素,需要修改first指针,第二种情况是插入到下标不是0的情况,需要先遍历到插入下标的前一个位置,然后将这个位置的link指针赋值给新申请的空间,然后修改这个结点link指针,使它指向新申请的空间。再对新申请的空间的ele
12、ment赋值。因为要遍历到下标所在位置,所以时间复杂度是O(n)。代码:template bool SingleList:Insert(int i,T x)if(i=n)coutout of boundsendl;return false;if(i=-1)node* p=new node;p-link=first;first=p;first-element=x;n+;return true;int j=0;node* q=first;while(jlink;j+;node* p=new node;p-link=q-link;p-element=x;q-link=p;n+;return true
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 基本 运算 多项式 算术 33
限制150内