栈(stack)是一个特殊的线性表,是限定在一端(通常是表尾)进行插入和删除操作的线性表
表尾称为栈顶,表头称为栈底(Base),基本操作为PUSH(入栈),POP(出栈).
特点是**LIFO(Last In First out)后进先出,**在进行PUSH和POP操作的时候也是要这个模式进行访问。
对于顺序栈而言,栈的存储方式与一般线性表的顺序存储结构完全相同,利用一组地址连续的存储单元一次存放自栈底到栈顶的数据元素,栈底一般在地地址端,附设top指针,指示栈顶元素在顺序栈的位置,另设base指针,指示栈底元素在顺序栈中的位置。
但是,为了方便操作,通常top指示真正的栈顶元素之上的下标地址,用stacksize来指示栈课使用的最大容量。
空栈的标志是base==top也就是栈顶和栈底重合,不存储任何数据。
栈满的标志是top-base==stacksize
上溢(overflow):栈已经满,又要压入元素
下溢(underflow):栈已经空,又要弹出元素
上溢是一种错误,使问题的处理无法进行,而下溢一般认为是一种结束条件,也就是问题的处理结束