认识顺序栈
栈(Stack)是只允许在一端进行插入或删除操作的线性表。其特点是他的元素后进先出(Last In First Out (LIFO))。
在实现栈的时候需要设置一个成员用于存放栈顶游标(top)(储存栈顶元素的位置信息),有的把最后一个元素的下标作为栈顶记录。
初始表空的时候可以把top设置为-1或0,两种方法除了代码实现有小许不同并无太大区别,我在下面的代码实现中使用了前者。
当存储的元素超过栈定义的长度,则称为栈溢出(Stackoverflow)。我们需要预防这种情况发生,因此在每次入栈时都应该判断是否达栈满(top ==MaxSize-1)。
定义
typedef struct{
ElemType data[MaxSize];
int top; // 栈顶游标,用于存储栈顶下标
}SqStack;
初始化
// 初始化
void InitStack(SqStack *S){
(*S).top = -1; // 初始化栈顶游标
}
入栈
// 入栈
bool Push(SqStack *S, ElemType e){
if((*S).top == MaxSize-1) return false; // 判断是否栈满
(*S).data[++(*S).top] = e; // 新元素入栈
return true;
}
出栈
// 出栈
bool Pop(SqStack *S, ElemType *e){
if((*S).top == -1) return false; // 判空
*e = (*S).data[(*S).top--]; // 返回弹出的数据
return true;
}