一、基本概念
栈是一个特殊的线性表,只能在一端操作;
栈顶(top):允许操作的一端
空栈:不含任何数据元素的栈;top = -1;
栈中有一个元素时,top = 0
性质:先进后出,后进先出
二、栈的基本操作
int StackInit(Stack **s)
{
(*s) = (Stack *)malloc(sizeof(Stack) * 1); //分配一个结构体,用于保存栈的信息
if(NULL == (*s))
{
return FAILURE;
}
(*s)->top = -1; //空栈,栈顶为-1
(*s)->data = (ElemType *)malloc(sizeof(ElemType) * SIZE); //为栈分配空间
if (NULL == (*s)->data)
{
return FAILURE;
}
return SUCCESS;
}
int StackEmpty(Stack *s)
{
return (s->top == -1) ? TRUE : FALSE;
}
int push(Stack *s, ElemType e)
{
if (NULL == s || s->top == 9) //入参判断
{
return FAILURE;
}
//top 相当于数组下标
s->data[s->top + 1] = e; //进栈
s->top++;
return SUCCESS;
}
int GetTop(Stack *s)
{
if (s->top == -1)
{
return FAILURE;
}
return s->data[s->top];
}
int pop(Stack *s)
{
if (s->top == -1)
{
return FAILURE;
}
s->top--;
return SUCCESS;
}
int StackClear(Stack *s)
{
if (NULL == s)
{
return FAILURE;
}
s->top = -1;
return SUCCESS;
}
int StackDestroy(Stack **s)
{
if (s == NULL || *s == NULL)
{
return FAILURE;
}
free((*s)->data);
free(*s);
(*s) = NULL;
return SUCCESS;
}