栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
首先,学过数据结构我们了解到:栈的特点就是先进后出,我们可以把它想象成洗完盘子放盘子,一步一步压入,最后我们只能从最上面开始取已经洗好的盘子。
在学习了一段时间后我就遇到了计算栈的出入顺序存在性的问题
即:按顺序压入a、b、c、d四个元素,问有没有按照c、d、a、b取出元素的方式,当然这只是其中的一个选项
亦或者类似于这种题目
即:按顺序压入a、b、c、d四个元素,问有没有按照c、d、a、b取出元素的方式,当然这只是其中的一个选项
遇到这种题目起初我是一点点试的,后来发现一个好方法。我们可以这样思考,以上面这个题目为例:我们在取出c之前是一定会压入a和b的,且我们最先取出的是c这就说明我们还没有取出a和b,所以此时我们的栈内是这样的
d我们可以直接压入在取出,不做解释,而后面的a、b我们就无法按照顺序正常出栈了,这就是问题所在,所以在这我们也可以简单总结一下。
如果最前面出栈的元素是后面压入的,那么提前压入的元素出栈的顺序就一定只能是压入元素顺序的逆序。