数据结构之栈(简单版)
2016-01-15 10:01
309 查看
1.1 栈的定义
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:
结论:后进先出(Last In First Out),简称为LIFO(Last In First Out)线性表,因此栈的操作是线性表操作的特例。
栈的基本运算有六种:
构造空栈:InitStack(S)、
判栈空: StackEmpty(S)、返回布尔值true或者false
判栈满: StackFull(S)、返回布尔值true或者false
进栈: Push(S,x)、可形象地理解为压入,这时栈中会多一个元素x
退栈: Pop(S)
、可形象地理解为弹出,弹出后栈中就无此元素了,注意弹出的一定是栈的最外面元素,故不需要指定。
取栈顶元素:StackTop(S),与弹出不同,只是使用栈顶元素的值,该元素仍在栈顶不会弹出。
1.2 栈的顺序存储和链式存储
由于栈也是线性表,因此线性表的存储结构对栈也适用,通常栈有顺序栈和链栈两种存储结构.
顺序栈中有"上溢"和"下溢"的概念。顺序栈好比一个盒子,我们在里头放了一叠书,当我们要用书的话只能从第一本开始拿(你会把盒子翻过来吗?真聪明^^),那么当我们把书本放到这个栈中超过盒子的顶部时就放不下了(叠上去的不算,哼哼),这时就是"上溢","上溢"也就是栈顶指针指出栈的外面,显然是出错了。反之,当栈中已没有书时,我们再去拿,看看没书,把盒子拎起来看看盒底,还是没有,这就是"下溢"。"下溢"本身可以表示栈为空栈。
链栈则没有上溢的限制,它就象是一条一头固定的链子,可以在活动的一头自由地增加链环(结点)而不会溢出。
1.3 栈的应用
1) 数制转换
2)语法词法分析
3)表达式求值等
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:
结论:后进先出(Last In First Out),简称为LIFO(Last In First Out)线性表,因此栈的操作是线性表操作的特例。
栈的基本运算有六种:
构造空栈:InitStack(S)、
判栈空: StackEmpty(S)、返回布尔值true或者false
判栈满: StackFull(S)、返回布尔值true或者false
进栈: Push(S,x)、可形象地理解为压入,这时栈中会多一个元素x
退栈: Pop(S)
、可形象地理解为弹出,弹出后栈中就无此元素了,注意弹出的一定是栈的最外面元素,故不需要指定。
取栈顶元素:StackTop(S),与弹出不同,只是使用栈顶元素的值,该元素仍在栈顶不会弹出。
1.2 栈的顺序存储和链式存储
由于栈也是线性表,因此线性表的存储结构对栈也适用,通常栈有顺序栈和链栈两种存储结构.
顺序栈中有"上溢"和"下溢"的概念。顺序栈好比一个盒子,我们在里头放了一叠书,当我们要用书的话只能从第一本开始拿(你会把盒子翻过来吗?真聪明^^),那么当我们把书本放到这个栈中超过盒子的顶部时就放不下了(叠上去的不算,哼哼),这时就是"上溢","上溢"也就是栈顶指针指出栈的外面,显然是出错了。反之,当栈中已没有书时,我们再去拿,看看没书,把盒子拎起来看看盒底,还是没有,这就是"下溢"。"下溢"本身可以表示栈为空栈。
链栈则没有上溢的限制,它就象是一条一头固定的链子,可以在活动的一头自由地增加链环(结点)而不会溢出。
1.3 栈的应用
1) 数制转换
2)语法词法分析
3)表达式求值等
相关文章推荐
- 18 获取给定的序列的所有排列, 组合
- 学习笔记------数据结构(C语言版) 扩展的线性单链表及归并
- Android开发中高效的数据结构
- 数据结构_6:树:C语言_链式存储
- 优化冒泡排序法
- 数据结构 JAVA描述(十六) 动态查找 B-树 B+树 红黑树
- oracle 数据结构
- 数据结构之递归回溯算法
- 数据结构实验之图论六:村村通公路
- 二叉树中序遍历,非递归,用栈
- 数据结构——链表
- 数据结构_6:树:C语言_顺序存储
- 【Java数据结构】线性表
- 浅谈PHP数据结构之单链表
- 数据结构_6:树:C语言_基本概念
- 算法导论14:树形数据结构——二叉树 2016.1.14
- swift排序算法和数据结构
- 数据结构--堆
- 基础数据结构概念回顾
- 二.学习数据结构之数组