小算法
问题概述:
使用栈完成队列先进先出的功能
思路:
使用两个栈,入栈使用A栈,出栈时将A栈中所有元素全部放入B栈中之后再从B栈中取元素就OK
package algorithm;
public class StackQueue {
MyStack stackA = new MyStack();
MyStack stackB = new MyStack();
public static void main(String[] args) {
StackQueue stackQueue = new StackQueue();
stackQueue.enqueue(1);
stackQueue.enqueue(2);
System.out.println(stackQueue.dequeue());
System.out.println(stackQueue.dequeue());
System.out.println(stackQueue.dequeue());
}
public void enqueue(Integer element){
stackA.push(element);
}
public Integer dequeue(){
if (stackB.isEmpty()){
if (stackA.isEmpty()){
return null;
}
transfer(stackA,stackB);
}
return stackB.pop();
}
public void transfer(MyStack stackA,MyStack stackB){
while (!stackA.isEmpty()){
stackB.push(stackA.pop());
}
}
}
class MyStack{
private class Node{
Integer element;
Node next;
public Node(Integer element, Node next) {
this.element = element;
this.next = next;
}
}
public Node stack;
public int N;
public void push(Integer element){
Node NewNode = new Node(element,null);
NewNode.next = stack.next;
stack.next = NewNode;
}
public Integer pop(){
Integer element = stack.next.element;
stack.next = stack.next.next;
return element;
}
public boolean isEmpty(){
return stack.next==null;
}
public MyStack() {
this.stack = new Node(null,null);
N = 0;
}
}