Alex_McAvoy

想要成为渔夫的猎手

【栈的定义】

栈(Stack),是只允许在一端进行插入或删除操作的线性表,其中,允许插入、删除的那一端称为栈顶,不允许插入、删除的那一端称为栈底,当线性表中不含元素时,称为空栈

栈具有后进先出(Last In First Out,LIFO)的操作性质,如下图所示,假设某个栈 $S=(a_1,a_2,a_3,a_4,a_5)$ ,其中 $a_1$ 为栈底元素,$a_5$ 为栈顶元素,由于栈只能在栈顶进行插入、删除,故而进栈顺序为:$a_1,a_2,a_3,a_4,a_5$,出栈顺序为:$a_5,a_4,a_3,a_2,a_1$

对于 $n$ 个不同元素,进栈、出栈元素的不同排列个数满足卡特兰(Catalan)数,即:

【栈的存储结构】

栈是一种受限的线性表,类似于线性表,其有顺序存储方式和链式存储方式两种

采用顺序存储方式的栈称为顺序栈,其利用一组地址连续的存储单元存放从栈底到栈顶的数据元素,同时设置一个指针来指示当前栈顶元素位置

利用栈顶位置不变的特性,可以令两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间中间延伸,这样的结构能够更有效地利用存储空间,被称为双端栈

采用链式存储方式的栈称为链栈,通常采用不带头结点的单链表实现,并规定所有的操作都是在单链表表头进行的

感谢您对我的支持,让我继续努力分享有用的技术与知识点!