数据结构实验报告栈和队列共享栈与链栈的模板类实现及测试函数.docx
- 文档编号:9252494
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:103.28KB
数据结构实验报告栈和队列共享栈与链栈的模板类实现及测试函数.docx
《数据结构实验报告栈和队列共享栈与链栈的模板类实现及测试函数.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告栈和队列共享栈与链栈的模板类实现及测试函数.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构实验报告栈和队列共享栈与链栈的模板类实现及测试函数
数据结构实验报告
实验名称:
实验二——栈和队列
学生姓名:
班级:
班内序号:
学号:
日期:
1.实验要求
2.1题目1
根据栈和队列的抽象数据类型的定义,按要求实现一个栈或一个队列。
要求:
1、实现一个共享栈
2、实现一个链栈
3、实现一个循环队列
4、实现一个链队列
编写测试main()函数测试线性表的正确性。
2.程序分析
2.1存储结构
共享栈:
链栈:
2.2关键算法分析
2.2.1共享栈
入栈:
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< } inttemp2=top2;//工作指针 while(temp2! =StackSize)//判断栈二是否为空 { cout< } 2.2.2链栈 析构函数: while(top)//判断是否为空 { structNode top=top->next;//top指针后移 deletep; } 入栈: structNode p->data=x;//新结点的数据域赋值为x p->next=top;//新节点的next域记录top指针指向地址 top=p;//栈顶指针该为p 出栈: if(Empty())throw"下溢"; Tx=top->data;//保存数据 structNode top=top->next;//栈顶指针后移 deletep;//删除 returnx;//返回数值 查找栈顶元素: if(Empty()){throw"empty";} returntop->data; 3.程序运行结果 1.共享栈测试主函数流程 开始 新建共享栈 入栈操作 出栈操作 查找栈顶元素 判断栈是否为空 输出栈中元素 结束 2.链栈测试主函数流程图 开始 新建数组 为数组元素赋值并入栈 出栈操作 查找栈顶元素 判断栈是否为空 执行析构函数 结束 程序运行结果: 源代码 #include usingnamespacestd; constintStackSize=10;//定义栈的最大高度 template classBothStack//定义两栈共享空间的c++模板类 { public: BothStack()//构造函数,初始化空栈 { top1=-1; top2=StackSize; } voidPush(inti,T1x);//入栈操作 T1Pop(inti);//出栈操作 T1GetTop(inti);//查找栈顶元素 boolEmpty(inti);//判断栈是否为空栈 voidPrint();//先打印栈1,再打印栈2 private: T1data[StackSize]; inttop1,top2; }; template voidBothStack : Push(inti,T1x)//入栈函数 { if(top1==top2-1) { throw"上溢"; } if(i==1) { data[++top1]=x; } if(i==2) { data[--top2]=x; } } template T1BothStack : Pop(inti)//出栈函数 { if(i==1) { if(top1==-1)//判断栈1是否为空 { throw"下溢"; } returndata[top1--];//返回出栈元素的值并且栈顶指针下移 } if(i==2) { if(top2==StackSize) { throw"下溢"; } returndata[top2++];//返回出栈元素的值并且栈顶指针上移 } return0; } template T1BothStack : GetTop(inti)//查找栈顶元素 { if(i==1) { if(top1! =-1) { returndata[top1]; } } if(i==2) { if(top2! =StackSize) { returndata[top2]; } } return0; } template boolBothStack : Empty(inti)//判断栈是否为空 { if(i==1) { if(top1==-1) { returntrue; } else { returnfalse; } } if(i==2) { if(top2==StackSize) { returntrue; } else { returnfalse; } } returnfalse; } template voidBothStack : Print()//输出栈中元素 { inttemp1=top1; while(temp1! =-1) { cout< } inttemp2=top2; while(temp2! =StackSize) { cout< } cout< } template structNode { T2data; structNode }; template classLinkStack//定义链栈模板类 { public: LinkStack(){top=NULL;}//构造函数,初始化空栈 ~LinkStack();//析构函数 voidPush(T2x);//入栈操作 T2Pop();//出栈操作 T2GetTop();//查找栈顶元素 boolEmpty(){return(NULL==top)? true: false;}//判别栈是否为空 private: structNode }; template LinkStack : ~LinkStack()//析构函数 { while(top)//判断是否为空 { structNode top=top->next; deletep; } } template voidLinkStack : Push(T2x)//入栈操作 { structNode p->data=x; p->next=top; top=p; } template T2LinkStack : Pop()//出栈操作 { if(Empty())throw"下溢"; T2x=top->data; structNode top=top->next; deletep; returnx; } template T2LinkStack : GetTop()//查找栈顶元素 { if(Empty()){throw"empty";} returntop->data; } voidmain() { intk=0; while(k<=100) { cout<<"测试共享栈请输入“1”,测试链栈请输入“2”: "< intn; cin>>n; if(n==1) { cout<<"测试两栈共享空间的模板类: "< BothStack BoS; BoS.Push(1,'a');//栈1入栈 BoS.Push(1,'b'); BoS.Push(2,'c');//栈2入栈 BoS.Push(2,'d'); cout<<"栈1出栈操作: "< (1)< cout<<"栈2出栈操作: "< (2)< cout<<"栈1的栈顶元素是: "< (1)< cout<<"栈2的栈顶元素是: "< (2)< cout<<"判断栈1是否为空(1为空0为不空): "< (1)< BoS.Pop (2); cout<<"判断栈2是否为空(1为空0为不空): "< (2)< BoS.Push(2,'e'); cout<<"栈中元素: "; BoS.Print(); k++; } else{ cout<<"测试链栈模板类: "< LinkStack inti=0; inta[10]; for(i;i<=3;i++) { cout<<"请输入第"< "< cin>>a[i]; LS.Push(a[i]); } /*inti=0; inta[10]; for(i;i<=3;i++) { a[i]=4*i+1; LS.Push(a[i]); }*/ cout<<"链栈出栈操作: "< cout<<"链栈出栈操作: "< cout<<"栈的栈顶元素是: "< cout<<"判断栈是否为空(1为空0为不空): "< LS.~LinkStack(); cout<<"执行析构函数中。 。 "< cout<<"判断栈是否为空(1为空0为不空): "< k++; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验报告 栈和队列 共享栈与链栈的模板类实现及测试函数 数据结构 实验 报告 队列 共享 模板 实现 测试 函数
![提示](https://static.bdocx.com/images/bang_tan.gif)