栈的增删改查
#include<stdio.h>
#include<stdlib.h>
/*
0. 定义栈的数据结构sqStack
*/
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;//栈顶指针
}sqStack;
/*
1.初始化栈
void InitStack(sqStack &s)
注意:为什么此处加引用,因为这里改变了s中的top的值,所以得需要加引用
*/
void InitStack(sqStack &s) {
s.top = -1;//表示栈空
}
/*
2.判断栈是否为空
bool StackEmpty(sqStack s)
*/
bool StackEmpty(sqStack s)
{
if (s.top == -1)
{
return true;
}
else
{
return false;
}
}
/*
3.压栈
bool Push(sqStack &s,ElemType e){
先判断栈是否满
若没有满,则元素进栈
返回成功
}
注意:这里也用引用,原因与初始化的原因是一样的
*/
bool Push(sqStack &s, ElemType e)
{
if (s.top == MaxSize - 1)
{
return false;
}
s.data[++s.top] = e;//元素入栈
return true;
}
/*
4.获取栈顶元素
变量m是用来接收获取的值的
m使用了引用原因是主函数里面的m的值改变了
bool GetElem(sqStack s,ElemType &m)
{
首先判断栈是否为空
若不为空,则拿出栈顶元素,让变量m接收
}
*/
bool GetElem(sqStack s, ElemType &m)
{
//首先判断栈是否为空
if (StackEmpty(s) == -1)
{
return false;
}
// 若不为空,则拿出栈顶元素,让变量m接收
m = s.data[s.top];
return true;
}
/*
5.bool Pop(sqStack &s,ElemType &m)
{
判断栈是否为空
弹出元素
}
*/
bool Pop(sqStack &s, ElemType &m)
{
//判断栈是否为空
if (StackEmpty(s))
return false;
//弹出元素
m = s.data[s.top--];
return true;
}
int main()
{
sqStack s;
bool flag;
ElemType m;
//初始化栈并判断栈是否为空
InitStack(s);
flag = StackEmpty(s);
if (flag)
printf("栈为空\n");
else
printf("栈不为空\n");
//入栈操作
Push(s, 3);
Push(s, 4);
Push(s, 5);
//获取栈顶元素
flag = GetElem(s, m);
if (flag)
printf("获取栈顶元素为%d\n",m);
//弹栈操作
flag = Pop(s, m);
if (flag)
printf("弹出栈的元素%d\n",m);
return 0;
}