栈的定义:栈,也称为堆栈,它是一种特殊的线性表,只允许在表的一端进行插入和删除操作。允许进行插入和删除的一端称为栈顶,另一端为栈底。栈顶是动态变化的,它由一个称为栈顶指针(top)的变量指示。当表中没有元素时,称为空栈。
栈的顺序存储结构:
#define StackSize 100
typedef struct
{
DataType stack[StackSize];
int top;
}SeqStack;
顺序栈的基本运算:
(1)栈的初始化操作。
void InitStack(SeqStack *S)
/*将栈初始化为空栈只需要把栈顶指针top置为0*/
{
S->top=0;
}
(2)判断栈是否为空。
int StackEmpty(SeqStack S)
{
if (S.top==0)
{
return 1;
}
return 0;
}
(3)取栈顶元素操作。
int GetTop(SeqStack S,DataType *e)
{
if (S.top<=0)
{
printf("栈已经空");
return 0;
}
else
{
*e=S.stack[S.top-1];
return 1;
}
}
(4)进栈操作。
int PushStack(SeqStack *S,DataType e)
{
if (S.top>=StackSize)
{
printf("栈已经满");
return 0;
}
else
{
S->stack[S->top]=e;
S->top++;
return 1;
}
}
(5)进栈操作。
int PopStack(SeqStack *S,DataType *e)
{
if (S.top==0)
{
printf("栈已经空");
return 0;
}
else
{
S->top--;
*e=S.stack[S.top];
return 1;
}
}
(6)返回栈的长度。
int StackLength(SeqStack S)
{
return S.top;
}
(7)清空栈的操作。
void ClearStack(SeqStack *S)
{
S->top=0;
}