栈的抽象数据类型定义
ADT Stack:
- 数据对象:
D = { a i ∣ a i ∈ E l e m S e t , i = 1 , 2 , . . . , n , n ≥ 0 } D=\{ a_i|a_i \in ElemSet,i=1,2,...,n,n\geq0 \} D={ai∣ai∈ElemSet,i=1,2,...,n,n≥0} - 数据关系:
R 1 = { < a i − 1 , a i > ∣ a i − 1 , a i ∈ D , i = 1 , 2 , . . . , n } 约 定 a n 端 为 栈 顶 , a 1 端 为 栈 底 R_1=\{ <a_{i-1},a_i>|a_{i-1},a_i \in D,i=1,2,...,n \} \\ 约定a_n端为栈顶,a_1端为栈底 R1={<ai−1,ai>∣ai−1,ai∈D,i=1,2,...,n}约定an端为栈顶,a1端为栈底 - 基本操作:包括初始化、进栈、出栈、取栈顶元素等
栈的相关操作
-
初始化操作——InitStack(&S)
操作结果:构造一个空栈S。 -
销毁栈操作——DestroyStack(&S)
初始条件:栈S已存在。
操作结果:栈S被销毁。 -
判断栈S是否为空——StackEmpty(S)
初始条件:栈S已存在。
操作结果:若S为空栈,返回TRUE,否则返回FALSE。 -
求栈的长度——StackLength(S)
初始条件:栈S已存在。
操作结果:返回S的元素个数,即栈的长度。 -
取栈顶元素——GetTop(S,&e)
初始条件:栈S已存在且非空。
操作结果:用e返回S的栈顶元素。 -
栈置空操作——ClearStack(&S)
初始条件:栈S已存在。
操作结果:将S清空为空栈。 -
入栈操作——Push(&S,e)
初始条件:栈S已存在。
操作结果:插入元素e为新的栈顶元素。 -
出栈操作——Pop(&S,&e)
初始条件:栈S已存在且非空。
操作结果:删除S栈顶元素 a n a_n an,并用e返回其值。
由于栈本身就是线性表,所以栈也有顺序存储和链式存储两种实现方式,具体的内容,请参考以下博文,