怎麼用棧實現隊列?
隊列的特色是:先進先出
能夠用兩個棧實現,將棧A的棧頂元素出棧,再壓入棧B。循壞該動做,直到A棧爲空。這時棧B的棧頂元素就是隊首元素。棧B中元素依次出棧即出隊列。java
import java.util.ArrayList; public class MyQueue { private ArrayList<Integer> in; private ArrayList<Integer> out; public MyQueue() { in = new ArrayList<Integer>(); out = new ArrayList<Integer>(); } public void push(int x) { in.add(x); } public int pop() { if (out.isEmpty()) { int size = in.size(); for (int i = 0; i < size; i++) { int v = in.remove(in.size() - 1); out.add(v); } } return out.remove(out.size() - 1); } public int peek() { if (out.isEmpty()) { int size = in.size(); for (int i = 0; i < size; i++) { int v = in.remove(in.size() - 1); out.add(v); } } return out.get(out.size() - 1); } public boolean empty() { return in.isEmpty() && out.isEmpty(); } }
怎麼用隊列實現棧?
棧的特色是:先進後出
調用隊列的方法,取出隊首元素尾插在隊尾,如此循壞等價於逆序了隊列。這時候的隊首便是棧頂。ide
import java.util.LinkedList; class MyStack { private LinkedList<Integer> queue; /** Initialize your data structure here. */ public MyStack() { queue = new LinkedList<>(); } /** Push element x onto stack. */ public void push(int x) { queue.addLast(x); } /** Removes the element on top of the stack and returns that element. */ public int pop() { int size = queue.size(); for (int i = 0; i < size - 1; i++) { int v = queue.pollFirst(); queue.addLast(v); } return queue.pollFirst(); } /** Get the top element. */ public int top() { int size = queue.size(); for (int i = 0; i < size - 1; i++) { int v = queue.pollFirst(); queue.addLast(v); } int v = queue.pollFirst(); queue.addLast(v); return v; } /** Returns whether the stack is empty. */ public boolean empty() { return queue.isEmpty(); } }