链式存储实现栈
顺序表数组实现栈
#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;
}
return false;
}
//入栈
bool Push(SqStack &S,ElemType x)
{
if(S.top==MaxSize-1)//栈满了
{
return false;
}
S.top++;
S.data[S.top]=x;
return true;//返回true,成功
}
//获取栈顶元素
bool GetTop(SqStack S,ElemType& x)
{
if(S.top == -1)
{
return false;//栈为空
}
x = S.data[S.top];
return true;
}
//弹出栈顶元素
bool Pop(SqStack &S,ElemType &x)
{
if(S.top == -1)
{
return false;//栈为空
}
x = S.data[S.top];
S.top--;
return true;
}
int main()
{
SqStack S;//先进后出
bool flag;
ElemType x;//存储拿出来的栈顶元素
InitStack(S);// 初始化
flag = StackEmpty(S);
if(flag)
{
printf("栈是空的\n");
}
Push(S,3);//入栈元素3
Push(S,4);//入栈元素4
Push(S,5);//入栈元素5
flag = GetTop(S,x);//获取栈顶元素,但是S.top值不变
if(flag)
{
printf("获取栈顶元素为 %d\n",x);
}
flag = Pop(S,x);//弹出栈顶元素 ,S要改变
if(flag)
{
printf("弹出栈顶元素为 %d\n",x);
}
return 0;
}