栈
- 操作受限的线性表---先进后出,后进先出;只能一头进出
- 顺序栈--基于数组; 链式栈--基于链表
- 动态扩容栈--基于动态数组结构
- 栈应用:函数调用栈,表达式求值(操作数栈,运算符栈(比较优先级决定是出栈运算还是入栈)),括号匹配
- 浏览器前进后退功能实现:两个栈A和B,依次打开的链接,依次入栈A,
后退操作--弹出A栈顶链接,入栈B,显示当前A栈顶链接
前进操作--弹出B栈顶链接,入栈A,显示当前A栈顶链接
点开新链接--入栈A,清空栈B,显示当前A栈顶链接
队列
- 操作受限的线性表--先进先出,后进后出;一头进,另一头出
- 顺序队列--基于数组;链式栈--基于链表
- 顺序队列实现--注意队尾无空间时,在入队时执行一次数据搬移
- 循环队列实现--注意确定队空和队满的条件:队空:head==tail 队满:(tail+1)%n=head
- 阻塞队列:队空,读阻塞,队满,写阻塞
- 并发队列:线程安全队列;基于数组的循环队列,利用 CAS 原子操作,可以实现非常高效的并发队列;循环队列比链式队列应用更广泛。