用两个栈实现队列-C++
分享一个大牛的人工智能教程。零基础通俗易懂风趣幽默希望你也加入到人工智能的队伍中来请轻击人工智能教程https://www.captainai.net/troubleshooter// 面试题9用两个栈实现队列 // 题目用两个栈实现一个队列。队列的声明如下请实现它的两个函数appendTail // 和deleteHead分别完成在队列尾部插入结点和在队列头部删除结点的功能。 #include stack #include exception #include stdexcept using namespace std; template typename T class CQueue { public: CQueue(void); ~CQueue(void); // 在队列末尾添加一个结点 void appendTail(const T node); // 删除队列的头结点 T deleteHead(); private: stackT stack1; stackT stack2; }; template typename T CQueueT::CQueue(void) { } template typename T CQueueT::~CQueue(void) { } template typename T void CQueueT::appendTail(const T element) { stack1.push(element); } template typename T T CQueueT::deleteHead() { if (stack2.size() 0) { while (stack1.size() 0) { T data stack1.top(); stack1.pop(); stack2.push(data); } } if (stack2.size() 0) throw new logic_error(queue is empty); T head stack2.top(); stack2.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[]) { CQueuechar 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; } // ------ Output ------ /* Test passed. Test passed. Test passed. Test passed. Test passed. */