91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++利用兩個棧實現隊列的方法

發布時間:2020-08-23 20:16:40 來源:腳本之家 閱讀:216 作者:alxe_made 欄目:編程語言

1. 基礎

隊列:先進先出,即插入數據在隊尾進行,刪除數據在隊頭進行;

棧:后進先出,即插入與刪除數據均在棧頂進行。

2. 思路

兩個棧實現一個隊列的思想:用pushStack棧作為push數據的棧,用popStack棧作為pop數據的棧。

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

C++利用兩個棧實現隊列的方法

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. 參考文獻

  • 用兩個棧實現一個隊列——我作為面試官的小結
  • C++之用兩個棧實現一個隊列

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐至县| 潜江市| 井冈山市| 苗栗县| 逊克县| 勃利县| 临湘市| 砀山县| 河北省| 思南县| 巨野县| 竹山县| 井陉县| 鹤壁市| 赣榆县| 海城市| 天峻县| 大庆市| 自贡市| 渭南市| 望奎县| 如东县| 公安县| 泌阳县| 新化县| 天等县| 皮山县| 漳浦县| 巴林左旗| 如皋市| 武强县| 桓仁| 浠水县| 西乌珠穆沁旗| 沙坪坝区| 曲沃县| 察雅县| 荆门市| 鲜城| 青海省| 将乐县|