用c++写一个单调队列和单调栈
时间: 2023-03-23 18:02:17 浏览: 230
好的,下面是关于用C语言编写单调队列和单调栈的一些基本思路:
单调队列:
单调队列是一种能够在O(1)时间内完成以下操作的队列:在队尾添加元素、在队首删除元素、查找队列中的最小(或最大)元素。
在C语言中,可以使用数组模拟队列,并通过双端队列的思想来实现单调队列。具体实现时,我们可以使用一个数组来存储队列中的元素,并使用两个指针front和rear分别指向队首和队尾元素。为了实现单调性,我们需要维护一个递增(或递减)的队列,即队列中的元素按照一定的顺序排列。为了实现这个目标,我们可以在插入元素时,从队尾开始遍历队列,将所有比插入元素小的元素都出队,最后将插入元素入队。这样,我们就可以保证队列中的元素是单调递增的。查找最小元素时,只需要返回队首元素即可。
以下是用C语言实现单调队列的基本代码:
```c
#include <stdio.h>
#define MAXSIZE 1000
int queue[MAXSIZE]; // 队列
int front = 0, rear = 0; // 队首和队尾指针
// 判断队列是否为空
int isEmpty() {
return front == rear;
}
// 判断队列是否已满
int isFull() {
return rear == MAXSIZE;
}
// 在队尾添加元素
void enqueue(int x) {
while (rear > front && queue[rear - 1] > x) {
rear--;
}
queue[rear++] = x;
}
// 在队首删除元素
void dequeue() {
if (!isEmpty()) {
front++;
}
}
// 查找队列中的最小元素
int getMin() {
if (!isEmpty()) {
return queue[front];
}
return -1;
}
int main() {
enqueue(3);
enqueue(1);
enqueue(5);
dequeue();
printf("%d\n", getMin());
return 0;
}
```
单调栈:
单调栈是一种能够在O(1)时间内完成以下操作的栈:在栈顶添加元素、在栈顶删除元素、查找栈中的最小(或最大)元素。
与单调队列类似,我们也可以使用数组模拟栈,并通过栈的特性来实现单调栈。为了实现单调性,我们需要维护一个递增(或递减)的栈,即栈中的元素按照一定的顺序排列。为了实现这个目标,我们在插入元素时,从栈顶开始遍历栈,将所有比插入元素小的元素都出栈,最后将
阅读全文