顺序栈

顺序栈比较好写,因此我使用它作为我的算法模板

顺序栈的类型描述

1
2
3
4
5
6
7
#define MaxSize 50
typedef int ElemType;

typedef struct{
ElemType data[MaxSize]; // 存放栈中元素
int top; // 栈顶指针
} SqStack;

初始化

1
2
3
4
// 初始化栈
void InitStack(SqStack & s){
s.top = -1; // 初始化栈顶指针
}

判断栈空

1
2
3
4
5
// 判断栈空
bool StackEmpty(SqStack s){
if(s.top == -1) return true;
else return false;
}

入栈

1
2
3
4
5
6
7
8
// 入栈
bool Push(SqStack & s, ElemType x){
// 看栈是否已满,报错
if(s.top == MaxSize - 1) return false;
// 入栈
s.data[++s.top] = x;
return true; // 成功
}

出栈

1
2
3
4
5
6
7
8
// 出栈
bool Pop(SqStack & s, ElemType & x){
// 判断栈是否为空
if(StackEmpty(s)) return false;
// 先出栈,再减
x = s.data[s.top--];
return true;
}

获得栈顶元素

1
2
3
4
5
6
7
8
// 获得栈顶元素
bool GetTop(SqStack s, ElemType & x){
// 空栈,报错
if(StackEmpty(s)) return false;
// 获取栈顶元素
x = s.data[s.top];
return true;
}