`

Use stack (LIFO) to simulate queue (FIFO)

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2360962

 

Solution

1. Using 2 stacks

1.1. One stack to accept incoming values in FILO manner

1.2. The other stack to reverse the values in first stack, so LIFO+LIFO becomes FIFO for value retrieval

 

2. An example

2.1. Incoming order: (1,2,3)

2.2. Stack 1 storage order(top to bottom): (3,2,1)

2.3. Stack 2 after pushing and popping all values in Stack 1:(top to bottom): (1,2,3)

 

3. One important thing

The reverse of all values in Stack 1 to stack 2 happens only stack 2 is empty!!!

 

package org.fool.java.test;

import java.util.Stack;

public class MyStackQueueTest {
    public static void main(String[] args) throws Exception {
        MyStackQueue<Integer> q = new MyStackQueue<>();
        q.enQueue(1);
        q.enQueue(2);
        q.enQueue(3);
        q.enQueue(4);

        System.out.println(q.deQueue());
        System.out.println(q.deQueue());
        System.out.println(q.deQueue());
        System.out.println(q.deQueue());

        q.enQueue(5);
        q.enQueue(6);
        q.enQueue(7);

        System.out.println(q.deQueue());
        System.out.println(q.deQueue());
        System.out.println(q.deQueue());
    }
}

class MyStackQueue<T> {
    Stack<T> s1 = new Stack<>();
    Stack<T> s2 = new Stack<>();

    public void enQueue(T k) {
        s1.push(k);
    }

    public T deQueue() throws Exception {
        if(s2.isEmpty() && s1.isEmpty()) {  // if no elements at all
            throw new Exception("no elements!");
        } else if(s2.isEmpty()) {   // get all elements in s1 and save to s2
            while (!s1.isEmpty()) {
                s2.push(s1.pop());
            }
        }

        return s2.pop();
    }
}

Console Output


 

Reference

https://www.youtube.com/watch?v=fPHXQP3Flno&list=PLlhDxqlV_-vkak9feCSrnjlrnzzzcopSG&index=31&spfreload=10 

 

  • 大小: 13.7 KB
分享到:
评论

相关推荐

    c++stack_和_queue用法

    ### C++ STL中Stack和Queue的使用详解 #### 一、引言 在C++标准模板库(STL)中,提供了许多高效的容器类,其中包括`stack`和`queue`。这两种容器非常适合处理需要先进后出(FILO, First In Last Out)或先进先出(FIFO,...

    stack-to-queue.rar_empty

    Queue() //构造函数 bool empty() //返回队列是否已空 bool full() //返回队列是否已满 int serve() //出队列,成功返回0,否则返回-1 int append(const string &item) //item进队列,成功返回0,否则返回-1 int ...

    stack_and_queue.cpp

    stack_and_queue.cpp

    stack_and_queue_with_max.cpp

    本源码实现了两个类,一个是带有最大值的栈和一个是带有最大值的队列。栈利用了两个C++的stack,队列利用了C++的queue。

    TIA博途堆栈算法-先进后出LIFO全局FB库文件-GF-stack-LIFO.zip

    总之,TIA博途中的GF_stack_LIFO库文件提供了LIFO原则的堆栈数据结构,为PLC编程带来便利。理解堆栈的工作原理和如何在TIA博途中应用全局FB库,能帮助工程师更好地解决自动化控制领域的各种问题。

    map,list,set,stack,queue,vector等区别和特点1

    本文将深入探讨标题和描述中提到的一些关键集合类型,包括Map、Set、List、Queue、Stack以及它们的特点和用法。 首先,Collection接口是所有集合类型的父接口,它分为两个主要子接口:List和Set。List接口用于存储...

    stack-and-queue-.zip_栈和队列

    栈(Stack)是一种“后进先出”(Last In, First Out,简称LIFO)的数据结构,它的工作原理类似于现实生活中的堆叠物品。栈的主要操作包括压入(Push)和弹出(Pop)。压入操作将元素添加到栈顶,而弹出操作则从栈顶...

    两个stack来模拟实现一个队列

    本篇将详细解释如何使用两个栈(stack)来模拟实现一个队列(queue)的功能。 首先,我们要理解栈和队列的基本特性。栈是一种后进先出(LIFO,Last In First Out)的数据结构,其操作主要包括压入(push)和弹出...

    Stack_Queue_Stack_源码.zip

    在计算机科学中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们在程序设计中扮演着至关重要的角色。本资料“Stack_Queue_Stack_源码.zip”可能包含了一些关于栈和队列的实现源代码,可能是用C++、Java或...

    C++ STL Adaptor stack、queue和vector的使用.doc

    C++ STL Adaptor stack、queue和vector的使用 C++ STL 提供了多种容器类,包括 stack、queue 和vector 等,这些容器类都是基于 Adaptor 模式实现的。下面我们将详细介绍这些容器类的使用方法和常见操作。 Stack ...

    Stack_Queue_Stack_

    栈是一种后进先出(LIFO, Last In First Out)的数据结构,而队列则是一种先进先出(FIFO, First In First Out)的数据结构。 ### 栈(Stack) 栈是一种线性数据结构,它的主要特点是只允许在表的一端进行插入和...

    堆栈Stack, 队列Queue【数据结构和算法入门5】

    堆栈Stack,_队列Queue【数据结构和算法入门5】

    stackqueue.h

    stackqueue.h

    C++中stack,queue,vector的简单用法1

    总结来说,`stack`适用于需要快速访问最近插入的元素且遵循LIFO原则的场景,`queue`适用于需要按照FIFO原则处理元素的场景,而`vector`则适用于需要动态管理数组大小的场景。这三种容器都是C++标准模板库(STL)的一...

    stackqueue

    数据结构实验栈和队列

    数据结构教学课件:Chapter Three Stack & Queue.ppt

    数据结构中的栈(Stack)和队列(Queue)是两种重要的抽象数据类型,它们都是线性表的变体,但有着特殊的操作限制。在Chapter Three Stack & Queue的教学课件中,主要介绍了这两种数据结构的基本概念、操作、存储...

    C++ stack 和 queue 的笔记

    ### C++ 中 Stack (栈) 与 Queue (队列) 的深入解析 #### 一、Stack (栈) 栈是一种线性数据结构,它遵循“后进先出”(Last In First Out, LIFO)的原则。栈的主要应用在于解决具有递归性质的问题,如表达式求值、...

    Praktikum5(Stack dan Queue)_C++_

    在这个“Praktikum5(Stack dan Queue)_C++_”的学习资源中,我们将深入探讨两种重要的数据结构:栈(Stack)和队列(Queue),它们是理解和解决问题的基础工具。 栈是一种后进先出(LIFO,Last In First Out)的...

    palindrome(STACK,QUEUE).cpp

    palindrome(STACK,QUEUE).cpp

Global site tag (gtag.js) - Google Analytics