一、栈的特点
先进后出
二、代码实现
结构体
#define MaxSize 50
typedef int ElemType;
typedef struct {
ElemType data[MaxSize]; // 定义数组
int top;
}SqStack;
1.初始化栈
// 栈的初始化
void InitStack(SqStack& S) {
S.top = -1;// 代表栈为空
}
2.判断栈是否为空
// 判断栈是否为空
bool StackEmpty(SqStack& S) {
if (-1 == S.top) {
return true;
}
return false;
}
3.入栈
需先判断栈是否栈满,即s.top=数组最大长度-1。
// 入栈
bool Push(SqStack& S, ElemType e) {
// 如果栈满则不能入栈
if (S.top == MaxSize - 1) {
return false;
}
// 否则,入栈
S.top += 1;
S.data[S.top] = e;
return true;
}
4.获取栈顶元素
// 获取栈顶元素
bool GetTop(SqStack S, ElemType& m) {
// 若为空,则返回false
if (StackEmpty(S)) {
return false;
}
// 否则,返回栈顶
m = S.data[S.top];
return true;
}
5.弹出栈顶元素
与获取栈顶元素稍微你不一样的是,弹出后,s.top需-1。
// 弹出栈顶元素
bool Pop(SqStack S, ElemType& m) {
if (StackEmpty(S)) {
return false;
}
m = S.data[S.top];
S.top -= 1;
}
完整代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.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 (-1 == S.top) {
return true;
}
return false;
}
// 入栈
bool Push(SqStack& S, ElemType e) {
// 如果栈满则不能入栈
if (S.top == MaxSize - 1) {
return false;
}
// 否则,入栈
S.top += 1;
S.data[S.top] = e;
return true;
}
// 获取栈顶元素
bool GetTop(SqStack S, ElemType& m) {
// 若为空,则返回false
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];
S.top -= 1;
}
int main() {
SqStack S;
InitStack(S); // 初始化
bool ret;
ret = StackEmpty(S);
if (ret) {
printf("栈为空\n");
}
// 往栈里添加元素,入栈
Push(S, 3);
Push(S, 4);
Push(S, 5);
bool flag;
ElemType m; // 保存栈顶元素
flag = GetTop(S, m);
if (flag) {
printf("栈顶元素为:%d\n",m);
}
// 弹出栈顶元素
flag = Pop(S, m);
if (flag) {
printf("弹出栈顶元素为:%d", m);
}
return 0;
}