国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++利用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的方法

2020-01-26 13:28:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1. 基礎(chǔ)

隊(duì)列:先進(jìn)先出,即插入數(shù)據(jù)在隊(duì)尾進(jìn)行,刪除數(shù)據(jù)在隊(duì)頭進(jìn)行;

棧:后進(jìn)先出,即插入與刪除數(shù)據(jù)均在棧頂進(jìn)行。

2. 思路

兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的思想:用pushStack棧作為push數(shù)據(jù)的棧,用popStack棧作為pop數(shù)據(jù)的棧。

  1. 只要是對(duì)隊(duì)列進(jìn)行push操作,就將數(shù)據(jù)push入pushStack棧中。
  2. 要實(shí)現(xiàn)隊(duì)列的pop操作,有二點(diǎn)原則,如果popStack為空的話那么我們就將pushStack所有的元素放到popStack中,然后取popStack棧頂元素就是隊(duì)列的隊(duì)頭;如果popStack不為空的話,我們就直接獲取popStack的棧頂元素。
  3. 對(duì)于top操作來(lái)說(shuō)和pop操作類似,只是最后一步不用pop了。


3. 代碼

#include <iostream>#include <stack>#include <exception>template<class T> class MyQueue { public: void push(const T& num); // 入隊(duì)列 T pop(); // 出隊(duì)列 T top(); private: std::stack<T> pushStack; std::stack<T> popStack;};template<typename T>void MyQueue<T>::push(const T& num) { pushStack.push(num);}template<typename T>T MyQueue<T>::pop() { if (pushStack.empty() && popStack.empty()) { // 如果二個(gè)棧都為空 throw std::runtime_error("queue is empty"); } else if (popStack.empty()) { // 如果popStack為空,將pushStack全部元素倒popStack while (!pushStack.empty()) { T data = pushStack.top(); // 獲取pushStack棧頂元素 pushStack.pop(); // 出棧 popStack.push(data); } } T data = popStack.top(); popStack.pop(); return data;}template<typename T>T MyQueue<T>::top() { if (pushStack.empty() && popStack.empty()) { // 如果二個(gè)棧都為空 throw std::runtime_error("queue is empty"); } else if (popStack.empty()) { // 如果popStack為空,將pushStack全部元素倒popStack while (!pushStack.empty()) { T data = pushStack.top(); // 獲取pushStack棧頂元素 pushStack.pop(); // 出棧 popStack.push(data); } } else { // 如果popStack不為空的話直接返回popStack棧頂 T data = popStack.top(); return data; }}int main() { MyQueue<int> myQueue1; myQueue1.push(1); myQueue1.push(2); myQueue1.push(3); myQueue1.push(4); std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; return 0;}

4. 參考文獻(xiàn)

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 甘泉县| 富裕县| 柘荣县| 康定县| 黔西县| 博罗县| 瑞金市| 霍州市| 宾阳县| 苗栗县| 新沂市| 平原县| 武功县| 和顺县| 仪征市| 佛教| 安多县| 留坝县| 岳池县| 象州县| 微山县| 青海省| 义乌市| 合水县| 新乡市| 吕梁市| 衢州市| 青冈县| 喀什市| 通榆县| 谷城县| 象州县| 连城县| 安陆市| 顺义区| 龙州县| 特克斯县| 裕民县| 沂水县| 临桂县|