当前位置 : 主页 > 手机开发 > ROM >

9.18 用队列实现栈 简单

来源:互联网 收集:自由互联 发布时间:2021-06-10
题目: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是push to back, peek

分享图片


 

 

题目:

使用队列实现栈的下列操作:

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、题目还是挺简单的,用的时候就是要注意队列和栈的区别在哪。

上一篇:线程池和进程池
下一篇:Neo4j基础代码
网友评论