前言
数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷。
也因如此,它作为博主大二上学期最重要的必修课出现了。由于大家对于上学期C++系列博文的支持,我打算将这门课的笔记也写作系列博文,既用于整理、消化,也用于同各位交流、展示数据结构的美。
此系列文章,将会分成两条主线,一条“数据结构基础”,一条“数据结构拓展”。“数据结构基础”主要以记录课上内容为主,“拓展”则是以课上内容为基础的更加高深的数据结构或相关应用知识。
欢迎关注博主,一起交流、学习、进步,往期的文章将会放在文末。
应用场景及朴素算法
单调队列,顾名可以思议。它是一种队列,同时保持其元素顺序单调,它的使用场景需求通常为:
1.需要维护一个队列结构,支持元素的插入和删除
2.在任意时刻访问队列中元素的最大值
3.各操作的平均复杂度为O(1)
解决问题之前,我们先来定义一下本篇所使用的队的模型,为了便于操作,不妨使用数组和头尾下标来模拟队列:
class Queue{
private:
int l;
int r;
int maxSize;
int * element;
public:
Queue(int maxSize){
this->maxSize = maxSize;
/*当队列为空时,r = l - 1*/
l = 0;
r = -1;
element = new int[maxSize];
}
bool insert(int val){
if(r >= maxSize - 1){
return false;
}
element[++r] = val;
return true;
}
bool pop(){
if(r < l)