/*
2018/8/9
顺序栈
结构体元素俩,一个数组,一个指向数组开始的上一个位置的指针
打印结果:
*/
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "stdbool.h" //存放bool和false true头文件
#define MAX_SIZE 50
typedef struct Stack{
int data[MAX_SIZE];
int top;
}*PStack,Stack;
//函数声明区
PStack InitStack(void); //初始化栈
void StackPush(PStack S, int val) ; //压栈
bool StackPop(PStack S, int* val);//出栈
void StackTraverse(PStack S); //遍历栈
void StackClear(PStack S); //清空栈
int main()
{
int i,val;
PStack S = InitStack();
StackTraverse(S);
StackPush(S, 78);
StackPush(S, 223);
StackPush(S, 34);
StackPush(S, 45);
StackPush(S, 56);
StackPush(S, 7678);
StackTraverse(S);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackPop(S, &val);
StackTraverse(S);
StackPush(S, 45);
StackPush(S, 56);
StackPush(S, 7678);
StackTraverse(S);
printf("\nHello World!!\n");
return;
}
/*初始化栈*/
PStack InitStack(void)
{
PStack S = (PStack)malloc(sizeof(Stack));
S->top = -1;
return S;
}
/* 压栈 */
void StackPush(PStack S, int val)
{
if(S->top == (MAX_SIZE-1))//判满
{
printf("栈满,请释放栈后在请求入栈!!\n");return;
}
S->data[++S->top] = val;
return;
}
/* 出栈 到val ,出错返回false */
bool StackPop(PStack S, int* val)
{
if(S->top == -1)
{
printf("出栈失败!!\n");return false;
}
*val = S->data[S->top--];
printf("val = %d出栈成功! \n",*val);
return true;
}
/* 遍历打印 */
void StackTraverse(PStack S)
{
if(S->top == -1)
{
printf("空栈无法遍历!!\n");return;
}
int i = 0;
while(i != (S->top+1))
{
printf("%d ",S->data[i++]);
}
printf("\n");
return;
}