oral_quiz->#俩stack实现queue#

Queue.h:
#include <stdio.h>
#include <stack>
#include <exception>
using namespace std;

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

	void appendTail(const T& node);
	T deleteHead();

private:
	stack<T> stack1;
	stack<T> stack2;
};

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

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

template<typename T> T CQueue<T>::deleteHead() {
	if(stack2.empty()) {
		while(!stack1.empty()) {
			T& data = stack1.top();
			stack1.pop();
			stack2.push(data);
		}
	}

	if(stack2.empty()) {
		throw std::exception();
	}

	T head = stack2.top();
	stack2.pop();

	return head;
}



#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[]) {
	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('e');
	queue.appendTail('f');
	queue.appendTail('g');

	Test(queue.deleteHead(), 'c');
	Test(queue.deleteHead(), 'e');
	Test(queue.deleteHead(), 'f');

	return 0;
}




你可能感兴趣的:(Queue,stack)