您的位置:首页 > 其它

两个桟实现队列

2015-08-21 15:33 267 查看


题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
#include <iostream>
#include <stack>

using namespace std;

template<typename T> class CQueue
{
public:
	CQueue(void);
	~CQueue(void);

	void appendTail(const T &node);
	T deleteHead();
private:
	stack<T> s1;
	stack<T> s2;
};

template <typename T> CQueue<T>::CQueue(void)
{
}

template <typename T> CQueue<T>::~CQueue(void)
{
}

template <typename T> void CQueue<T>::appendTail(const T& node)
{
	s1.push(node);
}

template<typename T> T CQueue<T>::deleteHead()
{
	if(s2.size()<=0)
	{
		while(s1.size()>0)
		{
			T node = s1.top();
			s1.pop();
			s2.push(node);
		}
	}

	if(s2.size() == 0)
	{
		throw exception("invalid input");
	}
	T head = s2.top();
	s2.pop();
	return head;
}
void Test(char actual, char expected)
{
    if(actual == expected)
        printf("Test passed.\n");
    else
        printf("Test failed.\n");
}

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

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

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

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

    queue.appendTail('d');
    head = queue.deleteHead();
    Test(head, 'c');

    queue.appendTail('e');
    head = queue.deleteHead();
    Test(head, 'd');

    head = queue.deleteHead();
    Test(head, 'e');

    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: