《软件开发技术基础》实验总报告班级:0830902学号:09212666学生:唐海东2010年11月13日《软件开发技术基础》实验报告实验名称:实验一线性表的操作班级0830902学号2009212666姓名唐海东第四周星期一、9—10节成绩实验目的:参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法实验内容:设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:1)建立一个线性表,首先依次输人整数数据元素(个数根据自己的需要键盘给定)2)删除指定位置的数据元素(指定元素位置通过键盘输入)再依次显示删除后的线性表中的数据元素。3)查找指定数据的数据元素(指定数据的大小通过键盘输入),若找到则显示位置,若没有找到就显示0。实验要求:(1)将程序输入计算机,编译运行。(2)程序的实际功能与上述所列功能不完全相符,调试程序,找出问题所在,并纠正。实验原理:⑴生成线性表:定义一维数组表示线性表的存储空间,动态申请存储空间建立长度为mm的空顺序表⑵向顺序表中插入数据元素:检测顺序表的状态,若表存储空间已满则提示上溢错误;若否,判断插入数据位置是否大于原来顺序表中最后一个数据位置,若真则默认在最后一个元素之后插入,若假判断插入位置是否小于原来顺序表中第一个位置,若真则默认在第一个位置插入,将指定位置处后面的所有元素从后之前分别后移一个位置,将要插入的数据元素插入到指定位置,表实际长度n加1⑶删除指定位置的数据元素:检测顺序表的状态,若表实际长度为0,则提示下溢错误,若指定位置小于1或大于表实际长度n,则提示没有该元素,若否,从指定位置起,其后元素顺次前移一个位置,表实际长度n减1⑷查找指定数据的数据元素:检测顺序表的状态,若表为空,则提示空表,若否,则顺序比较指定数据与表中数据大小,若相等,则返回表中数据位置,跳出循环;若直到表尾仍未找到与指定数据相匹配的表中元素,则提示表中无该元素显示0。实验步骤:首先建立顺序表,依次向顺序表中输入数据元素,让顺序表实现删除功能,输入指定元素,让顺序表实现查找功能。实验结果:见源程序后附:源程序和输入对应数据以及对应输出结果。源程序:#includeiostreamusingnamespacestd;templateclassTclasssq_List{private:intmm;intnn;T*v;public:sq_List(){mm=0;nn=0;return;}sq_List(int);voidprt_sq_List();intflag_sq_List();voidins_sq_List(int);voiddel_sq_List(int);intsch_sq_List(T);};templateclassTsq_ListT::sq_List(intm){mm=m;v=newT[mm];nn=0;return;}templateclassTvoidsq_ListT::prt_sq_List(){inti;coutnn=nnendl;for(i=0;inn;i++)coutv[i]endl;return;}templateclassTintsq_ListT::flag_sq_List(){if(nn==mm)return(-1);if(nn==0)return(0);return(1);}templateclassTvoidsq_ListT::ins_sq_List(inti){intk;Tx;for(k=0;ki;k++){cout输入要插入的数据元素:;cinx;v[k]=x;nn++;}return;}templateclassTvoidsq_ListT::del_sq_List(inti){intk;if(nn==0){coutunderflow!endl;return;}if((i1)||(inn)){coutNotthiselementinthelist!endl;return;}for(k=i;knn;k++)v[k-1]=v[k];nn=nn-1;return;}templateclassTintsq_ListT::sch_sq_List(Tx){if(nn==0)coutblanklistendl;for(intk=0;knn;k++){if(x==v[k])return(k);break;}return(-1);}intmain(intargc,char*argv[]){sq_Listints(10);inti,j,x;cout第1次输出表中对象:endl;s.prt_sq_List();cout输入要插入表中的数据元素个数:;cini;s.ins_sq_List(i);cout第2次输出表中对象:endl;s.prt_sq_List();cout输入要删除的数据个数:;cinj;for(intk=0;kj;k++){cout输入要删除的数据元素位置;cini;s.del_sq_List(i);}cout第3次输出表中对象:endl;s.prt_sq_List();cout输入要查找的数据元素:;cinx;i=s.sch_sq_List(x);if(i==-1)cout表中没有此元素!endl;elsecout此时此元素在表中的位置为:i+1endl;return0;}运行结果如下:心得体会:通过这次实验,我参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。检测顺序表的状态,若表为空,则提示空表,若否,则顺序比较指定数据与表中数据大小,若相等,则返回表中数据位置,跳出循环;若直到表尾仍未找到与指定数据相匹配的表中元素,则提示表中无该元素显示0。这个在以前都没想到,这次学到了很多。《软件开发技术基础》实验报告实验名称:实验二栈、队列的操作班级0830902学号2009212666姓名唐海东第六周星期一、9-11节成绩实验目的:参照给定的栈类和队列类的程序样例,验证给出的栈和队列的常见算法,并结合线性表类实现有关串的操作。实验内容:1.堆栈类测试和应用问题。要求:定义数据元素的数据类型为如下形式的结构体:typedefstruct{chartaskname[10];//任务名inttaskno;//任务号}DataType;设计一个包含5个数据元素的测试数据,并设计一个主函数实现依次把5个数据元素入栈,然后出栈输出栈中的数据元素并在屏幕上显示。2.队列类测试和应用问题。要求:设计一个主函数对循环队列类和链式队列类代码进行测试.测试方法为:依次把数据元素1,2,3,4,5入队,然后出队中的数据元素并在屏幕上显示。实验要求:1)栈和队列的长度都由自己定;2)写出完整的程序并能调试通过即可。3)重点理解栈、队列和串的算法思想,能够根据实际情况选择合适的存储结构。4)栈、队列的算法是后续实验的基础(树、图、查找、排序等)。实验原理:⑴建立一个空栈:定义构造函数对栈初始化,动态申请一个容量为m的存储空间,栈顶指针置0,即栈为空⑵入栈运算:首先判断栈顶指针是否已经指向存储空间的最后一个位置,若是,则提示“上溢错误”;若否,将栈顶指针加一,将新元素插入到栈顶指针指向的位置⑶退栈运算:首先判断栈顶指针是否为0,若是,则提示“下溢”错误;若否,将栈顶元素赋给一个指定变量并将栈顶指针推一⑷建立一个循环队列存储空间:用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素⑸循环队列入队:首先判断循环队列是否满,若循环队列非空(s=1)且队尾指针等于排头指针则提示“上溢”错误;否则将队尾指针加一(rear=rear+1),并当rear=m+1时置rear=1,将新元素插入到队尾指针指向的位置,并且置循环队列非空标志⑹循环队列退队:首先判断循环队列是否非空,当循环队列为空(s=0)时,则提示“下溢”错误;若否将排头指针进一(front=front+1),并当front=m+1时置front=1,再将排头指针指向的元素赋给指定的变量,最后判断退队后循环队列是否为空,当front=rear时置循环队列空标志(s=0)⑺建立一个链式队列存储空间:带链队列初始化:排头指针front和队尾指针rear均置为空⑻链式队列入队:首先申请一个新节点,置新节点数据域值,置新节点指针域值为空,判断原队列是否为空,若为空,则将排头指针指向新节点,若否则将原队尾节点的指针指向新节点,最后再次将队尾指针指向新节点⑼链式队列退队:首先判断原队列是否为空,若为空(front=NULL),则提示“下溢”错误;若否,将排头元素赋给指定变量,用临时节点p指向排头节点,并将排头指针指向下一结点,释放临时节点空间p,判断队列是否为空,若是将队尾指针也置为空,返回删除节点数据域值实验步骤:1.建立空栈,分别进行入栈和退栈运算2.建立循环队列,分别进行循环队列的入队和退队运算3.建立链式队列,分别进行链式队列的入队和退队运算实验结果:见源程序后附:源程序和输入对应数据以及对应输出结果。源程序:1.栈运算:#includeiostreamusingnamespacestd;typedefstruct{chartaskname[10];inttaskno;}DT;templateclassTclassflag{private:intmm;inttop;T*DT_var;public:voidinput_flag();flag(int);voidpri_flag();intsearch_flag();voidins_flag(T);Tdel_flag();Tread_flag();};templateclassTflagT::flag(intm){mm=m;DT_var=newT[mm];top=0;return;}templateclassTvoidflagT::pri_flag(){inti;couttop=topendl;DTdt4=DT_var[top-1];cout栈顶元素:dt4.taskname----dt4.tasknoendl;return;}templateclassTintflagT::search_flag(){if(top==mm)return(-1);if(top==0)return(0);return(1);}templateclassTvoidflagT::ins_flag(Tx){if(top==mm){cout上溢错误!endl;return;}top=top+1;DT_var[top-1]=x;return;}templateclassTTflagT::del_flag(){Ty;if(top==0){cout下溢错误!endl;}else{y=DT_var[top-1];top=top-1;returny;}}templateclassTTflagT::read_flag(){if(top==0){cout栈为空!endl;}elsereturn(DT_var[top-1]);}templateclassTvoidflagT::input_flag(){inti;for(i=0;i5;i++){coutinputtaskname;cinDT_var[i].taskname;coutinputtaskno;cinDT_var[i].taskno;top++;}}intmain(intargc,char*argv[]){flagDTs(5);s.input_flag();cout输出栈顶指