1、栈的定义
栈: 堆栈,堆叠,先进后出(first in last out)
2、栈的基本操作:
元素入栈:
A1是栈底,An+1是栈顶
A1是栈底,An是栈顶
3、顺序存储实现栈
初始化时S.top=-1
栈为空,
typedef struct{
Elemtype data[50];
int top;
}SqStack;
SqStack S;
S.data[++top]=4;
- 元素入栈:
S.data[++S.top]=4
前加加,先做加1,然后再去取下标 - 元素出栈:
x=S.data[S.top--]
x=S.data[S.top];S.top=S.top-1 - 当S.top等于MaxSize-1时,栈满
4、初始化栈–入栈–出栈
步骤:
1、初始化栈
2、判断栈是否为空
3、入栈
3.1判断栈是否满栈
4、获取栈顶元素
5、弹栈
#include <stdio.h>
#include <stdio.h>
#define MaxSize 50
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int top;
} SqStack;
// 初始化栈
void initStack(SqStack &S){
S.top=-1;
}
// 判断栈是否为空
bool stackEmpty(SqStack S){
if(S.top==-1){
return true;
} else{
return false;
}
}
// 入栈
bool Push(SqStack &S, ElemType value){
// 1.判断栈是否满栈
if(S.top==MaxSize-1){
return false;
}
S.data[++S.top]=value; //等价于S.top=S.top+1; S.data[S.top]=value;
return true;
}
// 获取栈顶元素
bool GetElemTop(SqStack S,ElemType &m){
if(stackEmpty(S)){
return false;
}
m=S.data[S.top]; // 拿栈顶元素
return true;
};
// 弹栈
bool Pop(SqStack &S, ElemType &m){
if(stackEmpty(S)){
return false;
}
m=S.data[S.top--]; // 等价于 m=S.data[S.top]; S.top=S.top-1;
return true;
}
int main() {
SqStack S;
initStack(S);
bool flag= stackEmpty(S);
if(flag){
printf("Stack is Empty\n");
}
Push(S,1);
Push(S,2);
Push(S,3);
ElemType m;
bool ret=GetElemTop(S,m);
if(ret){
printf("get top %d\n",m);
}
ret= Pop(S,m);
if(ret){
printf("pop element %d\n",m);
}
return 0;
}