Implement Queue using Stacks class MyQueue { Stack<Integer> s1 = new Stack<>(); Stack<Integer> s2 = new Stack<>(); // Push element x to the back of queue. public void push(int x) { s1.push(x); } // Removes the element from in front of queue. public void pop() { if(!s2.isEmpty()) s2.pop(); else { while(!s1.isEmpty()) s2.push(s1.pop()); s2.pop(); } } // Get the front element. public int peek() { if(!s2.isEmpty()) return s2.peek(); else { while(!s1.isEmpty()) s2.push(s1.pop()); return s2.peek(); } } // Return whether the queue is empty. public boolean empty() { return s1.empty() && s2.empty(); } }
Implement Stack using Queues class MyStack { // Push element x onto stack. Queue<Integer> q1 = new LinkedList<Integer>(); Queue<Integer> q2 = new LinkedList<Integer>(); public void push(int x) { q1.offer(x); } // Removes the element on top of the stack. public void pop() { while(q1.size()>1) q2.offer(q1.poll()); q1.poll(); Queue<Integer> q = q1; q1 = q2; q2 = q; } // Get the top element. public int top() { while(q1.size()>1) q2.offer(q1.poll()); int x = q1.poll(); q2.offer(x); Queue<Integer> q = q1; q1 = q2; q2 = q; return x; } // Return whether the stack is empty. public boolean empty() { return q1.isEmpty(); } }
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个
NoSuchElementException异常
注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。
JavaScript:
http://www.111cn.net/wy/js-ajax/74924.htm
UNshift(); --> pop()属于Queue先进先出
push();---> pop()属于stack后进先出
push是在末尾添加,而unshift则是在开头添加