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

1.本周学习总结

本周学习了栈和队列的内容,整体的学习感觉还是能跟得上老师的进度,但是就编码实现不够灵活的问题。我明白了栈就跟老师讲的死胡同一样,出口只有一个,第一个进去的在最低下,先进后出,删除与加入均在栈顶操作。而队列就可以联想成我们现实生活中的排队,从一头进,另一头处,不同于栈所服从的先进后出的原则,队列的原则是先进先出。他们都是一种线性存储结构,通过上周的学习,我大致了解了如何建立一个栈和队列,如何判断满或者空,如何入栈出栈,入队出队,也能加以运用到pta上的题型中。上周也了解了include<stack>和include<quue>两种头文件的运用,这能很好地减少我们进行栈或者队列的基本操作码的代码,直接调用库里的函数,在了解具体的操作的后,我个人觉得能更加方便我们理解。在本周的学习中,我也遇到了很多的问题,比如说在建栈或者建队列的时候对c语言的语法不太熟悉,对栈和队列的理解不够导致代码思路上会出现问题,以及在使用头文件模板的时候会忘记定义栈或者队列。

2.PTA实验作业

2.1.题目1:题目名称

6-2 在一个数组中实现两个堆栈

本题要求在一个数组中实现两个堆栈。如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果某堆栈是空的,则Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR。

2.1.1设计思路

这题是在一个数组中实现两个栈,一个的栈顶在数组头,另一个栈的栈顶在数组尾。当栈空的时候第一个栈的栈顶为-1,或者第二个栈的栈顶为数组的最大长度,栈满的时候第二个栈的栈顶减去第一个栈的栈顶等于1。这题也不好调试因为有Operation GetOp()这个函数,可以通过pta上的编译错误来找出语法错误,剩下的可以百度这个函数加进去进行调试。

2.1.2代码截图


2.1.3本题PTA提交列表说明

说明:

  1. 一开始没看见用的是c的编译,用的是c++的输入和输出。
  2. 在编译代码的时候没有注意到还要输出空栈的序号,没有加上去,但是在最后查看输出时发现了。

2.2.题目2:题目名称

6-12 jmu-ds-舞伴问题

假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。

2.2.1设计思路

这题是一题队列的函数题,应该是主要考查我们对于队列的一些基本操作的运用,我们通过题目给的结构体对性别进行判断,然后让其各自入队,最后出对的话依照题目给的样式依次出队,并根据长度输出剩的性别的剩下的队伍人数

2.2.2代码截图


2.2.3本题PTA提交列表说明

说明:

  1. 开始的时候把男队和女队的英文搞反了导致先输出了男队(我以后一定好好学英语
    2.开始时不懂队列的长度的函数是啥,就盲目地去翻书,看到就直接去抄了,后来调试的时候发现长度有问题,仔细一看是求的是循环队列的长度,就换了种思路去写。
  2. 忘了换行

2.3.题目3:题目名称

7-2 jmu-ds-符号配对

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

2.3.1设计思路

这题一开始我是用最普通的做法,左符号入栈遇到右符号配对就出栈,再在遍历完后进行输出,在取栈顶的时候要注意栈空操作。之后我参考老师上课讲的知识点和同学的帮助,写了另一种方法,大体上判断与第一种

2.3.2代码截图

1.第一种方法的代码截图

2.第二种方法的代码截图

2.3.3本题PTA提交列表说明

说明:

1.第一种做法中忘在取top的时候加一个栈空的判断,导致栈顶元素不能输出,程序在取栈顶的时候崩溃。


2.对string.find()函数理解不够深刻,导致使用不当而输出错误的答案。


2.4.题目4 :题目名称

7-5 jmu-报数游戏

报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。

2.4.1设计思路

当输入的位置大于人数的时候输出error,从头开始取,每取一个就出队再进队放置队尾,当取到相应的位置时出队,放到相应的数组中,以此类推。最后输出数组。

2.4.2代码截图


2.4.3本题PTA提交列表说明


有些人啊,只是表面光鲜亮丽,就像我这样。

说明:

1.这题我在编码的时候也遇到了很多困难,一开始不懂啥时候控制error的输出,想了好久。
2.对于输出的位序一开始没想到用数组,用了一个栈好麻烦的。


3、栈和队列上机考试

3.1上机体会

这次上机考的总体感觉并不咋样,平时pta上敲出的题目在上机考试中可能敲得很慢甚至可能敲不出来,就是对于知识掌握不牢固。有时候会死扣一题,导致有些题目想都没有去想,比如这次的浙大版的符号配对的问题,我整个上机考试就点进去看了个题目,就再也没有点进去过了。

3.2 错题

3.2.1 编程题

7-3 列车调度

错题:

解答:

  • 上机考的时候没来得及去想这一题。
  • 其中用到了#include类型的头文件,set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。
  • c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器,利用这个可以很快地找到最小的比num大的数。

3.2.2 函数题

6-2 另类循环队列

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

改正后的代码:

解答

1.对count忘记加1,而是在整体的位置上往后移,现在看这个错误就感觉很可惜。
2.有时候上机考的代码只凭着感觉敲,并不会有去自己重新打一遍的感觉。
3.依旧是换行的问题

posted @ 2019-04-21 20:56  AshinLuoX  阅读(380)  评论(4编辑  收藏  举报