1、栈和队列都是限制性的线性表结构。
(1)、栈的元素存储顺序为:LIFO(先进后出)
(2)、队列的元素粗春顺序为:FIFO(先进先出)
2、栈和队列之间相互转换的两个问题
(1)、用两个栈实现一个队列
思路:由于栈的存储顺序为“先进后出”,所以:
1)、可以将栈1作为一个插入栈,栈2作为一个弹出栈。
2)、将元素插入栈1,并判断栈2是否为空。
(a)、如果栈2为空,则将栈1中的元素进行POP操作,并push 进栈2,然后从栈2再进行出栈操作。
(b)、如果栈2不为空,直接将栈2进行出栈操作。
代码:
import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() { while(!stack2.isEmpty()) { return stack2.pop(); } while(!stack1.isEmpty()) { stack2.push(stack1.pop()); } return stack2.pop(); } }
(2)、用两个队列实现一个栈
思路:队列的存储顺序为:“先进先出”
1)、判断队列1是否只有一个元素
(a)、如果队列1中只有一个元素时,直接输出队列。
(b)、如果队列1中不止一个元素时,将对列中的元素(除了 队列1中的最后一个元素)压入对列2中,然后将队列2 中的元素调用back()函数进行出队操作,放 到队列1中去。
注释:back()函数作用:返回当前vector容器中末尾元素的引用。