算法列表 |
初始化一个空栈 |
进栈操作 |
出栈操作 |
判断栈是否为空 |
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
#define ElemType int
typedef struct {
ElemType *base; //栈底指针,栈构造前和销毁后为空
ElemType *top; //栈顶指针,指向栈顶元素的下一位置
int stacksize; //当前分配的栈的存储空间数
}SqStack;
/*
初始化一个空栈
*/
bool InitStack(SqStack &S)
{
S.base = (ElemType *)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
if (!S.base)
return false;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return true;
}
/*
Push 压栈
*/
bool PushStack(SqStack &S,ElemType e)
{
if ((S.top - S.base) >= S.stacksize)
{
S.base = (ElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(ElemType));
if (!S.base)
return false;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return true;
}
/*
Pop 出栈
*/
bool PopStack(SqStack &S, ElemType &e)
{
if (S.base == S.top)//栈空
return false;
e = *--S.top;
return true;
}
/*
判断栈是否为空
*/
bool StackEmpty(SqStack S)
{
if (S.base == S.top)
return true;
else
return false;
}
bool GetTopElement(SqStack S, ElemType &e)
{
if (S.top == S.base)//栈空
return false;
else
e = *(S.top-1);
}