栈
大学生-程序元,开始记录生活
南枫在这里和大家一同进步,一同交流学习
注:代码实现用Visual Studio 2019
#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 x)
{
if (S.top == MaxSize - 1)
{
return false;//栈满了
}
S.data[++S.top] = x;
//S.top的指针先++,然后把数据存入加1之后的位置
return true;//入栈成功
}
//获取栈顶元素,只是获得元素,栈顶指针不变
bool GetTop(SqStack S, ElemType& x)
{
if (StackEmpty(S))
{
return false;
}
x = S.data[S.top];
return true;
}
//弹出栈顶元素,弹出栈之后,元素还在那个位置,只是栈顶指针改变了
bool Pop(SqStack& S, ElemType& x) {
if (StackEmpty(S))//栈为空
{
return false;
}
x = S.data[S.top--];//先拿出数据,然后S.top--
return true;
}
int main()
{
SqStack S;//先进后出 FILO
bool flag;
ElemType m;
InitStack(S);//初始化
flag = StackEmpty(S);
if (flag) {
printf("栈是空的\n");
}
Push(S, 3);//这里是直接写入的,也可以设置为scanf
Push(S, 4);
Push(S, 5);
flag = GetTop(S, m);//获取栈顶元素,但是S.top不变
if (flag) {
printf("获取栈顶元素为 %d\n", m);
}
flag = Pop(S, m);//弹出栈顶元素
if (flag)
{
printf("弹出的栈顶元素为 %d", m);
}
return 0;
}
作者—南枫