栈 是限定仅在表尾进行插入和删除操作的线性表。
栈的插入操作,叫进栈、压栈、入栈。
栈的删除操作,叫做出栈、弹栈。
试图从空栈中弹出元素,称为下溢;试图将元素压入满栈中被称为上溢。
栈的顺序存储结构
当栈存在一个元素时,top等于0。
空栈的判定条件定为top等于-1。
存储栈的长度为StackSize,栈顶位置top必须小于StackSize。
栈的进栈、出栈都没有涉及任何循环语句,因此时间复杂度均为O(1)。
两栈共享空间(针对两个具有相同数据类型的栈的一个技巧)
使用这样的数据结构,通常都是当两个栈的空间需求有相反关系,也就是一个栈增长时,另一个栈在缩短的情况。
栈的链式存储结构(链栈)
把栈顶放在单链表的头部,对于链栈来说,是不需要头结点的。
对于空栈来说,链表的原定义是头指针指向空,故top=NULL的时候。
链栈的进栈push和出栈pop没有任何循环操作,时间复杂度均为O(1)。
有n个数顺序依次进栈,出栈序列有Cn种,卡特兰数,这个挺重要的。