- 堆栈:具有一定操作约束的线性表,只能在一端作插入、删除
- 具有后入先出的特性(Last In First Out)
- 分顺序存储结构、链式存储结构两种形式
堆栈的顺序存储结构
通常由一个一维数组和一个栈顶元素变量组成
图解如下:
形式一:构建结构体
0、结构初始化
#define MaxSize ###
struct StackNode {
ElementType Data[MaxSize];
int top;
};
1、建立空栈
struct StackNode* createStack() {
struct StackNode* s=malloc(sizeof(struct StackNode));
s->top=-1;
return s;
}
2、push操作
void push(struct StackNode* s,ElementType x) {
if (s->top!=MaxSize-1)
return s->Data[++(s->top)]=x;
else
return NULL;
}
3、pop操作
ElementType pop(struct StackNode* s) {
if (s->top!=-1)
return s->Data[(s->top)--];
else
return NULL;
}
4、peek操作
ElementType peek(struct StackNode* s) {
if (s->top!=-1)
return s->Data[s->top];
else
return NULL;
}
形式二:简易模式
也可以省略结构体部分,直接声明数组,在函数中构建堆栈
//举例020 Valid Parentheses 这一题
bool isValid(char* s) {
int len=strlen(s);
if (*s==NULL) return false;
if (len%2==1) return false;
char stack[1000000];
int top=-1;
while (*s) {
char c=*s;
if (c=='('||c=='{'||c=='[') {
stack[++top]=c;
}
else {
if (c==')'&&top>=0&&stack[top]=='(')
top--;
else if (c==']'&&top>=0&&stack[top]=='[')
top--;
else if (c=='}'&&top>=0&&stack[top]=='{')
top--;
}
s++;
}
return top==-1;
}