(5)数据结构-栈顺序存储
原创
©著作权归作者所有:来自51CTO博客作者mb5dbc2345bf8de的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
- 3.1 初始化栈
- 3.2 判断栈空
- 3.3 入栈
- 3.4 出栈
- 3.5 获取栈顶元素
- 3.6 获取栈长
1、栈
1.1 定义
先进先出的受限制的线性表。
- 栈顶指针:S.top,初始值为-1,栈顶元素S.data[S.top];
- 进栈操作:栈不满时,栈顶指针增一再入栈;
- 出栈操作:栈不空时,先出栈,栈顶指针再减一
- 栈空条件:S.top == -1
- 栈满条件:S.top == MaxSize -1
- 栈长:S.top+1
2、 数据结构
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
3、函数实现
SqStack InitStack(SqStack &S);
bool Empty(SqStack S);
bool Push(SqStack &S, ElemType x);
bool Pop(SqStack &S, int &x);
ElemType GetTop(SqStack S);
int Getlength(SqStack S);
3.1 初始化栈
SqStack InitStack(SqStack &S){
S.top = -1;
}
3.2 判断栈空
bool Empty(SqStack S){
return S.top == -1;
}
3.3 入栈
bool Push(SqStack &S, ElemType x){
if (S.top == MaxSize-1){
return false;
}
S.data[++S.top] = x;
return true;
}
3.4 出栈
bool Pop(SqStack &S, int &x){
if(S.top == -1){
return false;
}
x = S.data[S.top];
S.top--;
}
3.5 获取栈顶元素
ElemType GetTop(SqStack S){
return S.data[S.top];
}
3.6 获取栈长
int Getlength(SqStack S){
return S.top+1;
}
4、完整代码
#include<iostream>
#define MaxSize 50
using namespace std;
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
SqStack InitStack(SqStack &S);
bool Empty(SqStack S);
bool Push(SqStack &S, ElemType x);
bool Pop(SqStack &S, int &x);
int Getlength(SqStack S);
ElemType GetTop(SqStack S);
int main(){
cout << "Initiate the S" << endl;
SqStack S = InitStack(S);
if(Push(S,3)){
cout << GetTop(S) << endl;
}
Push(S,5);
cout << GetTop(S) << endl;
int x;
if(Pop(S, x)){
cout << GetTop(S) << endl;
cout << x << endl;
}
if(Empty(S)){
cout << "S is empty" << endl;
}else{
cout << "S is not empty" << endl;
}
cout << "length of S is :" << Getlength(S);
return 0;
}
SqStack InitStack(SqStack &S){
S.top = -1;
}
bool Push(SqStack &S, ElemType x){
if (S.top == MaxSize-1){
return false;
}
S.data[++S.top] = x;
return true;
}
ElemType GetTop(SqStack S){
return S.data[S.top];
}
bool Pop(SqStack &S, int &x){
if(S.top == -1){
return false;
}
x = S.data[S.top];
S.top--;
}
bool Empty(SqStack S){
return S.top == -1;
}
int Getlength(SqStack S){
return S.top+1;
}