欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++利用兩個棧實現(xiàn)隊列的方法

 更新時間:2019年05月19日 14:12:40   作者:alxe_made  
這篇文章主要給大家介紹了關(guān)于C++利用兩個棧實現(xiàn)隊列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

1. 基礎(chǔ)

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

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

2. 思路

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

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


3. 代碼

#include <iostream>
#include <stack>
#include <exception>

template<class T> class MyQueue {
 public:
 void push(const T& num); // 入隊列
 T pop(); // 出隊列
 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()) { // 如果二個棧都為空
 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()) { // 如果二個棧都為空
 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é)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • C++ float、double判斷是否等于0問題

    C++ float、double判斷是否等于0問題

    這篇文章主要介紹了C++ float、double判斷是否等于0問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • C語言指針基礎(chǔ)詳解

    C語言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語言指針的基礎(chǔ),主要對C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • matlab遺傳算法求解車間調(diào)度問題分析及實現(xiàn)源碼

    matlab遺傳算法求解車間調(diào)度問題分析及實現(xiàn)源碼

    這篇文章主要為大家介紹了matlab遺傳算法求解車間調(diào)度問題解析,文中附含詳細(xì)實現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • QT TCP實現(xiàn)簡單的通信示例

    QT TCP實現(xiàn)簡單的通信示例

    這篇文章主要為大家詳細(xì)介紹了QT TCP簡單的通信示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • VisualStudio2019解決scanf函數(shù)報錯問題

    VisualStudio2019解決scanf函數(shù)報錯問題

    在 Visual Studio 2019 編輯代碼時,前期剛剛接觸到VS編譯器時存在的困惑,當(dāng)用scanf()函數(shù),進(jìn)行輸入時,在運行的時候編譯器會出現(xiàn)警告報錯,本文就來介紹一下解決方法
    2023-08-08
  • 基于Linux系統(tǒng)調(diào)用--getrlimit()與setrlimit()函數(shù)的方法

    基于Linux系統(tǒng)調(diào)用--getrlimit()與setrlimit()函數(shù)的方法

    本篇文章是對在Linux系統(tǒng)中調(diào)用getrlimit()與setrlimit()函數(shù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MacOS下C++使用WebRTC注意事項及問題解決

    MacOS下C++使用WebRTC注意事項及問題解決

    這篇文章主要介紹了MacOS下C++使用WebRTC注意事項,對于iOS/macOS平臺,開啟openh264,去除test,使用一些命令可以輕松解決,下面小編給大家?guī)砹藛栴}及解決方法,需要的朋友可以參考下
    2022-09-09
  • static關(guān)鍵字的作用詳解

    static關(guān)鍵字的作用詳解

    在C語言中,static的字面意思很容易把我們導(dǎo)入歧途,其實它的作用有三條。
    2013-04-04
  • Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    在當(dāng)今計算機應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個完整的示例代碼,需要的朋友可以參考下
    2024-01-01
  • OpenCV實現(xiàn)簡單套索工具

    OpenCV實現(xiàn)簡單套索工具

    這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)簡單套索工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論