美文网首页
栈/队列: swordToOffer

栈/队列: swordToOffer

作者: my_passion | 来源:发表于2022-07-18 08:12 被阅读0次

栈/队列

Que7: 用 2 个栈实现队列

实现 
    void push(const T&); 
    T topAndPop();

Que 类:

成员数据: 2 个 std::stack
2个成员函数: 转调 2个 stack 的 memFunc

push: 放 stk1

topAndPop 思想: 1个 elem 想出队, 必须依次经过 stk1 -> stk2

// Queue.h
#pragma once
#include <stack>
#include <exception>

template <typename T> 
class Queue
{
public:
    Queue();
    ~Queue();
    
    void push(const T& elem);

    T topAndPop();

private:
    std::stack<T> stk1;
    std::stack<T> stk2;
};

template <typename T> 
Queue<T>::Queue(){}

template <typename T> 
Queue<T>::~Queue(){}

// push: 放 stk1
template<typename T> 
void Queue<T>::push(const T& elem)
{
    stk1.push(elem);
} 

// topAndPop 思想: 1个 elem 想出队, 必须依次经过 stk1 -> stk2 
template<typename T> 
T Queue<T>::topAndPop()
{
    // (1) 若 stk2 空, 将 stk1 中所有 elem 取出, 放 stk2
    if(stk2.size() <= 0)
    {
        while( stk1.size() > 0 )
        {
            T& data = stk1.top();
            stk2.push(data);
            stk1.pop();
        }
    }

    if(stk2.size() == 0)
        throw new std::exception("queue is empty");
    
    // (2) 从 stk2 取 & pop 
    T head = stk2.top();
    stk2.pop();

    return head;
}
// Queue.cpp
#include "Queue.h"
#include <queue>
// QueueWithTwoStacks.cpp

#include "Queue.h"

void Test(char actual, char expected)
{
    if(actual == expected)
        printf("Test passed.\n");
    else
        printf("Test failed.\n");
}

int main(int argc, char* argv[])
{
    Queue<char> queue;

    queue.push('a');
    queue.push('b');
    queue.push('c');

    char head = queue.topAndPop();
    Test(head, 'a');

    head = queue.topAndPop();
    Test(head, 'b');

    queue.push('d');
    head = queue.topAndPop();
    Test(head, 'c');

    queue.push('e');
    head = queue.topAndPop();
    Test(head, 'd');

    head = queue.topAndPop();
    Test(head, 'e');
}

相关文章

  • 栈/队列: swordToOffer

    栈/队列 Que7: 用 2 个栈实现队列 Que 类: 成员数据: 2 个 std::stack2个成员函数: ...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 栈和队列

    用栈定义队列(出入栈) 用队列定义栈(数据队列和辅助队列)

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • Swift 队列&栈 相关操作

    栈 LIFO(后进先出) 队列 FIFO(先进先出) 队列与栈相互的实现 栈 - 队列实现 队列 - 栈实现 相关...

  • 栈和队列

    栈和队列 本质上是稍加限制的线性表 栈和队列定义 栈顺序栈定义 链栈结点定义 队列顺序队列 链队列链队类型定义 链...

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 栈&队列

    一、栈&队列总结 栈/队列的应用接雨水验证栈序列滑动窗口的最大值 栈/队列的特殊实现用两个栈实现队列用两个队列实现...

  • 算法分析 [BFS、Greedy贪心] 2019-02-18

    队列 和 栈 232. 用栈实现队列 Implement Queue using Stacks双栈,出队列时,将i...

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

网友评论

      本文标题:栈/队列: swordToOffer

      本文链接:https://www.haomeiwen.com/subject/nbilirtx.html