您的位置:首页 > 理论基础 > 数据结构算法

数据结构之栈(简单版)

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)表达式求值等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: