劍指offer——面試題9:用兩個棧實現隊列
阿新 • • 發佈:2019-02-17
end with using mes 結點 main std delet alt
#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(QueueWithTwoStacks.cpp‘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; }
1 // 面試題9:用兩個棧實現隊列 2 // 題目:用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數appendTail 3 // 和deleteHead,分別完成在隊列尾部插入結點和在隊列頭部刪除結點的功能。 4 5 #pragma once 6 #include <stack> 7 #include <exception> 8 #include<stdio.h> 9Queue.h#include<stdexcept> 10 11 using namespace std; 12 13 template <typename T> class CQueue 14 { 15 public: 16 CQueue(void); 17 ~CQueue(void); 18 19 // 在隊列末尾添加一個結點 20 void appendTail(const T& node); 21 22 // 刪除隊列的頭結點 23 T deleteHead(); 24 25 private: 26 stack<T> stack1; 27 stack<T> stack2; 28 }; 29 30 template <typename T> CQueue<T>::CQueue(void) 31 { 32 } 33 34 template <typename T> CQueue<T>::~CQueue(void) 35 { 36 } 37 38 template<typename T> void CQueue<T>::appendTail(const T& element) 39 { 40 stack1.push(element); 41 } 42 43 template<typename T> T CQueue<T>::deleteHead() 44 { 45 if(stack2.size()<= 0) 46 { 47 while(stack1.size()>0) 48 { 49 T& data = stack1.top(); 50 stack1.pop(); 51 stack2.push(data); 52 } 53 } 54 55 if(stack2.size() == 0){ 56 std::logic_error ex("queue is empty"); 57 throw std::exception(ex); 58 } 59 60 T head = stack2.top(); 61 stack2.pop(); 62 63 return head; 64 }
劍指offer——面試題9:用兩個棧實現隊列