C++之佇列queue
阿新 • • 發佈:2019-02-19
一、C++佇列Queue類成員函式如下:
back()返回最後一個元素
empty()如果佇列空則返回真
front()返回第一個元素
pop()刪除第一個元素
push()在末尾加入一個元素
size()返回佇列中元素的個數
二、queue 的基本操作舉例如下:
queue入隊,如例:q.push(x); 將x 接到佇列的末端。
queue出隊,如例:q.pop(); 彈出佇列的第一個元素,注意,並不會返回被彈出元素的值。
訪問queue隊首元素,如例:q.front(),即最早被壓入佇列的元素。
訪問queue隊尾元素,如例:q.back(),即最後被壓入佇列的元素。
判斷queue佇列空,如例:q.empty(),當佇列空時,返回true。
訪問佇列中的元素個數,如例:q.size()
三、用兩個佇列實現一個棧
(1)offer2Stack.h
//======================================== //用兩個佇列實現一個棧 //Violet 2018-3-12 //======================================== #pragma once #include <queue> #include<exception> using namespace std; template<typename T> class CStack{ public: CStack(void); ~CStack(void); void appendTop(const T& element); T deleteTop(); private: queue<T> queue1; queue<T> queue2; }; template<typename T> CStack<T>::CStack(void){} template<typename T> CStack<T>::~CStack(void){} template<typename T> void CStack<T>::appendTop(const T& element) { queue1.push(element); } template<typename T> T CStack<T>::deleteTop() { if (queue2.size() <= 0) { while (queue1.size() > 1) { T& data = queue1.front(); queue1.pop(); queue2.push(data); } } if (queue2.size() == 0 && queue1.size()>1)//異常判斷 throw new exception("queue2 is empty"); if (queue1.size() == 1) { T head = queue1.front(); queue1.pop(); return head; } if (queue1.size() <= 0) { while (queue2.size() > 1) { T& data = queue2.front(); queue2.pop(); queue1.push(data); } } if (queue1.size() == 0&& queue2.size()>1) throw new exception("queue1 is empty"); if (queue2.size() == 1) { T head = queue2.front(); queue2.pop(); return head; } }
(2)offer2Stack.cpp
#include "offer2Stack.h" // ====================測試程式碼==================== template<typename T>void Test(T actual, T expected) { if (actual == expected) printf("Test passed.\n"); else printf("Test failed.\n"); } int main(int argc, char* argv[]) { CStack<char> stack1; //CStack<int> stack2; stack1.appendTop('a'); stack1.appendTop('b'); stack1.appendTop('c'); //stack2.appendTop(1); //stack2.appendTop(2); char head = stack1.deleteTop(); //int head2 = stack2.deleteTop(); Test(head, 'c'); //Test(head2, 1); head = stack1.deleteTop(); Test(head, 'b'); stack1.appendTop('d'); head = stack1.deleteTop(); Test(head, 'd'); stack1.appendTop('e'); head = stack1.deleteTop(); Test(head, 'e'); head = stack1.deleteTop(); Test(head, 'a'); return 0; }