棧,佇列,優先順序佇列簡單介面使用
棧,佇列,優先順序佇列簡單介面使用
對於棧要實現成的介面:
棧滿足先入後出的性質
1.stack() 構造棧
2.push() 入棧操作
3.pop() 出棧操作
4.empty() 判空操作
5.size() 判定棧中有效元素的大小
6.top() 獲取棧頂元素
#include <stack>
#include <iostream>
using namespace std;
void test1() {
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
st.push(5);
cout << "棧中有效元素的大小: " << st.size() << endl;
while (!st.empty()) {
cout << st.top() << " ";
st.pop();
}
cout << endl;
}
int main () {
test1();
system("color A");
system ("pause");
return 0;
}
執行結果:
最小棧
解題思路:
1.藉助兩個棧來完成 st 和 Minst
2. 入棧步驟: st始終都是要入棧,Minst要有條件,1>Minst.empty() || x<= Minst.top()
3. 出棧步驟: st始終都要出棧操作, Minst出棧有條件 要有條件1> st.top() == Minst.top()
4. 最後獲得各自的頂部元素
class MinStack {
private:
stack<int> st; //構建一個普通棧
stack<int> Minst; 構建一個最小普通棧
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
//入棧操作
//最小棧中一定存放的是最小的元素
if (Minst.empty() || x <= Minst.top())
Minst.push(x);
st.push(x);//普通棧裡面直接存放元素
}
void pop() {
if (st.top() == Minst.top())
Minst.pop();
st.pop();
}
int top() {
return st.top();
}
int getMin() {
return Minst.top();
}
};
棧的壓入,彈出順序
彈出元素滿足條件: 出棧必須滿足不是空,同時棧頂的元素是不是等於出棧序列的元素
入棧(只要元素沒有放完就一直進行入棧操作)
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
//vector<int>& pushed和vector<int>& popped表示入棧序列和出棧序列
int pushidx = 0;
int popidx = 0;
stack<int> st;
while (pushidx < pushed.size()) {
st.push(pushed[pushidx++]);//入棧(只要元素沒有放完就一直進行入棧操作)
//出棧必須滿足不是空,同時棧頂的元素是不是等於出棧序列的元素
while (!st.empty() && st.top() == popped[popidx]) {
st.pop();
popidx++;
}
}
return st.empty();
}
};
對於佇列要實現成的介面:
佇列滿足先入先出的性質
1.queue() 構造空的佇列
2.push() 入隊操作
3.pop() 出隊操作
4.front() 隊頭
5.back() 隊尾
6.size() 有效元素
7.empty()判空
#include <queue>
#include <iostream>
using namespace std;
void test2() {
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
cout << "佇列長度" << q.size() << endl;
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
cout << endl;
}
int main () {
test2();
system("color A");
system ("pause");
return 0;
}
執行結果:
優先順序佇列簡單介面使用
priority_queue: 底層的實現是通過堆來完成的.
- priority_queue() 構造一個空的優先順序佇列
2.empty() 檢查優先順序佇列是否為空
3.top() 返回佇列中的最(小)大元素,即堆頂元素
4.push() 在優先順序佇列中插入元素
5.刪除優先順序佇列中最大(小)元素,即堆頂元素
1.prioroty_queue簡單介面使用
本身預設優先順序佇列是建大堆
#include<stack>
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
void test1() {
priority_queue<int> pq;
pq.push(10);
pq.push(1);
pq.push(15);
pq.push(20);
pq.push(2);
pq.push(4);
pq.push(19);
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
cout << endl;
}
int main () {
test1();
system("color A");
system ("pause");
return 0;
}
預設建的是大堆
執行結果
本身預設優先順序佇列是建大堆,但是可以通過括號運算子過載的方式進行大小堆的任意切換重建.
2.如何實現括號運算子過載實現大小堆的任意重建.
借用仿函式類别範本:
#include<queue>
#include <stack>
#include <vector>
#include <iostream>
using namespace std;
class S{
public:
S(int a = 0,int b = 0,int c = 0)
:_a(a)
, _b(b)
, _c(c)
{}
bool operator<(const S& c) const{
return _a < c._a;
}
bool operator>(const S& c) const{
return _a > c._a;
}
int _a;
int _b;
int _c;
};
template<class T>
struct Less {
bool operator()(const T& c1, const T& c2) {
return c1 < c2; //這塊會呼叫過載函式
}
};
template<class T>
struct Greater{
bool operator()(const T& c1, const T& c2) {
return c1 > c2;
}
};
ostream& operator<<(ostream& cout, const S& c) {
cout << c._a << "-" << c._b << "-" << c._c << endl;
return cout;
}
void test1() {
priority_queue<S, vector<S>, Greater<S>> pq; //建小堆
//priority_queue<S, vector<S>, Greater<S>> pq; //建小堆
pq.push(S(1, 1, 1));
pq.push(S(2, 1, 1));
pq.push(S(3, 1, 1));
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
cout << endl;
}
int main () {
test1();
system("color A");
system ("pause");
return 0;
}
執行結果:
相關文章
- 封裝優先順序佇列封裝佇列
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- Java優先順序佇列DelayedWorkQueue原理分析Java佇列
- Facebook的分散式優先順序佇列FOQS分散式佇列
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- Python3 執行緒優先順序佇列( Queue)Python執行緒佇列
- 佇列-順序儲存佇列
- RMQ——支援合併和優先順序的訊息佇列MQ佇列
- Python 列表推導及優先順序佇列的實現Python佇列
- 個推基於 Apache Pulsar 的優先順序佇列方案Apache佇列
- 順序迴圈佇列的介面設計佇列
- PHP優先佇列PHP佇列
- 佇列的順序儲存--迴圈佇列的建立佇列
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 1284 海港 普及組 NOIP2016 佇列基礎 簡單列舉 簡單模擬 優先佇列(priority_queue)佇列
- STL 優先佇列 用法佇列
- 堆與優先佇列佇列
- 淺談優先佇列佇列
- 棧與佇列簡介佇列
- 原始碼解析C#中PriorityQueue(優先順序佇列)的實現原始碼C#佇列
- 基於EasyNetQ封裝RabbitMQ,優先順序郵件服務佇列封裝MQ佇列
- 棧-佇列佇列
- 佇列,棧佇列
- 棧、佇列佇列
- 單調棧/單調佇列佇列
- laravel 佇列的簡單使用Laravel佇列
- python中佇列簡單使用Python佇列
- 佇列-單端佇列佇列
- 優先佇列和堆排序佇列排序
- 佇列順序性引發的思考佇列
- 單調棧 和 單調佇列佇列
- 單調棧和單調佇列佇列
- 棧和佇列佇列
- 全網最適合入門的物件導向程式設計教程:41 Python 常用複合資料型別-佇列(FIFO、LIFO、優先順序佇列、雙端佇列和環形佇列)物件程式設計Python資料型別佇列
- 01揹包優先佇列優化佇列優化
- 優先佇列的比較器佇列
- NO GAME NO LIFE(優先佇列/最小堆)GAM佇列
- 單調佇列雙端佇列佇列