演算法題015 -- [Implement Stack using Queues] by java
阿新 • • 發佈:2018-11-22
題目
-
使用佇列實現堆疊的以下操作:
- push(x) - 將元素x推入堆疊。
- pop() - 刪除堆疊頂部的元素。
- top() - 獲取頂部元素。
- empty() - 返回堆疊是否為空。
-
要求:
- 必須僅使用佇列的標準操作 - 這意味著只能從尾部新增,從頭部檢視/彈出;檢視大小和判空操作是有效的。
- 根據使用的語言,原生可能不支援佇列。 只要只使用佇列的標準操作,就可以使用list或deque(雙端佇列)來模擬佇列。
- 您可以假設所有操作都是有效的(例如,在空堆疊上不會呼叫pop或top操作)。
分析
純粹是程式碼功底,以及對佇列和棧的理解…
程式碼
package algorithm015;
import java.util.LinkedList;
import java.util.Queue;
public class Algorithm015 {
public static void main(String[] args) {
QueueStack<Integer> qs = new QueueStack<Integer>();
System.out.println(qs.top());
qs.push(5);
qs.push(-1);
qs.push(2);
qs. push(3);
System.out.println(qs.empty());
System.out.println(qs.top());
System.out.println(qs.pop());
System.out.println(qs.pop());
System.out.println(qs.pop());
System.out.println(qs.pop());
System.out.println(qs.pop());
System.out.println(qs.empty());
}
}
class QueueStack<E> {
Queue<E> queue = new LinkedList<E>();
public E push(E item) {
if(item != null) {
queue.add(item);
for(int i=0; i<queue.size()-1; i++) {
E e = queue.poll();
queue.add(e);
}
}
return item;
}
public E pop() {
return queue.poll();
}
public E top() {
if(empty())
return null;
return queue.element();
}
public boolean empty() {
return queue.isEmpty();
}
}