用两个栈实现一个队列算法

栈:后进先出,队列:先进先出。

用两个栈实现一个队列,主要实现队列中的两个函数,appendTail,尾部追加,deleteHead,在头部删除节点,

用了一个模板类,队列的元素可以是任意类型,int,char都可以,其中类模板中构造函数,析构函数,appendTail,deleteHead的声明和实现都要写在.h中,把实现写在.cpp中,会提示这些方法没定义。模板定义挺特殊的。

AnalogQueue.h

#pragma once
#include <stack>
#include <exception>
#include <iostream>

using namespace std;

template <typename T> class AnalogQueue{
    public:
        AnalogQueue();
        ~AnalogQueue();
        void appendTail(const T& node);
        T deleteHead();
    private:
        stack<T> stackOne;
        stack<T> stackTwo;

};

template <typename T> AnalogQueue<T>::AnalogQueue(){

}

template <typename T> AnalogQueue<T>::~AnalogQueue(){

}

template <typename T> void AnalogQueue<T>::appendTail(const T& element){
    stackOne.push(element);
}

//删除时,先把stackOne中元素,一次压入stackTwo,然后弹出stackTwo的头元素。
template <typename T> T AnalogQueue<T>::deleteHead(){
    if(stackTwo.size()<=0){
        while(stackOne.size()>0){
            T& data = stackOne.top();
            stackOne.pop();
            stackTwo.push(data);
        }
    }

    if(stackTwo.size() == 0){
        cout << "queue is null!"<<endl;    
        throw new exception();
    }
    
    T head = stackTwo.top();
    stackTwo.pop();
    
    cout<<"head node:" << head << endl;
    return head;
}


AnalogQueue.cpp

#include "AnalogQueue.h"
#include <exception>
#include <iostream>

using namespace std;

int main(){
    AnalogQueue<char> aQueue;
    aQueue.appendTail('a');
    aQueue.appendTail('b');
    aQueue.appendTail('c');
    aQueue.appendTail('d');

    aQueue.deleteHead();
    aQueue.deleteHead();
    aQueue.deleteHead();
    aQueue.appendTail('e');
    aQueue.appendTail('f');
    aQueue.deleteHead();
    aQueue.deleteHead();
    aQueue.deleteHead();
    aQueue.deleteHead();

    return 0;
}


测试结果:

-PC:~/algorithm$ g++ AnalogQueue.cpp -o AnalogQueue
-PC:~/algorithm$ ./AnalogQueue
head node:a
head node:b
head node:c
head node:d
head node:e
head node:f
queue is null!
terminate called after throwing an instance of 'std::exception*'
Aborted (core dumped)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值