实验报告-栈和队列
集美大学课程实验报告-实验3:栈、队列
| 项目名称 | 内容 |
|---|---|
| 课程名称 | 数据结构 |
| 班级 | 网安 2511 |
| 学号 | 202521336002 |
| 实验项目名称 | 栈和队列 |
| 上机实践日期 | 2026.04.02 |
| 上机实践时间 | 2学时 |
一、目的(本次实验所涉及并要求掌握的知识点)
- 掌握STL中string的使用
- 熟练掌握STL中栈(stack)和队列(queue)的基本使用
- 掌握栈和队列的一些典型应用
二、实验内容与设计思想
题目1:栈的应用(符号配对)
相关伪代码
getline整行输入string类型的s
定义栈node
循环:
{
char c=s[i]
if (c找到'(','[','{')
{
node.push()
}
else if(c找到')',']','}')
{
判断:
if(node.empty)
{
栈内没有匹配的符号,输出no并跳出循环
}
取栈顶元素top,为找到配对,cout<<top并cout<<no
若匹配,弹出栈顶元素node.pop()
}
}
if(node.empty)
{
全部匹配成功并弹出,cout<<yes;
}else//失败
{
cout<<top<<endl;
cout<<no;
}
代码
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);//整行输入
stack<char> node;
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(c=='('||c=='['||c=='{')
{
node.push(c);//符合要求就入栈
}else if(c==')'||c==']'||c=='}')
{
if(node.empty())//先判断没有配对的情况
{
cout<<"no";
return 0;
}
char top=node.top();
int y=0;
if(top=='('&&c==')') y=1;
if(top=='['&&c==']') y=1;
if(top=='{'&&c=='}') y=1;
if(!y)
{
cout<<top<<endl;
cout<<"no";
return 0;
}
else
{
node.pop();
}
}
}
if(node.empty())
{
cout<<"yes";
}else{
cout<<node.top()<<endl;
cout<<"no";
}
return 0;
}
题目2:队列的应用(银行业务队列)
相关伪代码
定义两个队列qa、qb
输入数据数量n
循环(i<n)
{
输入处理数据num
if(num%2!=0)
{
进入qa队列
}else
{
进入qb队列
}
}
循环(qa或qb不是空队列时)
{
循环(i<2&&!qa.empty)
{
格式化输出不超过两个qa里的元素
}
格式化输出qb里的元素
}
代码
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int>qa;
queue<int>qb;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
if(num%2!=0)
{
qa.push(num);
}else
{
qb.push(num);
}
}
int first=1;
while(!qa.empty()||!qb.empty())
{
for(int i=0;i<2&&!qa.empty();++i)
{
if(!first)
{
cout<<" ";
}
cout<<qa.front();
qa.pop();
first=0;
}
if(!qb.empty())
{
if(!first)
{
cout<<" ";
}
cout<<qb.front();
qb.pop();
first=0;
}
}
cout<<endl;
return 0;
}
三、实验使用环境(本次实验所使用的平台和相关软件)
- 操作系统:Windows 10 专业版
- 编程语言:C++
- 开发工具:Visual Studio 2022
- 编译器:vs2022默认编译器
四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)
题目1:符号配对
本机运行截图

PTA提交截图

题目2:银行业务队列
本机运行截图

PTA提交截图

五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)
遇到的问题及解决方法:
- 问题:编译报错
- 解决方法:.pop/.front后面要加上括号。
2. 问题:符号配对判断条件错误 - 解决方法:top是取在栈里准备匹配的第一个元素,c的查找情况与top配对即可
实验体会和收获:
- 掌握了string的使用
- 熟练掌握stack和queue的基本使用
- 掌握栈和队列的一些典型应用案例
浙公网安备 33010602011771号