type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)
单链表(静态链表)
使用数组模拟单链表(静态链表),head 为头指针,e 数组为数据,ne 数组为指针。
双链表(静态链表)
使用数组模拟双链表(静态链表),索引 0 为头结点,索引 1 为尾结点,e 数组为数据,l 数组为左指针,r 数组为右指针。
栈
使用数组模拟栈,stk 数组为数据,tt 既指示元素个数也作为指针指示数组下标。
队列
使用数组模拟队列,q 数组为数据,hh 作为指针指向对头,tt 作为指针指向队尾。
单调栈
在数组模拟栈的基础上,每次插入数据前将比待插入数据大的元素弹出,一直弹栈到栈顶元素小于待插入数据或栈为空。
应用:求输入的数左边第一个比它小的数。
单调队列
在数组模拟队列的基础上,每次插入数据前将队尾比待插入数据大(小)的元素弹出,一直弹栈到队尾元素小于(大于)待插入数据或队列为空。
应用:滑动窗口求最小(最大)值。
栈的应用——表达式求值
“表达式求值”问题,两个核心关键点:
- 双栈,一个操作数栈(num),一个运算符栈(op);
- 运算符优先级,栈顶运算符,和,即将入栈的运算符的优先级比较:
- 如果栈顶的运算符优先级低,新运算符直接入栈。
- 如果栈顶的运算符优先级高,先出栈计算,新运算符再入栈。