题目链接:https://leetcode.com/problems/implement-queue-using-stacks/

题目:Implement the following operations of a queue using stacks.

  • push(x) -- Push element x to the back of queue.
  • pop() -- Removes the element from in front of queue.
  • peek() -- Get the front element.
  • empty() -- Return whether the queue is empty.

Notes:

  • You must use only standard operations of a stack -- which means only push
    to top
    peek/pop from topsize,
    and is empty operations 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).
解题思路:题目要求用栈来实现队列,并实现其入队列、出队列、查看队首元素和推断队列是否为空四个操作。大致的思路是:用两个栈来模拟实现队列,栈s1作为存储空间,栈s2作为暂时缓冲区。
入队时:将元素压入s1
出队时:首先推断s2是否为空,如不为空,则直接弹出栈顶元素,假设为空,则将s1的元素逐个"倒入"s2,把最后一个元素弹出并出队。

演示样例代码例如以下:
/**
* 用两个栈模拟实现队列基本操作
* @author 徐剑
* @date 2016-02-25
*
*/
public class Solution
{
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.empty())
{
s2.pop();
} else if (s1.isEmpty())
{
return;
} else
{
while (!s1.isEmpty())
{
int temp = s1.pop();
s2.push(temp);
}
s2.pop();
}
}
// Get the front element.
public int peek()
{
if (!s2.isEmpty())
return s2.pop(); else if (s1.isEmpty())
{
return -1;
} else
{
while (!s1.isEmpty())
{
int temp = s1.pop();
s2.push(temp);
}
return s2.peek();
}
}
// Return whether the queue is empty.
public boolean empty()
{
return s1.isEmpty() && s2.isEmpty();
}
}

最新文章

  1. java自定义注解类
  2. CozyRSS开发记录-中断
  3. Emacs 常用快捷键
  4. Android IOS WebRTC 音视频开发总结(二五)-- webrtc优秀资源汇总
  5. iOS设备的越狱方法
  6. 十七、Java基础---------集合框架之Map
  7. JavaScript函数绑定
  8. iOS 模拟器键盘弹出以及中文输入
  9. 初识Groovy
  10. vim使用指北 ---- Advanced Editing
  11. Multiple View Geometry in Computer Vision Second Edition by Richard Hartley 读书笔记(一)
  12. wkhtmltopdf 将网页生成pdf文件
  13. 黑马程序员_Java基础组成
  14. github上前100的ios项目
  15. 简单的字符串比较题 POJ 1936
  16. 使用postfix在debian上配置邮件服务器
  17. js实现导航菜单栏随着屏幕的滚动进行滚动的效果
  18. windows驱动程序wdf--KMDF大致框架
  19. spring-oauth-server实践:使用授权方式四:client_credentials 模式的客户端和服务端交互
  20. 一张图解释IaaS,PaaS,SaaS

热门文章

  1. BZOJ 2829 凸包
  2. Application、Activity Stack 和 Task的区别
  3. [转]asp.net MVC 常见安全问题及解决方案
  4. 【1】Jdk1.8中的HashMap实现原理
  5. Python--10、进程知识补充
  6. Kotlin实例----android5.0新特性之palette
  7. JS——冒泡排序
  8. CSS——ul(demo)
  9. scp: /xxxx: not a regular file
  10. 关于static关键字的思考