"数据结构第三章栈和队列" 栈是一种特殊的线性表,限定仅能在表尾一端进行插入、删除操作。栈的概念、基本操作、存储结构和应用都是程序设计中的重要内容。 1. 栈的概念 栈是一种限定仅能在表尾一端进行插入、删除操作的线性表(a1, a2, …, ai-1, ai, ai+1, …, an)。栈的特点是后进先出(LIFO),即最后一个进栈的元素一定在栈顶,第一个出栈的元素一定是栈顶元素。栈的结构特征是栈顶、栈底和栈的容量。 2. 栈的基本操作 栈的基本操作包括: * 初始化操作 InitStack(&S): 构造一个空栈 S。 * 销毁栈操作 DestroyStack(&S):销毁一个已存在的栈。 * 置空栈操作 ClearStack(&S):将栈 S 置为空栈。 * 取栈顶元素操作 GetTop(S, &e):取栈顶元素,并用 e 返回。 * 进栈操作 Push(&S, e):元素 e 进栈。 * 退栈操作 Pop(&S, &e):栈顶元素退栈,并用 e 返回。 * 判空操作 StackEmpty(S):若栈 S 为空,则返回 True,否则返回 False。 3. 栈的顺序存储结构 栈的顺序存储结构是利用一组连续的内存单元依次存放自栈底到栈顶的数据元素,栈顶元素的位置由一个称为栈顶指针的变量指示。栈的顺序存储结构也称为顺序栈。 SqStack 类型的变量是结构变量,它的三个域分别是: * base:称为栈底指针,指向栈底位置。 * top:称为栈顶指针,约定栈顶指针指向栈顶元素的下(后面)一个位置。 * stacksize:用于存放当前分配(存放栈元素)的存储空间的大小。 4. 栈的链式存储结构 栈的链式存储结构是利用链表来存储栈元素,每个元素是一个链表结点,链表结点包含数据域和指针域,指针域指向下一个链表结点。 5. 栈在程序设计中的应用 栈在程序设计中的应用非常广泛,例如: * 递归算法的实现:栈可以用来存储递归算法的临时结果和局部变量。 * 表达式求值:栈可以用来存储中缀表达式的操作符和操作数。 * 编译器设计:栈可以用来存储编译器的符号表和语法分析树。 6. 栈的实现 栈的实现可以使用顺序存储结构或链式存储结构,顺序存储结构的实现需要考虑栈的扩容和缩容问题,链式存储结构的实现需要考虑链表结点的分配和释放问题。 7. 栈的特点 栈的特点是后进先出(LIFO),即最后一个进栈的元素一定在栈顶,第一个出栈的元素一定是栈顶元素。栈的特点使得栈在很多应用场景中非常有用。 8. 栈与递归 栈和递归有着紧密的关系,递归算法的实现可以用栈来存储临时结果和局部变量,栈的特点使得递归算法的实现更加简单和高效。 9. 栈的应用举例 栈的应用非常广泛,例如: * 编译器设计:栈可以用来存储编译器的符号表和语法分析树。 * 表达式求值:栈可以用来存储中缀表达式的操作符和操作数。 * 递归算法的实现:栈可以用来存储递归算法的临时结果和局部变量。 栈是一种重要的数据结构,它在程序设计中的应用非常广泛,栈的概念、基本操作、存储结构和应用都是程序设计中的重要内容。
剩余63页未读,继续阅读
- jftian2014-03-24专门是看完了之后才来评价的,内容写的不错。都讲解到位了。谢谢分享!
- 粉丝: 0
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助