实验项目1——三元组ADT1.1实验目的本次实验的主要目的是在于帮助读者熟悉抽象数据类型的表示和实现方法。抽象数据类型需要借助固有数据类型来表示和实现,即利用高级程序设计语言中已经存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节依赖于所用语言的功能。通过本次实验还可帮助学生复习高级语言的使用方法。1.2实验内容[问题描述]设计实现抽象数据类型“三元组”。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子,显示三元组,销毁三元组等。[基本要求]实现创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操作。[算法描述]templateclassElemclassTriple{Private:Eleme1;Eleme2Eleme3;public:Triple(Elemv1,Elemv2,Elemv3){e1=v1;e2=v2;e3=v3;}ElemGet(i){初始条件:三元组已经存在,1≤i≤3;操作结果:返回三元组的第i个分量}Boolput(i,e){初始条件:三元组已经存在,1≤i≤3;操作结果:将三元组的第i个分量赋值为e,成功返回true,否则返回false;}ElemGetMax(){初始条件:三元组已经存在,操作结果:返回三元组中最大分量值e;}ElemGetMin(){初始条件:三元组已经存在,操作结果:返回三元组中最小分量值e;}voidOutput(){初始条件:三元组已经存在,操作结果:输出三元组中所有分量值;}[测试数据]由学生任意指定。[选作内容]实现两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子,销毁三元组等操作。实验项目2——复数四则运算2.1实验目的本次实验与实验项目1为同一类型实验,主要目的是在于帮助读者进一步熟悉抽象数据类型的表示和实现方法。抽象数据类型需要借助固有数据类型来表示和实现,即利用高级程序设计语言中已经存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节依赖于所用语言的功能。2.2实验内容[问题描述]设计实现一个可进行复数运算的演示程序。[基本要求]实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部;运算结果以相应的复数或实数的表示形式显示。[算法描述]该算法中Elem为float或double类型templateclassElemclassComplex{Private:Elemreality;Elemfalsehoodpublic:Triple(Elemr,Elemf){reality=r;falsehood=f;}Complexoperate+(constcomplex&){初始条件:已经存在两个复数;操作结果:将两个复数的实部和虚部分别进行向加得到一个新的复数}Complexoperate-(constcomplex&){初始条件:已经存在两个复数;操作结果:将两个复数的实部和虚部分别进行向减得到一个新的复数}Complexoperate*(constcomplex&){初始条件:已经存在两个复数;操作结果:按照复数乘法规则将两个复数的实部相乘结果减去两个复数虚部相乘结果为新生成复数的实部;将两个复数的虚部和实部交叉相乘再相加的结果作为新生成复数的虚部。}Elemreality(){初始条件:复数已经存在;操作结果:返回复数的实部;}Elemfalsehood(){初始条件:复数已经存在;操作结果:返回复数的虚部;}voidOutput(){初始条件:复数已经存在,操作结果:以复数形式输出复数到屏幕上;}[测试数据]由学生依据软件工程的测试技术自己确定。注意测试边界数据,如复数0。[实现提示]定义复数为两个相互之间存在次序关系的实数构成抽象数据类型,利用实数的操作来实现复数的操作。[选作内容]实现复数的其他运算,如:两个复数相除、求共轭。实验项目3——基本线性表运算3.1实验目的(1)掌握基本线性表顺序存储的类型定义及C++语言实现。(2)掌握基本线性表链式存储的类型定义及C++语言实现。(3)掌握基本线性表顺序存储结构中的各种基本操作。(4)掌握基本线性表链式存储结构中的各种基本操作。3.2实验内容[问题描述]基本线性表经常进行的运算操作有创建基本线性表、求基本线性表的长度、在基本线性表中查找某个数据元素、在某个位置插入一个新数据元素、在某个线性表中删除某个数据元素以及基本线性表的输出等操作。试编程实现基本线性表的这些基本运算。[基本要求]实现基本线性表的基本运算可以采用链式存储方式实现,也可以采用顺序存储的方式实现,在此给出这两种存储方式的实现方法,学生可任选其一进行具体实现。[算法描述]1顺序存储方式templetclassElemclassAList:publicListElem{private:intmaxSize;intlistSize;intfence;Elem*listArray;public://线性表创建操作实现AList(intsize=DefaultListSize){maxSize=size;listSize=fence=0;listArray=newElem[maxSize]}~AList(){delete[]listArray;}voidclear(){delete[]listArray;listSize=fence=0;listArray=newElem[maxSize];}boolinsert(constElem&);boolappend(constElem&);boolremove(Elem&);voidsetStart(){fence=0;}voidsetEnd(){fence=listSize;}voidprev(){if(fence!=0)fence--;}voidnext(){if(fence=listSize)fence++}intLength()const{returnlistSize;}intleftLength()const{returnfence;}intrightLength()const{returnlistSize-fence;}boolsetPos(intPos){if((pos=0)&&(pos=listSize))fence=pos;return(pos=0)&&(pos=listSize)}//线性表中插入操作实现templetclassElemboolAList::insert(constElem&item){if(listSize==maxSize)returnfalse;for(inti=listSize;ifence;i--)listArray[i]=listArray[i-1];listArray[fence]=item;listSize++;returntrue;}//在线性表末尾追加数据操作实现templetclassElemboolAList::append(constElem&item){if(listSize==maxSize)returnfalse;listArray[listSize++]=item;returntrue;}//线性表中删除操作实现templetclassElemboolAList::remove(Elem&it){if(rightlLenth()==0)returnfalse;it=listArray[fence;];for(inti=fence;ilistSize-1;i++)listArray[i]=listArray[i+1];listSize--;returntrue;}//线性表中查找操作实现templetclassElemboolAList::boolfind(Elemk){Elemit;for(L.setStart();L.getValue(it);L.next())if(K==it)returntrue;//founditreturnfalse;//Knotfound}2链式存储方式templateclassElemclassLList:publicListElem{private:LinkElem*head;LinkElem*tail;LinkElem*fence;intleftcnt,rightcnt;//基本线性表的创建操作实现voidinit(){fence=head=tail=newLinkElem;leftcnt=rightcnt=0;}//initvoidremoveall(){while(head!=null){fence=head;head=head.next;deletefence;}}//removeallpublic:LList(intsize=DefaultListSize){init();}~LList(){removeall();}voidclear(){removeall();init();}boolinsert(constElem&);boolappend(constElem&);boolremove(Elem&);voidsetStart(){fence=head;rightcnt+=leftcnt;leftcnt=0;}//setStart;voidsetEnd(){fence=tail;leftcnt+=rightcnt;rightcnt=0;}//setEndvoidprev();voidnext(){if(fence!=tail){fence=fence-next;rightcnt--;leftcnt++}}//next;intleftLength()const{returnleftcnt;}intrightLength()const{returnrightcnt;}boolsetPos(intPos);boolgetValue(Elem&it)const{if(rightLength()==0)returnfalse;it=fence-next-element;returntrue;}//getValuevoidprint()const;};//基本线性表插入操作的实现templateclassElemboolLListElem::insert(constElem&item){fence-next=newLinkElem(item,fence-next);if(tail==fence)tail=fence-next;rightcnt++;returntrue;}//基本线性表末尾追加数据操作的实现templateclassElemboolLListElem::append(constElem&item){tail=tail-next=newLinkElem(item,null);rightcnt++;returntrue;}//基本线性表删除操作的实现templateclassElemboolLListElem::remove(Elem&it){if(fence-next==NULL)returnfalse;it=fence-next-element;LinkElem*Itemp=fence-next;fence-next=Itemp-next;if(tail==Itemp)tail=fence;deleteItemprightcnt--;returntrue;}templateclassElemvoidLListElem::prev(){L