顺序栈的操作(含双栈共享)
程序员文章站
2022-03-10 11:54:37
...
定义:
typedef int SElemType;
typedef struct
{
SElemType data[MAXSIZE];
int top; /* 课程中top(栈顶)指向栈顶元素的下一个位置,即下次压栈时元素所放的位置 */
/* int stacksize; 栈当前可以使用的最大容量 */
}SqStack;
而此处的定义是:top指向栈顶元素在数组中的位置。top必然小于 stacksize;空栈时 top = -1
而且此处的top 不是指针,是数组的序号。
进栈操作:
/* 插入元素e为新的栈顶元素 */
Status Push(SqStack *S, SElemType e)
{
if ( S->top == MAXSIZE - 1 ) return Error;
S->top++;
S->data[S->top] = e;
return OK;
}
出栈操作:
Status Pop(SqStack *S, SElemType *e)
{
if (S->top == -1) return Error;
*e = S->data[S->top];
S->top--;
return OK;
}
=============================================================
双栈共享空间的定义:
typedef struct
{
SElemType data[MAXSIZE];
int top1;
int top2;
} SqDoubleStack;
双栈的压栈操作:
/* 插入元素e 为新的栈顶元素 */
Status Push(SqDoubleStack *S, SElemType e, int stackNumber)
{
if (S->top1 + 1 == S->top2) return Error;
if (stackNumber == 1)
S->data[++S->top1] = e;
else if (stackNumber == 2)
S->data[--S->top2] = e;
return OK;
}
双栈的出栈操作:
/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回Error */
Status Pop(SqDoubleStack *S, SElemType *e, int stackNumber)
{
if (stackNumber == 1)
{
if (S->top1 <= -1) return Error;
*e = S->data[S->top1--];
}
else if (stackNumber == 2)
{
if (S->top2 >= MAXSIZE) return Error;
*e = S->data[S->top2++];
}
return OK;
}