实验3--栈与列队
一、目的(本次实验所涉及并要求掌握的知识点)
1.掌握STL中string的使用
2.熟练掌握STL中栈(stack)和队列(queue)的基本使用
3. 掌握栈和队列的一些典型应用
二、实验内容与设计思想
- 栈的应用(数制转换:十进制转八进制)
(1) 函数相关伪代码*
void converDectOct(int x){
stack <int> result;
当x=0时:
cout<<"0"<<endl;
当x>0时:
z=x%8;
result.push(z);
x=x/8;
当栈result不为空时:
cout<<result.top();
result.pop();
}
** (2)函数代码**
#include <iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
int x;
cin >> x;
stack<int> result;
int z;
if (x == 0)
{
cout << "0" << endl;
return 0;
}
while (x > 0)
{
z = x % 8;
result.push(z);
x = x / 8;
}
while (!result.empty())
{
cout << result.top();
result.pop();
}
cout << endl;
return 0;
}
2.递归程序编写(4.2)
(1)函数相关伪代码
void test(int& sum) {
stack<int> stk;
当(true):
int x;
cin>>x;
stk.push(x);
如果x=0:
break;
当stk不为空时:
result=stk.top();
stk.pop();
如果result=0:
cout<<sum
其他:
sum+=result;
(2)函数代码
#include <iostream>
#include<stack>
#include<string>
using namespace std;
void test(int& sum) {
stack<int> stk;
int x;
while (true)
{
cin >> x;
stk.push(x);
if (x == 0)
{
break;
}
}
sum = 0;
while (!stk.empty())
{
int result = stk.top();
stk.pop();
if (result == 0)
{
cout << sum << endl;
}
else {
sum += result;
cout << sum << endl;
}
}
}
int main()
{
int s = 0;
test(s);
return 0;
}
3.队列的应用(舞伴问题)
(1)函数伪代码
初始化两个空队列queue_men,queue_women
将所有男生和女生分别加入队列
当queue_men,queue_women都不为空时:
man=queue_men.pop()
women=queue_women.pop();
输出men和women
如果!men.empty():
cout<<剩下的男生<<endl;
如果!women.empty():
cout<<剩下的女生<<endl;
否则:cout<<所有人配对成功<<endl
(2)函数代码
#include <iostream>
#include <queue>
#include <string>
using namespace std;
struct Person {
string name;
char gender;
};
int main() {
queue<Person> queue_men;
queue<Person> queue_women;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
Person p;
cin >> p.name >> p.gender;
if (p.gender == 'M' || p.gender == 'm') {
queue_men.push(p);
}
else if (p.gender == 'F' || p.gender == 'f') {
queue_women.push(p);
}
}
while (!queue_men.empty() && !queue_women.empty())
{
Person man = queue_men.front();
queue_men.pop();
Person woman = queue_women.front();
queue_women.pop();
cout << man.name << " 和 " << woman.name << " 配对成功" << endl;
}
if (!queue_men.empty()) {
while (!queue_men.empty()) {
cout << queue_men.front().name << " ";
queue_men.pop();
}
cout << endl;
}
if (!queue_women.empty()) {
while (!queue_women.empty()) {
cout << queue_women.front().name << " ";
queue_women.pop();
}
cout << endl;
}
if (queue_men.empty() && queue_women.empty()) {
cout << "\n所有人配对成功" << endl;
}
return 0;
}
三、实验使用环境(本次实验所使用的平台和相关软件)
1.操作系统:Windows 11
2.编程语言:C++
3.开发工具:Visual Studio 2026
四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)
- 栈的应用(数制转换:十进制转八进制)
运行截图


2.递归程序编写(4.2)
运行截图


3.队列的应用(舞伴问题)
运行截图



五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)
1.实验中遇到的问题及解决过程
1.问题:结构体忘记初始化
- 解决方法:要考虑极端情况
- 问题:在4.2中容易陷入死循环
- 解决方法:一定要记得输入0
2.实验体会和收获
(1).学会了舞伴问题如何使用队列解决
(2).学会了使用栈来进行数值转换
六、附件(参考文献和相关资料)
无

浙公网安备 33010602011771号