leetcode 232. 用栈实现队列

举报
兔老大 发表于 2021/04/21 23:12:20 2021/04/21
【摘要】 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2);   queue.peek();...

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

push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);  
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false
说明:

你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。

思路:

栈和队列互相模拟


  
  1. class MyQueue {
  2. private Stack<Integer> a;// 输入栈
  3. private Stack<Integer> b;// 输出栈
  4. public MyQueue() {
  5. a = new Stack<>();
  6. b = new Stack<>();
  7. }
  8. public void push(int x) {
  9. a.push(x);
  10. }
  11. public int pop() {
  12. // 如果b栈为空,则将a栈全部弹出并压入b栈中
  13. if(b.isEmpty()){
  14. while(!a.isEmpty()){
  15. b.push(a.pop());
  16. }
  17. }
  18. return b.pop();
  19. }
  20. public int peek() {
  21. if(b.isEmpty()){
  22. while(!a.isEmpty()){
  23. b.push(a.pop());
  24. }
  25. }
  26. return b.peek();
  27. }
  28. public boolean empty() {
  29. return a.isEmpty() && b.isEmpty();
  30. }
  31. }
  32. /**
  33. * Your MyQueue object will be instantiated and called as such:
  34. * MyQueue obj = new MyQueue();
  35. * obj.push(x);
  36. * int param_2 = obj.pop();
  37. * int param_3 = obj.peek();
  38. * boolean param_4 = obj.empty();
  39. */

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104135240

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。