DS博客作业03--栈和队列
1.本周学习总结
学习C++后,相比较于C,C++比较容易实现栈和队列的操作,像是开挂一样,而徒手用C写的话太繁琐了
栈和队列有区别,前者是后进先出,后者是先进后出
其次呢,栈是一端受限,一段允许进行操作的线性表。先放的后取,后放的先取。放在栈上说,就是先进后出。
队列是一种限定性的线性表。先进先出。
和栈一样,它常见的两种存储是顺序存储和链式存储。
2.PTA实验作业
2.1.题目1:
本题要求在一个数组中实现两个堆栈。
2.1.2代码截图
2.1.3本题PTA提交列表说明
Q1:输出超限
A1;在申请完空间后,忘记修改S->MaxSize的值,导致输出超限
2.2.题目1:
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,
而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
2.2.2代码截图
2.2.3本题PTA提交列表说明
A1:忽略了循环,在增加减少的时候应该修改count的值,还要保证添加的位置不超多MaxSize
A2:输出用puts(), puts() 和 printf() 相比也有一个小小的缺陷,就是如果 puts() 后面的参数是字符指针变量或字符数组,
那么括号中除了字符指针变量名或字符数组名之外什么都不能写。
2.3.题目1:
假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。
编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。
2.3.1设计思路
先遍历所输入的数据,遇到{,(,【就入栈,遇到},),】先判断栈内是否为空,若为空,则不配对,若不为空,则取栈顶,
与之配对,配对成功就继续,知道数据全部配对完,在判断栈内是否还有元素,有则配对失败,无则成功。
2.3.2代码截图
2.3.3本题PTA提交列表说明
Q1:一个很容易遗忘的点,就是遇到右符号,但是栈里为空的情况
A1:通过pta的提示,在遇到右符号时,多加一条对栈的判断
2.4.题目1:
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;
下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次
(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。
2.4.1设计思路
首先判断m是否大于n,是则结束;不是则将数据输入到队列里,设置变量i,当i==m,输出队头并且出队,不等于就出队在入队
2.4.2代码截图
2.4.3本题PTA提交列表说明
A1;这题上课刚刚见过简化版本,回来就开始打,所以问题不大,编译错误只是忘记换C++;
C++处理这类题真的比C快捷很多
3、栈和队列上机考试
错题一
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。
请编写算法实现队列的入队和出队操作。
错误代码
正确代码
错误在处理输出的时候是输出队头,没有找好队头的位置
导致代码崩溃,在考试时也不能冷静思考,对队列的理解不够
也受到插入的影响,使得输出的代码有点乱。
错题二
输入一个后缀表达式,程序求出表达式值。
这题pta上没有,是课本上的,当时也没有认真看,导致上机手足无措。当时写这题时就想着混点分就好,结果没混到,
就想把前面的队列写出来。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器