特殊线性表
栈、队列和串是三种特殊的线性表。其中,栈和队列是操作受限制的线性表,串是数据类型受限制的线性表。
栈(stack)
栈的定义
栈是一种特殊的线性表,只允许在一端进行插入和删除操作。允许插入和删除的一端称为栈顶,另一端称为栈底。处于栈顶位置的元素称为栈顶元素。栈中含有元素的个数称为栈长,含有0个数据元素的栈称为空栈。其特点为后进先出或先进后出,因此栈又称为后进先出的线性表。
习惯上,把栈的插入操作称为入栈(或称为进栈、压栈),把栈的删除操作称为出栈(或称为退栈、弹栈)。
栈的基本操作
1->初始化操作initstack(S),其作用是初始化一个空栈S。
2->求栈长操作getlen(S),其作用是返回栈S的元素个数,即栈长。
3->取栈顶元素操作gettop(S,x),其作用是通过x带回栈S的栈顶元素值。
4->入栈操作push(S,x),其作用是将值为x元素压入到栈S中,使x成为新的栈顶元素。
5->出栈操作pop(S,x),其作用是将非空栈的栈顶元素删除,同时将栈顶元素值赋给x,新的栈顶元素为栈S中原栈顶的下一个元素。
6->判栈空操作emptystack(S),其作用是判断栈S是否为空,若栈S为空,则返回1,否则返回0。
7->输出栈操作list(S),其作用是依次输出栈S中的所有元素。
顺序栈
栈的顺序存储结构,即用一段地址连续的存储单元依次存放从栈底到栈顶之间的数据元素,同时利用一个变量记录当前栈顶的位置(下标或指针),称为栈顶指针。
在初始化栈时,栈顶指针值为0,表示空栈;在栈中插入新的元素后,栈顶指针增加1;在栈中删除栈顶元素时,栈顶指针减少1。
顺序栈的类型定义
#define INIZSIZE 100//存储空间的初始分配量
typedef int ElemType;//在实际应用中,根据需要定义所需的数据类型
typedef struct{
int top;//栈顶指针
ElemType *base;//存放元素的动态数组空间
int stacksize;//当前栈空间的大小
}sqstack;
栈在计算机语言处理和将递归算法改为非递归算法等方面起着非常重要的作用。