当前位置: 首页 > news >正文

实验3--栈与列队

一、目的(本次实验所涉及并要求掌握的知识点)
1.掌握STL中string的使用
2.熟练掌握STL中栈(stack)和队列(queue)的基本使用
3. 掌握栈和队列的一些典型应用

二、实验内容与设计思想

  1. 栈的应用(数制转换:十进制转八进制)
    (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

四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)

  1. 栈的应用(数制转换:十进制转八进制)
    运行截图

image

屏幕截图 2026-04-05 214629

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

屏幕截图 2026-04-05 215143

屏幕截图 2026-04-05 215217

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

屏幕截图 2026-04-05 215434

屏幕截图 2026-04-05 215453

屏幕截图 2026-04-05 215509

五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)
1.实验中遇到的问题及解决过程
1.问题:结构体忘记初始化

  • 解决方法:要考虑极端情况
  1. 问题:在4.2中容易陷入死循环
  • 解决方法:一定要记得输入0
    2.实验体会和收获
    (1).学会了舞伴问题如何使用队列解决
    (2).学会了使用栈来进行数值转换

六、附件(参考文献和相关资料)

http://www.jsqmd.com/news/593742/

相关文章:

  • 光学工程师进阶指南:从入门到精通的实战路径
  • AngularJS Http详解
  • 2025最权威的五大AI辅助论文方案实测分析
  • “Comsol电磁诱导透明EIT双谐振子耦合模型拟合”视频讲解及参考文献与Comsol模型发布
  • 如何用开源工具3分钟制作专业级《蔚蓝档案》风格Logo?
  • zabbix和prometheus对比
  • AI率越高越难降吗?从原理角度给你解释清楚
  • COMSOL模拟环偶极子对磁光克尔效应的增强研究
  • SpringBoot-基础面试篇
  • 2025届必备的十大降重复率助手实测分析
  • CentOS无网络环境下搭建Java开发环境的完整指南
  • 值得信赖的号码认证平台有哪些?年度口碑服务商汇总 - 企业服务推荐
  • 考虑新能源消纳的火电机组深度调峰策略
  • 人声分离实战指南:从UVR、Demucs到Spleeter的模型选型与场景适配
  • 2026年4月目前技术好的一体化消防泵站源头厂家推荐,有实力的一体化消防泵站品牌优选品牌推荐与解析 - 品牌推荐师
  • 告别“人工标注地狱”:弱监督学习如何让暴力检测模型自己找重点?
  • 分层数据流图DFD—计算机等级考试—软件设计师考前备忘录—东方仙盟
  • 手把手教你用宜搭连接器与Groovy脚本,搞定跨系统数据同步与复杂审批通知
  • **发散创新:用Python实现量子强化学习在博弈环境中的智能决策**在人工智能与量子计算交叉融合的前沿领域,**量
  • 2026年国内镀锌管非标定制,冲孔钢护筒/冷镀锌角钢/镀锌管/六油两布防腐钢管/镀锌无缝管,镀锌管现货供应哪家便宜 - 品牌推荐师
  • 如何实现打电话显示公司名?安卓与鸿蒙系统号码认证服务商推荐 - 企业服务推荐
  • 基于虚拟阻抗的微电网下垂控制方法设计matlab/simulink仿真,以虚拟阻抗为基础的下垂...
  • 深入解析P沟道与N沟道MOSFET的工作原理及应用场景
  • 比话降AI实测:AI率87%的论文降到11%全程记录
  • BSGS学习笔记
  • 基于 Gemma 2 构建企业级 Agentic RAG 合规审计系统
  • 比话降AI和嘎嘎降AI处理80%+AI率哪个更好
  • 别再问怎么连了!Win10蓝牙串口配对仪器设备,保姆级图文教程(含端口号查看)
  • Xilinx UltraScale Transceiver仿真调试实战:从数据对齐到随机数验证
  • 域名出售页+escrow.com出售链接。(Caddy + Node.js)