目录
用两个栈实现队列:
思路:
1.stack_in用来压栈。
2.stack_out用来弹栈,由于队列要先进先出,而队列只能先进后出,所以我们要保证stack_out最上面的数据是现有数据中最先进来的,即将stack_in中的元素反转过来(stack_in弹栈进入stack_out)。如果stack_out为空再进行下次压栈,否则顺序会乱。
代码:
package JianZhiOffer;
import java.util.Stack;
public class Day01_1 {
public static void main(String[] args) {
CQueue c=new CQueue();
c.appendTail(1);
c.appendTail(2);
c.appendTail(3);
System.out.println(c.deleteHead());
System.out.println(c.deleteHead());
System.out.println(c.deleteHead());
System.out.println(c.deleteHead());
}
}
class CQueue {
Stack<Integer> stack_in;
Stack<Integer> stack_out;
public CQueue() {
stack_in=new Stack<>();
stack_out=new Stack<>();
}
public void appendTail(int value) {
stack_in.push(value);
}
public int deleteHead() {
if(stack_out.isEmpty()&&stack_in.isEmpty()){
return -1;
}
if(stack_out.isEmpty()){
while(!stack_in.isEmpty()){
stack_out.push(stack_in.pop());
}
}
return stack_out.pop();
}
}