#include <stdio.h>
struct stack
{
int num;
struct stack *next;
};
typedef struct stack * Stack; //Stack 可以定义结构体指针类型的变量
enum Result{STACK_EMPTY,STACK_NOT_EMPTY}; //枚举,作用是消除幻数
void init_stack(Stack * top)
{
*top = NULL;
}
int get_stack_top(Stack *top)
{
}
int is_stack_empty(Stack *top) //定义一个检查是否是空栈的函数,在出栈时会用到
{
if(*top == NULL)
{
return STACK_EMPTY;
}
return STACK_NOT_EMPTY;
}
void push_stack(Stack *newstack, Stack *top) //入栈函数,栈尾一直指向NULL
{
(*newstack)->next = (*top);
(*top) = *newstack;
}
int pop_stack(Stack *top) //出栈函数,要进行是否为空栈检查
{
if(is_stack_empty(top) == STACK_EMPTY)
{
return STACK_EMPTY;
}
int num = (*top)->num;
Stack temp = *top;
*(top) = (*top)->next;
free(temp); //每出栈一个节点,就释放一段空间
temp = NULL;
return num;
}
int main()
{
int i;
Stack top;
Stack newstack; //定义一个新的结构体类型的指针
init_stack(&top);
for(i = 0; i < 10; i++)
{
newstack = (Stack)malloc(sizeof(struct stack)); //给指针分配空间
newstack->num = i + 1; //初始化该:指针
push_stack(&newstack,&top);
}
for(i = 0; i < 10; i++)
{
printf("pop:%d\n",pop_stack(&top));
}
return 0;
}
链式栈的实现