初始学习数据结构中的顺序栈(不含链栈),一些简单的笔记供学习。问题和优化建议欢迎提点!
#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 (S.top == -1)
{
return true;
}
else
{
return false;
}
}
bool Push(SqStack &S, ElemType x)//将元素x入栈,并返回是否成功(防止栈满的情况)。因为要改变栈,所以形参要加引用
{
if (S.top == Maxsize - 1) //判断是否栈满?满了则入栈失败
{
return false;
}
S.data[++S.top] = x; //一定要让++在前,即先移动指针,再将元素入栈到指针指的位置
return true;
}
bool GetTop(SqStack S, ElemType &m) //获取栈顶元素。在栈中只有一个top指针无法查找元素,只能靠top指针获取栈顶元素
{
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--]; //--要在后面。因为要先弹出top指针所指的元素,再将top指针移动
return true;
}
int main()
{
SqStack S;
InitStack(S); //初始化栈
Push(S, 1); //元素入栈
Push(S, 2);
Push(S, 3);
bool flag;
flag = StackEmpty(S);
if (flag == true)
{
printf("栈是空的!\n");
}
ElemType m;
flag = GetTop(S, m);
if (flag == true)
{
printf("栈顶元素为:%d\n", m);
}
flag = Pop(S, m);
if (flag)
{
printf("弹出的元素为:%d\n", m);
}
return 0;
}