手写栈stack(先进后出):
int arr[9];
int top=0;//top指向的是要出去的元素
//每添加一个元素top++;
arr[1]=3;
arr[2]=4;//0号元素不添加;
//取到2号元素
arr[top];
//删去2号元素
top--;
双端队列deque(先进先出):
int arr[9];
int head=0,tail=0;
//每添加一个元素tail++;
arr[1]=3;
tail++;
arr[2]=4;
tail++;//同样的0号元素不赋值 ;
//取队列的首元素(队列先进先出)
arr[head+1];
head++;
//取完head++,保证可以继续让head在队列首元素的前面;
单调队列:
//在“尾部”添加元素x
while (l != r && mq[r] <= x) r--;
mq[++r] = x;
//查询队首元素
if (l != r) printf("%d\n", mq[l+1]);
else printf("-1\n");
//弹出队首元素
if (l != r) l++;
单调栈:
//在“尾部”添加元素
while (r != 0 || ms[r] <= x) r--;
ms[++r] = x;
//查询栈顶元素
if (r != 0) printf("%d\n", ms[r]);
else printf("-1");