当前位置: 代码迷 >> 综合 >> 算法025:用两个栈实现队列,支持队列的基本操作(add、poll、peek)
  详细解决方案

算法025:用两个栈实现队列,支持队列的基本操作(add、poll、peek)

热度:69   发布时间:2024-03-08 13:48:35.0
题目:
用两个栈实现队列,支持队列的基本操作(add、poll、peek)。
add:添加
poll:头部弹出(且删除)
peek:查看首元素思路:
使用两个栈,分别为 StackPush 和 StackPop
1. 数据1,2,3,4,5,线一次压入StackPush,从定到底:5,4,3,2,1,,
2. 然后一到手进入StackPop 就实现了queue:1,2,3,4,5,先进先出

在这里插入图片描述

1.代码如下TwoStacksQueue.java和TwoStacksQueueTest.java:

package com.yuhl.right.TwoStacksQueue;import com.sun.java.accessibility.util.TopLevelWindowListener;import java.util.Stack;/*** @author yuhl* @Date 2020/10/26 19:27* @Classname TwoStacksQueue* @Description 用两个栈实现队列,支持队列的基本操作(add、poll、peek)。* add:添加* poll:头部弹出(且删除)* peek:查看首元素* 使用两个栈,分别为 StackPush 和 StackPop** 1.数据1,2,3,4,5,线一次压入StackPush,从定到底:5,4,3,2,1,,然后一到手进入StackPop 就实现了queue:1,2,3,4,5,先进先出**/
public class TwoStacksQueue {
    public Stack<Integer> stackPush;public Stack<Integer> stackPop;public TwoStacksQueue() {
    stackPush = new Stack<Integer>();stackPop = new Stack<Integer>();}// push 栈向 pop 栈倒入数据private void pushToPop() {
    if (stackPop.empty()) {
    while (!stackPush.empty()) {
    stackPop.push(stackPush.pop());}}}public void add(int pushInt) {
    stackPush.push(pushInt);pushToPop();}public int poll() {
    if (stackPop.empty() && stackPush.empty()) {
    throw new RuntimeException("Queue is empty!");}pushToPop();return stackPop.pop();}public int peek() {
    if (stackPop.empty() && stackPush.empty()) {
    throw new RuntimeException("Queue is empty!");}pushToPop();return stackPop.peek();}
}/*** 测试类*/
class TwoStacksQueueTest{
    public static void main(String[] args) {
    TwoStacksQueue twoStacksQueue = new TwoStacksQueue();//add 方法twoStacksQueue.add(1);twoStacksQueue.add(2);twoStacksQueue.add(3);twoStacksQueue.add(4);twoStacksQueue.add(5);//poll方法int poll = twoStacksQueue.poll();System.out.println(poll);//peek 查看首元素int peek = twoStacksQueue.peek();System.out.println(peek);}
}

2.执行结果:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" 
1
2
  相关解决方案