金山中学计算机竞赛班教程·数据结构3-1§3栈和队列§3
1栈栈(stack)是一种仅限于在称为栈顶(top)的一端进行插入和删除操作的线性表,另一端则被为栈底(bottom)
不含元素的空表称为空栈
栈的特点:后进先出(LastInFirstOut),简称:LIFO
栈的表示和实现和线性表类似,栈也有两种存储结构
(1).顺序栈顺序栈即采用的顺序存储结构来表示栈,通常采用数组来实现
采用顺序栈受数组空间的约束,有“溢出”的可能,编程前应作空间估算,若有溢出可能,应作溢出判断及相应的处理
在一个程序中,常常会出现同时使用多个栈的情形
为了不因栈上溢而产生错误中断,必须给每个栈预分一个较大的空间,但这并不容易做到,因为栈实际所用的最大空间很难估计;而且各个栈的实际使用量在使用期间是变化的,往往会有这样的情况,即其中一个栈发生上溢,而另一个栈还是空的
设想,若令多个栈共享空间,则将提高空间的使用效率,并减少发生栈上溢的可能
所以,可以采用两个栈共享空间的方法:假设在程序中需设两个栈,并共享一维数组空间
则利用“栈底位置不变”的特性,可将两个栈的栈底分别设在数组空间的两端,然后各自向中间伸展(如图),仅当两个栈的栈顶相遇时才可能发生上溢
(2).链栈采用链式存储结构的栈简称链栈
对于链栈,不含产生单个栈溢出的情况,但要记得回收结点空间(dispose(p)),否则会出现整个空间被占满,new(p)过程无法实现(即无法申请新的结点空间)的情况
出栈入栈栈顶栈底ana1a2⋯⋯栈1栈2栈1底栈1顶栈2顶栈2底金山中学计算机竞赛班教程·数据结构3-2【练习】回文串识别输入一字符串,判断它是否为一回文串
所谓回文串是指去掉其中的空格与标点符号等非字母符号后,从前后两个方向读到的串相同,例如:tenanimalsIslaminanet
(我将十只动物装在网里)输入:一字符串输出:Yes或N