栈是一个非常常见的数据结构,它在计算机领域被广泛应用,比如操作系统会给每个线程创建一个栈用来存储函数调用时各个函数的参数,返回地址以及临时变量。栈的特点是后劲先出,即最后被压入(push)栈的元素会第一个被弹出po。
通常栈是一个不考虑排序的数据机构,我们需要n 时间才能找到栈中最大或者最小的元素。如果想要在O1时间内得到栈的最大值,则需要对栈进行特殊的设计。
队列是另外一种重要的数据结构,和栈不同的是,队列的特点是先进先出,即第一个进入队列的元素将会第一个出来。在2.3.4节介绍的树的广度优先遍历算法中,我们在遍历某一层树的节点时,把节点的子节点放到一个队列里,以备下一层节点的遍历。
面试题 9 用两个栈实现队列
package question9_stact_replace_queue;
import java.util.Stack;
/**
* @Classname Solution
* @Description TODO
* @Date 2020/3/7 23:05
* @Created by mmz
*/
public class Solution {
public static class Queue{
Stack<Integer> stack1;
Stack<Integer> stack2;
Queue(){
stack1 = new Stack<Integer>();
stack2 = new Stack<Integer>();
}
}
public static void appendTail(Queue queue,int item){
for(int i = 0;i<queue.stack1.size()+queue.stack2.size();++i){
int temp = queue.stack1.pop();
queue.stack2.push(temp);
}
queue.stack2.push(item);
for(int i = 0;i<queue.stack1.size()+queue.stack2.size();++i){
int temp = queue.stack2.pop();
queue.stack1.push(temp);
}
}
public static int deleteHead(Queue queue){
return queue.stack1.pop();
}
public static void print(Queue queue){
for(int i=0;i<queue.stack1.size()+queue.stack2.size();++i){
int temp = queue.stack1.pop();
System.out.print(temp);
queue.stack2.push(temp);
}
for(int i = 0;i<queue.stack1.size()+queue.stack2.size();++i){
int temp = queue.stack2.pop();
queue.stack1.push(temp);
}
}
public static void main(String[] args) {
Queue queue = new Queue();
appendTail(queue,1);
appendTail(queue,2);
appendTail(queue,3);
deleteHead(queue);
appendTail(queue,1);
appendTail(queue,2);
appendTail(queue,3);
deleteHead(queue);
print(queue);
}
}