栈是受限的线性表,只允许在一端插入和删除。栈的重点操作是入栈和出栈。
入栈栈顶上移,出栈栈顶下移。
下面是用数组实现的顺序栈代码。
#include<stdio.h>
#define MaxSize 10
#define ElemType int
/************************************ 2018年8月11日16点47分 ***********************************/
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
void init(SqStack & S);//初始化
bool StackEmpty(SqStack S);//判空
bool StackFull(SqStack S);//判满
bool Push(SqStack & S, ElemType x);//入栈
bool Pop(SqStack & S ,ElemType & x);//出栈
bool GetTop(SqStack S, ElemType & x);// 获取栈顶元素
bool StackTraverse(SqStack S);//遍历
int main(void)
{
int x;
SqStack S;
init(S);
if(StackEmpty(S))
printf("Stack is empty!\n");
if (Push(S,1))
printf("Push succeed!\n");
Push(S,1);
Push(S,2);
Push(S,3);
if(Pop(S,x))
{
printf("Pop succeed!\n");
printf("The data popped out is %d\n",x);
}
if(GetTop(S,x))
{
printf("Get top succeed!\n");
printf("The top is %d\n",x);
}
if(StackTraverse(S))
{
printf("Traverse succeed!\n");
}
printf("\n======Ending==========\n");
return 0;
}
void init(SqStack & S)
{
S.top = -1;
}
bool StackEmpty(SqStack S)
{
if(S.top == -1)
return true;
else
return false;
}
bool StackFull(SqStack S)
{
if(S.top == MaxSize - 1)
return true;
else
return false;
}
bool Push(SqStack & S, ElemType x)
{
if(StackFull(S))
return false;
S.data[++S.top] = x;
return true;
}
bool Pop(SqStack & S ,ElemType & x)
{
if(StackEmpty(S))
return false;
x = S.data[S.top--];
return true;
}
bool GetTop(SqStack S, ElemType & x)
{
if(StackEmpty(S))
return false;
x = S.data[S.top];
return true;
}
bool StackTraverse(SqStack S)
{
while(!StackEmpty(S))
{
printf("%d\t",S.data[S.top--]);
}
printf("\n");
}