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

# 集美大学课程实验报告-实验3:栈、队列与递归

集美大学课程实验报告-实验3:栈、队列与递归

项目名称 内容
课程名称 数据结构
班级 网安 2512
学号 202521336054
实验项目名称 栈和队列的使用
上机实践日期 4月2日
上机实践时间 2学时

一、目的(本次实验所涉及并要求掌握的知识点)

  • 掌握栈的“后进先出”特性,掌握队列的“先进先出”特性
  • 理解递归与栈的关系,并掌握用栈将递归转化为非递归的基本方法
  • 掌握 C++ 中 stack 与 queue 的基本操作

二、实验内容与设计思想

题目1:栈的应用

函数相关伪代码

函数 ismatch(a, b):如果 (a=='(' 且 b==')') 或 (a=='[' 且 b==']') 或 (a=='{' 且 b=='}'):返回 真否则:返回 假主函数:初始化一个空栈 st读入一行字符串 line对于 line 中的每个字符 c:如果 c 是 '(' 或 '[' 或 '{':把 c 压入栈 st否则如果 c 是 ')' 或 ']' 或 '}':如果 栈 st 是空的:输出 "no"程序结束否则:获取栈顶元素 top = st.top()如果 ismatch(top, c) 为真:弹出栈顶元素否则:输出 top输出换行输出 "no"程序结束如果 栈 st 是空的:输出 "yes"否则:输出栈顶元素输出换行输出 "no"

函数代码

//DD符号配对,记住"" 字符串字面量,''才是字符
#include<iostream>
#include<stack>using namespace std;bool ismatch(char a,char b);int main(){stack<char>st;string line;getline(cin,line);for(char c:line){if(c=='('||c=='['||c=='{'){st.push(c);//1.1}else if(c==')'||c==']'||c=='}'){if(st.empty()){//2.1记得考虑如果为空,则就只有右符号,铁定不行cout<<"no";//此时no不是单个字符要用""return 0;}else{if(ismatch(st.top(),c)){st.pop();//2.2.1将存放的括号因匹配而出栈}else{//2.2.2此时就直接匹配失败结束掉cout<<st.top()<<endl<<"no";return 0;}}}}//3.1,3.2还要考虑,是否真的栈内有左符号的情况if(st.empty()){cout<<"yes";//3.1直接成功,没有残留的左符号}else{cout<<st.top()<<endl<<"no";//3.2,有残留的左符号}return 0;
}
bool ismatch(char a,char b){return((a=='('&&b==')')||(a=='{'&&b=='}')||(a=='['&&b==']'));
}

题目2:递归程序编写

函数相关伪代码

主函数:初始化一个空栈 st整数 sum// 第一阶段:读入直到遇到 0循环:读入 x如果 x == 0:sum = 0输出 sum跳出循环否则:把 x 压入栈 st// 第二阶段:回溯累加当 栈 st 非空时:sum = sum + 栈顶元素(st)弹出栈顶元素输出 sum

函数代码

