思路:设置两个栈stack1和stack2,stack1实现入队列功能,stack2实现出队列功能。
(1)入队列:入栈stack1
(2)出队列:若stack2不空,则直接弹出stack2中的栈顶元素
若stack2为空,则依次弹出stack1中的元素放入stack2中,再弹出stack2中的栈顶元素
C++代码:
#include "stdafx.h" #include#include using namespace std; template class CQueue { public: CQueue(void); ~CQueue(void); void AddTail(const T &addData); void DeleteHead(T &deleteData); private: stack stack1; stack stack2; }; template CQueue ::CQueue(void) { } template CQueue ::~CQueue(void) { } template void CQueue ::AddTail(const T &addData) { stack1.push(addData); } template void CQueue ::DeleteHead(T &deleteData) { if (stack2.empty()) { while (!stack1.empty()) { T topData = stack1.top(); stack2.push(topData); stack1.pop(); } } if (stack2.empty()) { cout << "队列中无元素!" << endl; } else { deleteData = stack2.top(); stack2.pop(); } } int _tmain(int argc, _TCHAR* argv[]) { CQueue q; for (int i=0; i<6; i++) { q.AddTail(i); } int deleteData = 0; for (int i=0; i<6; i++) { q.DeleteHead(deleteData); cout << deleteData << " "; } cout << endl; q.DeleteHead(deleteData); system("pause"); return 0; }