栈与队列的互相转化
问题描述:实现栈与队列的互相转化。
分析:曾今碰到过的一个面试题目,面试官要求如何用队列实现栈,有这个问题进而又引出了如何用栈实现队列,和大家分享下。
解法:
用队列实现栈:栈的特点是先进后出,而队列的特点是先进先出,只用一个队列是不可能实现栈的,因此可以使用两个队列来实现
设两个队列分别是Q1和Q2,当需要将元素压栈时,将元素进入队列Q1,如果要出栈,则将Q1中的除最后一个元素之外的所有元素
出队列,并进入队列Q2,这样就完成了一次出栈。如果再次进栈,只需要将元素进入目前的非空对列中即可,如果要出栈,则把非空
队列中的前几个元素再次出栈,并进入到另一个队列即可。如此反复,就实现了栈的功能。
总结如下:
压栈:向非空队列中压入即可。
出栈:将非空对列中的所有元素出队列,并将其进入到另一个空队列中,但最后一个元素不进入,直接扔掉即可。
用栈实现队列:同样需要利用栈和队列的特点。用两个栈实现队列。
设两个队列为S1和S2,当元素进队时,将元素压入栈S1中,出队时将S1中全部元素弹出并压入栈S2,最后一个元素不压入栈S2,
直接扔掉,然后把栈S2中全部元素出栈,并压入S1中,当再次需要进队时把元素压入S1中,需要出队时,再次移到S2中,如此反复,
就实现了队列的功能。
总结如下:
进队:向非空栈中压入元素。
出队:将非空栈中全部元素出栈并压入另一个栈中,但最后一个元素不压入,直接将其扔掉,然后把栈中所有的元素出栈,并压入原来的栈中。
由于比较简单,我就不再编程实现了,读者可以自己编程验证。