栈的基本概念与实现
线性表是具有相同数据类型的n(n≥0)个数据元素的有限 序列,其中n为表长,当n = 0时线性表是一个空表。若用L命名线性表,则其一般表示为L = (a1, a2, … , ai, ai+1, … , an)
1. 栈的定义(后进先出)
- 逻辑结构:操作受限的线性表,仅允许在栈顶进行插入(进栈)和删除(出栈)操作。
- 栈(Stack)是只允许在一端进行插入或删除操作的线性表
- 特性:后进先出(LIFO,Last In First Out)。
- 关键术语:
- 栈顶:允许操作的一端;栈底:固定端,不允许操作;空栈:不含元素的栈。
2. 基本操作(和线性表对比)
- 初始化(InitStack):创建空栈。
- InitStack(&S):初始化栈。构造一个空栈 S,分配内存空间。
- DestroyStack(&S):销毁栈。销毁并释放栈 S 所占用的内存空间。
InitList(&L):初始化表。构造一个空的线性表L,分配内存空间。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
- 进栈(Push):栈未满时,在栈顶插入元素。
Push(&S,x):进栈,若栈S未满,则将x加入使之成为新栈顶。
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
- 出栈(Pop):栈非空时,删除栈顶元素并返回。
Pop(&S,&x):出栈,若栈S非空,则弹出栈顶元素,并用x返回。
ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
- 获取栈顶元素(GetTop):读取栈顶元素但不删除。
GetTop(S, &x):读栈顶元素。若栈 S 非空,则用 x 返回栈顶元素
- 判空(StackEmpty):判断栈是否为空。
LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。
其他常用操作:
StackEmpty(S):判断一个栈 S 是否为空。若S为空,则返回true,否则返回false。
其他常用操作:
Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
Empty(L):判空操作。若L为空表,则返回true,否则返回false。