8.用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead
,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:[null,null,3,-1]
th:用两个栈,一个栈push数据 另一个栈pop数据
输入数据 1 2 3 push进inStack 为 3 2 1 在pop到outStack栈中 为1 2 3 和输入数据顺序一样、
复杂度分析
插入元素
时间复杂度:O(1) 一次push操作
空间复杂度:O(1) 一个存储空间
删除元素
时间复杂度:O(n) 数据从inStack到OutStack栈 loop一次。
空间复杂度:O(n)
/*
* 用两个栈,一个栈push数据 另一个栈pop数据
输入数据 1 2 3 push进inStack 为 3 2 1 在pop到outStack栈中 为1 2 3 和输入数据顺序一样、
*/
Stack<Integer> in;
Stack<Integer> out;
public CQueue() {
in = new Stack();
out = new Stack();
}
public void appendTail(int value) {
in.push(value);
}
public int deleteHead() {
if(out.empty()){
while(!in.empty()){
out.push(in.pop());;
}
}
if(out.empty()){
return -1;
}
return out.pop();
}