对于顺序栈,基本的初始化、入栈出栈代码如下,但执行结果为不正常值,小小问题求解答。
#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) //获取栈顶元素。
{
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--];
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;
}
运行结果如下: