栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
遵循先进后出原则
栈.png
顺序存储栈
物理结构是顺序存储,先开辟一块内存空间,每push一个新元素,栈顶标记top+1,直到开辟的空间被存满。每Pop一个栈顶元素,top-1,下一个元素变成栈顶元素。
1. 结构定义
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OK 1
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
/* 顺序栈结构 */
typedef struct
{
ElemType data[MAXSIZE];
int top; /* 用于栈顶指针 */
}Stack;
2. 代码实现
初始化一个空栈
Status InitStack(Stack *S)
{
S->top = -1;
return OK;
}
清空栈(置空)
Status ClearStack(Stack *S)
{
S->top = -1;
return OK;
}
判断栈是否为空
Status StackIsEmpty(Stack S) {
if (S.top == -1) return TRUE;
else return FALSE;
}
栈的长度
int StackLength(Stack S) {