1. 程式人生 > >劍指offer——面試題9:用兩個棧實現隊列

劍指offer——面試題9:用兩個棧實現隊列

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(
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; }
QueueWithTwoStacks.cpp 技術分享圖片
 1 // 面試題9:用兩個棧實現隊列
 2 // 題目:用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數appendTail
 3 // 和deleteHead,分別完成在隊列尾部插入結點和在隊列頭部刪除結點的功能。
 4 
 5 #pragma once
 6 #include <stack>
 7 #include <exception>
 8 #include<stdio.h>
 9
#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 }
Queue.h

劍指offer——面試題9:用兩個棧實現隊列