博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
126. Implement Queue using Stacks
阅读量:5128 次
发布时间:2019-06-13

本文共 2448 字,大约阅读时间需要 8 分钟。

题目:

Implement the following operations of a queue using stacks.

使用堆栈实现队列的以下操作。

  • push(x) -- Push element x to the back of queue. 将元素x推送到队列的后面。
  • pop() -- Removes the element from in front of queue.从队列前面删除元素。
  • peek() -- Get the front element.获取前面的元素。
  • empty() -- Return whether the queue is empty. 返回队列是否为空。

Example:

MyQueue queue = new MyQueue();queue.push(1);queue.push(2);  queue.peek();  // returns 1queue.pop();   // returns 1queue.empty(); // returns false

Notes:

  • You must use only standard operations of a stack -- which means only push to toppeek/pop from topsize, and is emptyoperations are valid.您必须仅使用一个堆栈的标准操作 - 这意味着只能从顶部切换到顶部,查看/弹出,大小,并且空操作是有效的。
  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.根据您的语言,本机可能不支持堆栈。 您可以使用列表或双端队列(双端队列)来模拟堆栈,只要您只使用堆栈的标准操作即可。
  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).您可以假设所有操作都是有效的(例如,不会在空队列上调用pop或Peek操作)。

解答:

1 class MyQueue { 2      3     private Stack
input; 4 private Stack
output; 5 6 /** Initialize your data structure here. */ 7 public MyQueue() { 8 input = new Stack<>(); 9 output = new Stack<>();10 }11 12 /** Push element x to the back of queue. */13 public void push(int x) {14 input.push(x);15 }16 17 /** Removes the element from in front of queue and returns that element. */18 public int pop() {19 move();20 return output.pop();21 }22 23 /** Get the front element. */24 public int peek() {25 move();26 return output.peek();27 }28 29 /** Returns whether the queue is empty. */30 public boolean empty() {31 return input.isEmpty()&&output.isEmpty();32 }33 34 private void move() {35 if (output.isEmpty())36 while (!input.isEmpty()) 37 output.push(input.pop());38 }39 }40 41 /**42 * Your MyQueue object will be instantiated and called as such:43 * MyQueue obj = new MyQueue();44 * obj.push(x);45 * int param_2 = obj.pop();46 * int param_3 = obj.peek();47 * boolean param_4 = obj.empty();48 */

详解:

1.队列:先进先出。 栈:先进后出

2.对于四个方法,队列的push和empty方法与栈相同,只是栈的pop和peek是针对队尾元素,而队列的pop和peek是针对队首元素

转载于:https://www.cnblogs.com/chanaichao/p/9343791.html

你可能感兴趣的文章
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
人物角色群体攻击判定(一)
查看>>
一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
MySQL(一)
查看>>
企业级应用与互联网应用的区别
查看>>
linux-2.6.38 input子系统(用输入子系统实现按键操作)
查看>>
Mysql 性能优化20个原则(2)
查看>>
steelray project viewer
查看>>
itext jsp页面打印
查看>>
HTTP之报文
查看>>
Perl正则表达式匹配
查看>>