文章目录

  • ​​1、栈​​
  • ​​1.1 定义​​
  • ​​2、 数据结构​​
  • ​​3、函数实现​​
  • ​​3.1 初始化栈​​
  • ​​3.2 判断栈空​​
  • ​​3.3 入栈​​
  • ​​3.4 出栈​​
  • ​​3.5 获取栈顶元素​​
  • ​​3.6 获取栈长​​
  • ​​4、完整代码​​

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;
}