目录
栈(stack)
栈(stack),是具有一定操作约束的线性表。其只能在一端(栈顶,Top)做插入、删除操作。
- 插入数据:入栈(Push)
- 删除数据:出栈(Pop)
- 先入后出:Last In First Out(LIFO)
栈的抽象数据类型描述
数据对象集:一个有0或多个元素的线性表。
操作集:
- 生成空栈,其最大长度为MaxSize
- 判断栈是否已满
- 判断栈是否为空
- 将元素压入栈
- 将栈顶元素返回并删除
栈的应用场景
- 函数调用及递归实现(一系列操作的回滚)
- 回溯算法-(走迷宫)
- 深度优先搜索-(表现形式是递归,但实际上就是一种栈)
栈的顺序存储实现
栈的顺序存储结构体,通常由一个数组和一个记录栈顶元素位置的变量组成。
栈的顺序存储实现-入栈
栈的顺序存储实现-出栈
拓展-一个数组实现两个栈
使用一个数组实现两个堆栈,要求最大地利用数组空间。使数组只要有空间,入栈操作就可以成功。
两个栈分别从两端往中间入栈,只要数组还有空间就可以给任一的栈做入栈操作。
栈的链式存储实现
栈的链式存储结构实际上就是一个单链表,叫做链栈。
栈的操作只能在链栈的栈顶操作,如果单向链表的Top指向链表的尾部,我们就额外的需要知道Top前面的一个节点在哪,这样才能操作Top指向的元素。所以为了插入和删除的操作的便利,我们需要将链栈Top指向单向链表的头部。
链栈-栈的链式存储结构
链栈-入栈
链栈-出栈
链栈是由单链表实现,不像栈的线性存储结构是使用数组实现。所以链栈操作时可以先不考虑栈满的情况。