题目:
使用队列实现栈的下列操作:
push(x) -- 元素 x 入栈
pop() -- 移除栈顶元素
top() -- 获取栈顶元素
empty() -- 返回栈是否为空
注意:
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
代码:
1 class MyStack { 2 3 /** Initialize your data structure here. */ 4 private Queue<Integer> queue; 5 public MyStack() { 6 queue = new LinkedList<>(); 7 } 8 9 /** Push element x onto stack. */ 10 public void push(int x) { 11 queue.offer(x); 12 } 13 14 /** Removes the element on top of the stack and returns that element. */ 15 public int pop() { 16 if(queue.peek() != null){ 17 int save = Integer.MAX_VALUE; 18 int i = 0; 19 int size = queue.size(); 20 for(; i < size; i++){ 21 save = queue.poll(); 22 if(i < (size - 1)){ 23 queue.offer(save); 24 } 25 } 26 return save; 27 } 28 else throw new RuntimeException(); 29 } 30 31 /** Get the top element. */ 32 public int top() { 33 if(queue.peek() != null){ 34 int top = this.pop(); 35 queue.offer(top); 36 return top; 37 } 38 else throw new RuntimeException(); 39 } 40 41 /** Returns whether the stack is empty. */ 42 public boolean empty() { 43 return queue.isEmpty(); 44 } 45 } 46 47 /** 48 * Your MyStack object will be instantiated and called as such: 49 * MyStack obj = new MyStack(); 50 * obj.push(x); 51 * int param_2 = obj.pop(); 52 * int param_3 = obj.top(); 53 * boolean param_4 = obj.empty(); 54 */
心得:
1、在Java编程中,Queue的实现都是用LinkedList的 ;
1 Queue queue=new LinkedList();
2、Queue的一些用法:
·add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
·remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
·element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
·offer 添加一个元素并返回true 如果队列已满,则返回false
·poll 移除并返问队列头部的元素 如果队列为空,则返回null
·peek 返回队列头部的元素 如果队列为空,则返回null
·put 添加一个元素 如果队列满,则阻塞
·take 移除并返回队列头部的元素 如果队列为空,则阻塞
3、题目还是挺简单的,用的时候就是要注意队列和栈的区别在哪。