C语言栈:数据结构——栈(C语言版)-CSDN博客
C语言队列:数据结构——队列(C语言版)-CSDN博客
C++栈与队列:【C++初阶学习】第十二弹——stack和queue的介绍和使用-CSDN博客
前言:
目录
一、优先级队列
前面我们已经学习了队列的知识,队列就是先进先出,那么这里的优先级队列是什么呢?
基本概念
常用成员函数
以下是优先级队列的一些常用成员函数:
创建和使用优先级队列
以下是如何创建和使用一个优先级队列的示例:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
// 创建一个存储int类型元素的优先级队列
priority_queue<int> pq;
// 向队列中添加元素
pq.push(10);
pq.push(30);
pq.push(20);
pq.push(5);
pq.push(1);
// 输出队列中的元素,并观察优先级
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
cout << endl;
return 0;
}
运行结果:
创建小根堆
如果你想要创建一个小根堆(优先级最低的元素在顶部),你可以传递std::greater<T>
作为比较函数:
std::priority_queue<int, std::dequeue<int>, std::greater<int>> pq;
二、容器适配器
基本概念
在将容器适配器前,我们首先要搞明白一点, 什么是容器?什么是容器适配器?
在前面我们讲vector、list、string时,我们讲过这些我们在以后讲时是将其作为容器使用,就是说我们用它们来存放数据,哪个用着方便就用哪个,至于说容器适配器其实就是指这个类型可以用多种容器来模拟实现,比如说:
当然,上面这两个类型在底层设计时,使用的并不是vector和list,而是用deque来实现的,那么这个容器又是什么呢,在前面我们就涉及到过,下面就来讲一下
deque容器(了解)
deque本质上是一个双向都可以插入删除的队列,更准确的说我们应该拿它与vector和list做对比,下面我们来看一下deque的接口函数
通过这个图片我们可以看出,其实deque是兼顾vector和list的用法的,有点像是它们两个的集大成者,那么我们为什么不直接学习deque,不去学习vector和list呢?
下面我们可以来看一下deque的底层架构:
下面我们来看一下deque的应用场景:stack和queue的模拟实现
stack和queue的模拟实现
这里不做详细的讲解了,有不懂的可以私信问我
stack
#include<deque>
namespace zda
{
template<class T, class Con = deque<T>>
//template<class T, class Con = vector<T>>
//template<class T, class Con = list<T>>
class stack
{
public:
stack() {}
void push(const T& x) { _c.push_back(x); }
void pop() { _c.pop_back(); }
T& top() { return _c.back(); }
const T& top()const { return _c.back(); }
size_t size()const { return _c.size(); }
bool empty()const { return _c.empty(); }
private:
Con _c;
};
}
queue
#include<deque>
#include <list>
namespace bite
{
template<class T, class Con = deque<T>>
//template<class T, class Con = list<T>>
class queue
{
public:
queue() {}
void push(const T& x) { _c.push_back(x); }
void pop() { _c.pop_front(); }
T& back() { return _c.back(); }
const T& back()const { return _c.back(); }
T& front() { return _c.front(); }
const T& front()const { return _c.front(); }
size_t size()const { return _c.size(); }
bool empty()const { return _c.empty(); }
private:
Con _c;
};
}
三、总结
感谢各位大佬观看,创作不易,还请各位大佬一键三连!!!