用两个栈实现队列

来源:互联网 发布:虚拟机ubuntu如何分区 编辑:程序博客网 时间:2024/06/09 20:34

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

代码:

#include <iostream>#include <stack>#include <exception>using namespace std;template<typename T> class CQueue{public:    CQueue();    ~CQueue();    void appendTail(const T& node);    T deleteHead();private:    stack<T> stack1;    stack<T> stack2;};template <typename T> CQueue<T>::CQueue(){}template <typename T> CQueue<T>::~CQueue(){}template<typename T> void CQueue<T>::appendTail(const T& node){    stack1.push(node);    cout << "插入成功" << endl;}template<typename T> T CQueue<T>::deleteHead(){    if (stack2.size() <= 0)    {        while (stack1.size() > 0)        {            T& data = stack1.top();            stack1.pop();            stack2.push(data);        }    }    if (stack2.size() == 0)    {        cout << "删除失败" << endl;        return -1;  //这里可以抛出异常    }    T head = stack2.top();    stack2.pop();    cout << "删除成功" << endl;    return head;}int main(){    CQueue<int> q;    q.appendTail(10);    q.appendTail(20);    q.deleteHead();    q.deleteHead();    q.deleteHead();     system("pause");    return 0;}

测试:

这里写图片描述

0 0
原创粉丝点击