#include<iostream>
#include<stack>
using namespace std;
int main(){stack<int>st;int sum;while(1){int x;cin>>x;if(x==0){sum = 0;cout<<sum;//基准条件输出,必须需要break;}else{st.push(x);}}while(!st.empty()){//初始就入一个0的话没入栈不影响sum = sum +st.top();//栈用top,队列用frontcout<<sum;st.pop();}return 0;
}

题目3:队列的应用

函数相关伪代码

主函数:初始化两个队列 A、B读入 N// 分配顾客循环 i = 1 到 N:读入 id如果 id 是奇数:id 入队 A否则:id 入队 Bfirst = true// 输出顺序当 队列 A 非空 或 队列 B 非空时:如果 队列 A 非空:如果 first 为真:first = false否则:输出一个空格输出 A 的队首元素A 出队如果 队列 A 非空:输出一个空格输出 A 的队首元素A 出队如果 队列 B 非空:如果 first 为真:first = false否则:输出一个空格输出 B 的队首元素B 出队

函数代码

//DD队列的应用
#include<iostream>
#include<queue>
using namespace std;int main(){queue<int>A,B;int N;cin>>N;for(int i=1;i<=N;i++){int id;cin>>id;if(id%2==1){A.push(id);}else{B.push(id);}}bool first = true;while(!A.empty()||!B.empty()){//记住这个if(!A.empty()){if(first){first = false;}else{cout<<" ";}cout<<A.front();A.pop();}if(!A.empty()){cout<<" "<<A.front();//<<别少写A.pop();}if(!B.empty()){if(first){first = false;}else{cout<<" ";}cout<<B.front();B.pop();}}return 0;
}

三、实验使用环境(本次实验所使用的平台和相关软件)

以下请根据实际情况编写

  • 操作系统:Windows 11专业版
  • 编程语言:C++
  • 开发工具:Visual Studio 18.3.2
  • 编译器:MSVC 14.40

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

题目1:栈的应用

本机运行截图
img

PTA提交截图
img

题目2:递归程序编写

本机运行截图
img

题目3:队列的应用

本机运行截图
img

PTA提交截图
img


五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)

遇到的问题及解决方法:

  1. 问题:递归转非递归时,输出顺序与递归版本不一致,多输出了0或遗漏了累加结果。
    • 解决方法:用栈保存读入的非零数,读到0后先输出 0,再依次弹栈累加并输出,保证输出序列完全一致。
  2. 问题:伪代码使用不规范
    • 解决方法:使用AI辅助进行改正

实验体会和收获:

  • 学会了用 STL 的 stack 和 queue 快速实现数据结构相关算法,避免了手动实现底层数据结构的繁琐。
  • 掌握了递归程序的非递归转换方法:利用栈手动模拟递归调用栈,保存每一层的局部变量,在回归阶段依次处理。

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

  1. 实验3-栈与队列
http://www.jsqmd.com/news/599558/

相关文章:

  • 2026届最火的六大降重复率神器横评
  • 2026年湖北地区活动房采购指南:五大实力批发商综合评测与报价解析 - 2026年企业推荐榜
  • 效率与可靠性的双重进化:2026年佛山闭式塔空冷器服务商**推荐 - 2026年企业推荐榜
  • 2026广东雪茄柜供应商深度测评:5家头部厂商实力全解析 - 2026年企业推荐榜
  • Zorb框架:轻量级嵌入式开发实践与优化
  • 背栓式石材幕墙
  • 【实战】DeepSeek V4 弃用英伟达跑华为昇腾 × GPT-6“土豆“4.14发布——CUDA到CANN迁移踩坑和模型选型
  • VL6180X ToF测距传感器原理与STM32/Arduino双平台实战
  • 2026年重庆AI学前教育市场深度解析:小扣子AI互动空间何以成为专业之选? - 2026年企业推荐榜
  • **发布:2026年防滑钢格板行业五强服务商深度解析 - 2026年企业推荐榜
  • 八种核心数据结构详解与应用指南
  • 从一次炸机事故看懂示波器地线:隔离变压器、差分探头到底怎么选?
  • AITINKR_JSON_FIELDS:面向MCU的零碎片JSON字段管理库
  • Liberate MX for SRAM RaK教程 嵌入式静态随机存取存储器(SRAM)实例...
  • 2026年徐州地区称重给料机服务商深度评估与选择指南 - 2026年企业推荐榜
  • M5Unit-BLDC驱动单元技术解析与I2C控制实践
  • 医疗行业诚信ups电源品牌推荐榜:奥森盾ups电源/施耐德ups电源/易事特ups电源/汤浅蓄电池/理士蓄电池/选择指南 - 优质品牌商家
  • Git版本控制入门与实战指南
  • OpenClaw极限测试:Phi-3-mini-128k-instruct连续运行7天稳定性报告
  • **deepseek-v3.2写小说app推荐,2025年创作新助手**在数字化浪潮席卷全球的今天,写作工具也迎来了前所未有的革新。对于众多热爱文学创作的朋友来说,一款高效、便捷且功能全面的写小说
  • LK微内核:轻量级嵌入式系统设计与实现
  • maqui音序器库:面向嵌入式教育的轻量级步进音序器HAL框架
  • 2026年跑步机采购指南:五大优质供应商深度评测与选购秘籍 - 2026年企业推荐榜
  • 2026年郑州合成高温润滑油服务商综合评估与选购指南 - 2026年企业推荐榜
  • AI辅助开发新体验:让快马AI成为你开发龙虾openclaw官网的智能协作者
  • 001、开篇:为什么是LangChain?大模型应用开发范式变革
  • 被动房的星星之火,燎到你的城市了么?
  • 2026年心理咨询师报考指南:五家**机构深度测评与避坑建议 - 2026年企业推荐榜
  • 基于 Graph 架构的 AI Agent Harness 构建
  • 【实战解读】腾讯云ClawPro正式发布:企业版OpenClaw 10分钟上线,三级Token配额+四层安全防护全解析