/*****************************************************************************/
#include <stdio.h>
#include <malloc.h>
/*****************************************************************************/
#define MAXSIZE 10
/*****************************************************************************/
typedef struct {
int data[MAXSIZE];
int top;
}Stack, *pStack;
/*****************************************************************************/
pStack init_stack(void); //栈的初始化
int push_stack(pStack s, int val); //压栈 返回值表示是否压栈成功
void show_stack(pStack s); //输出栈中元素 不改变栈顶指针
int pop_stack(pStack s, int *val); //出栈操作 返回值表示出否出栈成功 出栈的值通过指向val的指针传递
int getTop(pStack s, int *val); //取栈顶元素 返回值表示出否出栈成功 取得的值通过指向val的指针传递
int empty_stack(pStack s); //判断栈是否为空
/*****************************************************************************/
int main(void)
{
pStack s;
int val;
s = init_stack();
// printf("%d\n", s->top);
push_stack(s, 1);
push_stack(s, 2);
push_stack(s, 3);
push_stack(s, 4);
show_stack(s);
// getTop(s, &val);
// printf("\n%d ", val);
pop_stack(s, &val);
pop_stack(s, &val);
pop_stack(s, &val);
if (empty_stack(s))
printf("\n栈空");
else
printf("\n栈不为空");
return 1;
}
/*****************************************************************************/
//栈的初始化
pStack init_stack(void)
{
pStack s = (pStack)malloc(sizeof(Stack));
s->top = -1;
return s;
}
/*****************************************************************************/
//压栈
int push_stack(pStack s, int val)
{
if (MAXSIZE-1 == s->top)
return 0;
else
{
++s->top;
s->data[s->top] = val;
return 1;
}
}
/*****************************************************************************/
//输出栈中元素 不改变栈顶指针
void show_stack(pStack s)
{
int i;
for (i=0; i<=s->top; ++i)
{
printf("%d ", s->data[i]);
}
}
/*****************************************************************************/
//出栈
int pop_stack(pStack s, int *val)
{
if (-1 == s->top)
return 0;
*val = s->data[s->top];
--s->top;
return 1;
}
/*****************************************************************************/
//取栈顶元素 不改变栈顶指针
int getTop(pStack s, int *val)
{
if (-1 == s->top)
return 0;
*val = s->data[s->top];
return 1;
}
/*****************************************************************************/
//判断栈是否为空
int empty_stack(pStack s)
{
if (-1 == s->top)
return 1;
else
return 0;
}
/*****************************************************************************/