日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++的STL队列实现栈

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++的STL队列实现栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用C++的隊列STL實現一個棧的數據結構
實現以下四個函數:
1.push(x) : 將元素x壓入棧中
2.pop() : 彈出(移除)棧頂元素
3.top() : 返回棧頂元素
4.empty() : 判斷棧是否是空

隊列的數據結構為先入先出,棧的數據結構為先入后出;
即隊列的元素順序與棧中元素的順序是相反的,所以只需要保證后面插入的元素是在前面的元素之前能夠被彈出即可。

轉換成棧之后的存儲形態,彈出隊列頭部的元素即類似與彈出棧頂元素

這里插入元素時維護一個臨時隊列,即可將原先隊列中的元素順序做一個逆置調整。
實現算法如下(文末有測試代碼):

void push(int x) {queue<int> tmp_queue;tmp_queue.push(x);/*對所有原隊列的元素做順序調整*/while (!data.empty()){tmp_queue.push(data.front());data.pop();}/*將調整后的順序放入原隊列,此時該隊列元素順序已經為棧存儲的元素順序*/while (!tmp_queue.empty()){data.push(tmp_queue.front());tmp_queue.pop();}
}

實現如下:

#include <iostream>
#include <algorithm>
#include <queue>using namespace std;
class My_stack {private:queue<int> data;public:void push(int x) {queue<int> tmp_queue;tmp_queue.push(x);while (!data.empty()){tmp_queue.push(data.front());data.pop();}while (!tmp_queue.empty()){data.push(tmp_queue.front());tmp_queue.pop();}}/*彈出元素,即彈出隊列頭部元素*/int pop() {int x = data.front();data.pop();return x;}/*此時隊列中的元素已經和棧存儲的元素同步了,直接返回對頭元素*/int top() {return data.front();}   bool empty(){return data.empty();}
};int main() {My_stack s;cout << "construct the stack " << endl;int tmp;for (int i = 0;i < 5; ++i) {cin >> tmp;s.push(tmp);}cout << "top " << s.top() << endl;cout << "pop " << s.pop() << endl;cout << "top " << s.top() << endl;s.push(10);cout << "top after push '10' " << s.top() << endl;return 0;
}

輸出如下:

construct the stack 
1 3 4 5 2
top 2
pop 2
top 5
top after push '10' 10

總結

以上是生活随笔為你收集整理的C++的STL队列实现栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。