DS博客作业03--栈和队列

本文总结了C++中栈和队列的基本概念及其实现技巧,对比C语言,C++提供了更简便的栈和队列操作。文章详细解析了PTA实验中的多个题目,包括双栈数组实现、循环队列操作、括号匹配算法、报数游戏等,通过代码实例加深理解。

栈和队列

1.本周学习总结

    学习C++后,相比较于C,C++比较容易实现栈和队列的操作,像是开挂一样,而徒手用C写的话太繁琐了
    栈和队列有区别,前者是后进先出,后者是先进后出
    其次呢,栈是一端受限,一段允许进行操作的线性表。先放的后取,后放的先取。放在栈上说,就是先进后出。
    队列是一种限定性的线性表。先进先出。
    和栈一样,它常见的两种存储是顺序存储和链式存储。

2.PTA实验作业

2.1.题目1:

    本题要求在一个数组中实现两个堆栈。

2.1.2代码截图

1474675-20190421150840490-308228380.png

1474675-20190421150845999-666000174.png

2.1.3本题PTA提交列表说明

1474675-20190421150923963-1304013455.png

Q1:输出超限
A1;在申请完空间后,忘记修改S->MaxSize的值,导致输出超限

2.2.题目1:

    如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,
而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。

2.2.2代码截图

1474675-20190421152522910-1964784772.png

2.2.3本题PTA提交列表说明

1474675-20190421152604148-1780976593.png

A1:忽略了循环,在增加减少的时候应该修改count的值,还要保证添加的位置不超多MaxSize
A2:输出用puts(), puts() 和 printf() 相比也有一个小小的缺陷,就是如果 puts() 后面的参数是字符指针变量或字符数组,
那么括号中除了字符指针变量名或字符数组名之外什么都不能写。

2.3.题目1:

    假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。
编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。

2.3.1设计思路

    先遍历所输入的数据,遇到{,(,【就入栈,遇到},),】先判断栈内是否为空,若为空,则不配对,若不为空,则取栈顶,
与之配对,配对成功就继续,知道数据全部配对完,在判断栈内是否还有元素,有则配对失败,无则成功。

2.3.2代码截图

1474675-20190421154154067-1378302156.png
1474675-20190421154206553-462181733.png

2.3.3本题PTA提交列表说明

1474675-20190421154236732-51544641.png

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代码截图

1474675-20190421155807799-946453190.png

2.4.3本题PTA提交列表说明

1474675-20190421155852372-158568590.png

`A1;这题上课刚刚见过简化版本,回来就开始打,所以问题不大,编译错误只是忘记换C++; C++处理这类题真的比C快捷很多

3、栈和队列上机考试

错题一

如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。

错误代码
1474675-20190427143018113-188608911.png

正确代码
1474675-20190427143040060-1781263315.png

    错误在处理输出的时候是输出队头,没有找好队头的位置
导致代码崩溃,在考试时也不能冷静思考,对队列的理解不够
也受到插入的影响,使得输出的代码有点乱。

错题二

输入一个后缀表达式,程序求出表达式值。

1474675-20190428192904122-1051998231.png

1474675-20190427143352515-237722429.png

    这题pta上没有,是课本上的,当时也没有认真看,导致上机手足无措。当时写这题时就想着混点分就好,结果没混到,
就想把前面的队列写出来。

转载于:https://www.cnblogs.com/B-hai/p/10745516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值