1 / 13
文档名称:

数据结构实验报告 栈和队列 共享栈与链栈模板类实现及测试函数.docx

格式:docx   大小:134KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验报告 栈和队列 共享栈与链栈模板类实现及测试函数.docx

上传人:184846882 2019/3/24 文件大小:134 KB

下载得到文件列表

数据结构实验报告 栈和队列 共享栈与链栈模板类实现及测试函数.docx

文档介绍

文档介绍:数据结构实验报告实验名称:实验二——栈和队列学生姓名:班级:班内序号:学号:日期:,按要求实现一个栈或一个队列。要求:实现一个共享栈实现一个链栈实现一个循环队列实现一个链队列编写测试main()函数测试线性表的正确性。:链栈:: if(top1==top2-1)//判断栈是否已满 { throw"上溢"; } if(i==1) //如果要入栈1 { data[++top1]=x;//top指针加一,然后赋值 } if(i==2)//如果要入栈2 { data[--top2]=x;//top指针减1,赋值 }出栈: if(i==1) { if(top1==-1)//判断栈1是否为空{ throw"下溢"; } returndata[top1--];//返回出栈元素的值并且栈顶指针下移 } if(i==2) { if(top2==StackSize) { throw"下溢"; } returndata[top2++];//返回出栈元素的值并且栈顶指针上移 }查找栈顶元素: if(i==1) { if(top1!=-1)//如果栈1非空{ returndata[top1]; } } if(i==2) { if(top2!=StackSize)//如果栈2非空{ returndata[top2]; } }判断栈是否为空: if(i==1) { if(top1==-1) { returntrue; } else { returnfalse; } } if(i==2) { if(top2==StackSize) { returntrue; } else { returnfalse; } } returnfalse;输出栈中元素: inttemp1=top1;//工作指针 while(temp1!=-1)//判断栈一是否为空 { cout<<data[temp1--]<<"";//输出元素,工作指针减一 } inttemp2=top2;//工作指针 while(temp2!=StackSize)//判断栈二是否为空 { cout<<data[temp2++]<<"";//输出元素,工作指针加一 }: while(top)//判断是否为空 { structNode<T>*p=top;//新建工作指针,并用top指针初始化 top=top->next;//top指针后移 deletep; }入栈: structNode<T>*p=newNode<T>;//新建工作指针指向新结点 p->data=x;//新结点的数据域赋值为x p->next=top;//新节点的next域记录top指针指向地址 top=p;//栈顶指针该为p出栈: if(Empty())throw"下溢"; Tx=top->data;//保存数据 structNode<T>*p=top;//保存栈顶指针地址 top=top->next;//栈顶指针后移 deletep;//删除 returnx;//返回数值查找栈顶元素: if(Empty()){throw"empty";} returntop->data; 出栈操作查找栈顶元素判断栈是否为空输出栈中元素结束 开始新建数组为数组元素赋值并入栈 出栈操作查找栈顶元素判断栈是否为空执行析构函数结束程序运行结果:源代码#include<iostream>usingnamespacestd;constintStackSize=10;//定义栈的最大高度template<classT1>classBothStack//定义两栈共享空间的c++模板类{public: BothStack()//构造函数,初始化空栈 { top1=-1; top2=StackSize; } voidPush(inti,T1x);//入栈操作 T1Pop(inti);//出栈操作 T1GetTop(inti);//查找栈顶元素 boolEmpty(inti);//判断栈是否为空栈 voidPrint();//先打印栈1,再打印栈2private: T1data[StackSize]; inttop1,top2;};template<classT1>voidBothStack<T1>::Push(inti,T1x)//入栈函数{ if(top1==top2-1) { throw"上溢"; } if(i==1) { data[++top1]=x; } if(i==2) { data[--top2]=x; }}template<clas