顺序栈的表示:
#define MAX 100
typedef struct
{
SElemtype*top;//栈顶指针
SElemtype*base;//栈底指针
int stacksize;//栈可用最大容量
}SqStack;
图中top - base=2;看似是整数运算,其实是两个指针间位置的相减,得到两个指针间相差多少元素。(前提是这两个指针指向同一个数组)
顺序栈的初始化:
void CreateStack(SqStack* S)//构建空栈
{
S->base = (SElemtype*)malloc(sizeof(SElemtype));//开辟空间
if(!S->base)//开辟失败
return 0;
else
S->base = S->top;//栈底指针等于栈顶指针
S->stacksize = MAX;
reurn 1;
}
求顺序栈的长度
S->base-S->top = length
判断是否为空栈
if(S->base==S->top)
清空顺序栈
if(S->base)S->top=S->base
销毁顺序栈
if(S->base) free(S->base);stacksize=0;S->base = S->top = NULL;
顺序表的入栈:
void push(SqStack*S,Elemtype e)
{
if(S->base-S->top==S->stacksize)//栈满
return 0;
else
*S->top = e;
S->top++;
return 1;
}
顺序栈的出栈:
1.判断是否栈空,若空则出错(下溢)
2.获取栈顶元素e
3.栈顶指针减1
void SqStack &S,SElemType e)//若栈不空,则删除S栈顶的元素,用e返回其值并返回1,否则返回0
{
if(S->base==S->top)
return 0;
else
--(S->top);
e = *(s->top)
return 1;
}