数据结构之栈的基本概念

一 栈的定义

栈是允许在一端进行插入或者删除操作的线性表。它是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作。

栈顶(Top):线性表允许进行插入删除的那一端。

栈底(Botton):固定的,不允许进行插入和删除的另一端。

空栈:不含任何元素的空表。

二 栈结构的解析

假设某个栈S={a1,a2,a3,a4,a5},如图,a1为栈底元素,a5为栈顶元素。由于栈只能从栈顶进行插入和删除操作,进栈次序依次为a1,a2,a3,a4,a5。而出栈的次序为a5,a4,a3,a2,a1。由此可见,栈的操作特性可以明显地概况为后进先出(Last In First Out,LIFO)。

注意:我们每接触到一种新的数据结构类型,都应该分别从其逻辑结构,存储结构和对数据的运算三个方面着手。当然这也是数据结构的三要素。

                                              

三 栈的数学性质

当n个不同元素进栈,出栈元素不同排列的个数为C(n,2n)/(n+1)。该数被称为卡特兰(Catalan)数。

卡特兰数的运算(排列组合):C(n,2n)/(n+1)  =(2n)!/[(n+1)!(2n-n)!]

四 栈的基本操作

  1. InitStack(&S):初始化一个空栈S。
  2. StackEmpty(S):对一个栈进行判空。
  3. Push(&S,x):进栈,数据进栈之前应该先对栈进行判满。在栈未满的时候,使得x成为栈顶元素。
  4. Pop(&S,&x):出栈,数据出栈之前应该先对栈进行判空。若栈为非空的时候,则用x返回栈顶元素。
  5. GetTop(S,&x):读栈元素,若栈S非空,则用x返回栈顶元素。
  6. DestroyStack(&S):销毁栈,并释放栈S占用的存储空间(“&”表示引用调用)。

猜你喜欢

转载自blog.csdn.net/calm_encode/article/details/107580496