棧實現隊列解題思路
-
隊列具備的屬性是先進先出,棧具備屬性是先進後出,因此如果要用棧實現隊列,那就需要考慮用兩個棧來實現元素出隊,入隊。
-
這兩個棧中的元素和就是推入進來的所有元素。
棧實現隊列解題代碼
import java.util.Stack;
/**
* @description:
* @author: lilang
* @version:
* @modified By:[email protected]
*/
public class StackToQueue {
private Stack<Integer> stack;
private Stack<Integer> stack2;
public StackToQueue() {
stack = new Stack();
stack2 = new Stack<>();
}
/**
* 添加元素到隊尾
*/
public void push(int x) {
stack.push(x);
}
/**
* 刪除隊頭的元素並返回
*/
public int pop() {
peek();
if (stack2.isEmpty()) {
return -1;
}
return stack2.pop();
}
/**
* 返回隊頭元素
*/
public int peek() {
/**
* 這步判斷尤其重要,這是決定兩個棧的元素個數之和等於推入的所有元素個數之後
*/
if (stack2.isEmpty()) {
while (!stack.isEmpty()) {
stack2.push(stack.pop());
}
}
if (!stack2.isEmpty()) {
return stack2.peek();
}
return -1;
}
/**
* 判斷隊列是否爲空
*/
public boolean empty() {
return stack2.isEmpty() && stack.isEmpty();
}
}
隊列實現棧
該實現方式很簡單,代碼如下:
/**
* @description:
* @author: lilang
* @version:
* @modified By:[email protected]
*/
public class QueueToStack {
private LinkedList<Integer> queue;
public QueueToStack() {
queue = new LinkedList<Integer>();
}
/**
* 添加元素到棧頂
*/
public void push(int x) {
queue.offerLast(x);
}
/**
* 刪除棧頂的元素並返回
*/
public int pop() {
return queue.pollLast();
}
/**
* 返回棧頂元素
*/
public int top() {
return queue.peekLast();
}
/**
* 判斷棧是否爲空
*/
public boolean empty() {
return queue.isEmpty();
}
}