目录
1. 若让元素 1,2,3,4,5依次进栈,则出栈次序不可能出现( )这种情况。
2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则 pi 为______
3. 链式栈结点为(data, next),top指向栈顶,若想删除栈顶结点,并将删除结点的值保存到x中,则应执行操作( )。
一、栈
(一)、定义
栈是限定仅在表尾进行操作的线性表。设栈S=(a1,a2,…an),则a1称为栈底元素,an为栈顶元素。
栈中元素按a1,a2,…an的次序进栈,出栈的第一个元素应为栈顶元素。
即栈的修改是按后进先出或先进后出的原则进行的。
“进” =压入=PUSH()
“出” =弹出=POP()
1、定义:
只能在表的一端(栈顶)进行插入和删除运算的线性表
2、逻辑结构:
与线性表相同,仍为一对一关系
3、存储结构:
用顺序栈或链栈存储均可,但以顺序栈更常见
4、运算规则:
只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则
5、实现方式:
关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同
基本操作有入栈、出栈、读栈顶元素值、判断栈满、栈空等
(二)、分类
1、顺序栈
(1)、顺序栈的表示
采用静态一维数组来存储栈。
栈底固定不变的,而栈顶则随着进栈和出栈操作变化的
栈底固定不变的;栈顶则随着进栈和出栈操作而变化,用一个整型变量top(称为栈顶指针)来指示当前栈顶位置。
用top=-1表示栈空的初始状态,每次top指向栈顶在数组中的存储位置。
结点进栈:首先执行top加1,使top指向新的栈顶位置,然后将数据元素保存到栈顶(top所指的当前位置)。
结点出栈:首先把top指向的栈顶元素取出,然后执行top减1,使top指向新的栈顶位置。
(2)、顺序栈初始化
构造一个空栈
class SeqStack:
def __init__(self,max):
# 顺序栈的最大容量
self.max = max
# 当栈为空时,栈顶指针指向-1
self.top = -1
# 存储栈元素的数组
self.stack = [None for i in range(self.max)]