1.本周学习总结(0--1分)
谈谈你对栈和队列结构的认识及学习体会。
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的线性表,由于rear 可能比 front 大, 也可能比front小,所以尽管
它们只相差一个位置时就是满的情况,但也可能是相差整整一圈。
栈 (Stack)是一种后进先出(last in first off,LIFO)的数据结构,在应用上我们也讲过用栈和队列做迷宫问题
栈用的是深度搜索,队列用的是广度搜索;前者是最快的找出解法不考虑最优解,后者是找出所有解法,并选出最优解。
2.PTA实验作业(6分)
2.1.题目1
在一个数组中实现两个堆栈
2.1.2代码截图
2.1.3本题PTA提交列表说明。
Q1:这道题目中有两个栈顶,在判断栈空的时候的出现错误,
2.2 题目2
在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?
2.2.2代码截图
2.2.3本题PTA提交列表说明。
Q1: 在dev上复制过来的时候少复制了导致格式错误
2.3 题目3
编写一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。
2.3.1设计思路
while(a[i])
{
S.push(a[i]);
i++;
}//先将数列入栈。
while(!S.empty())
{
b[j]=S.top();
S.pop();
j++;//再将数列出栈,则得到相反的俩个字符数组;
再进行比较
2.3.2代码截图
2.3.3本题PTA提交列表说明。
Q1:在j的赋值的时候考虑错误,把j赋值了1出现错误
2.4 题目4
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。
2.4.1设计思路
if m大于n,
大于结束
else
将数据输入到队列里
定义变量i,
if i==m
出队列
else
就出队列再入队列
2.4.2代码截图
2.4.3本题PTA提交列表说明。
Q1: queue函数运用不熟练,出现少加front后面的括号等情况
3、栈和队列上机考试(-3--3分)
错题及解决办法
截图错题代码,分析错误原因及后续要改进地方。请至少列举2题。如果拿满分同学,这部分可不写,直接拿3分。
3.1题目一
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。
3.1.2 截图
在另类堆栈的那一题卡的时间太久,是自己太紧张始终忘了这一道题怎么写的了。这道题要注意中文是俩个字节,这一点会有可能经常性被人忽略。我在上机考试中花了大部分时间写了大概将近3道题,未来的日子我会更加努力。
3.2题目二
假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。
3.2.2 截图
这一题我不是很会所以我就取巧的拿了10分,前面的题也卡了很久所以没有接着去写,我认为这种取巧的方式适不适合在平时的练习的,所以在以后的代码日子里我会更加努力的。
注意:分析错误原因及体会,主要讲代码错误。
这是这道题正确的做法!