栈应用题

栈应用题

1.顺序栈

顺序栈的图像

特别注意:top指针的初值!

image-20220729163738618

栈的顺序存储类型描述
1
2
3
4
5
#define MaxSize 50										//定义栈中元素的最大个数
typedef struct{
Elemtype data[MaxSize]; //存放栈中元素
int top; //栈顶指针
}SqStack;
初始化
1
2
3
void InitStack(SqStack &S){
S.top=-1 //初始化栈顶指针
}
判栈空
1
2
3
4
5
6
bool StackEmpty(SqStack &S){
if(S.top == -1) //栈空
return true;
else //不空
return false;
}
进栈
1
2
3
4
5
6
7
bool Push(SqStack &S,Elemtype x){
if(S.top == MaxSize-1) //栈满,报错
return false;
else
S.data[++S.top]=x; //指针先加1,再入栈
return true;
}
出栈
1
2
3
4
5
6
7
bool Pop(SqStack &S,Elemtype &x){
if(S.top ==-1) //栈空,报错
return false;
else
x=S.data[S.top--]; //先入栈,指针再减1
return true;
}
读栈顶元素
1
2
3
4
5
6
7
bool GetTop(SqStack &S,Elemtype &x){
if(S.top == -1) //栈空,报错
return false;
else
x = S.data[S.top]; //x记录栈顶元素
return true;
}

2.共享栈

特别注意:top0指针和top1指针的初始化的问题!

image-20220729165150586

3.链栈

链栈的图像

特别注意:此链栈不带头结点,且所有操作都是在表头进行!

image-20220729165541592

栈的链式存储类型描述
1
2
3
4
typedef struct Linknode{
ElemType data; //数据域
struct Linknode *next; //指针域
}*LiStack; //栈类型定义

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!