#include <stdio.h>
#include "stdlib.h"
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#define OK 1
#define ERROR 0
typedef struct LinkedList
{
int32_t data;
struct LinkedList *next;
}LinkedList;
#define STACK_SIZE 20
typedef struct
{
LinkedList *top;
uint32_t count;
}LinkStack;
void StackInit(LinkStack *s)
{
LinkedList *p = (LinkedList *)malloc(sizeof(LinkedList));
s->top = p;
s->top->next = NULL;
s->count = 0;
}
uint8_t StackPush(LinkStack *s, int32_t data)
{
LinkedList *p = (LinkedList *)malloc(sizeof(LinkedList));
p->data = data;
p->next = s->top;
s->top = p;
s->count++;
return OK;
}
uint8_t StackPop(LinkStack *s, int32_t *data)
{
LinkedList *p;
if(s->count == 0)
return ERROR;
*data = s->top->data;
p = s->top;
s->top = s->top->next;
free(p);
s->count--;
return OK;
}
void StackClear(LinkStack *s)
{
s->top->next = NULL;
s->count = 0;
}
void StackDel(LinkStack *s)
{
}
int main (void) {
uint16_t i;
int32_t data;
LinkStack *stack;
StackInit(stack);
for(i=0; i<10; i++)
StackPush(stack, i);
printf("Stack Size = %d\n", stack->count);
for(i=0; i<13; i++)
{
if(StackPop(stack, &data)==OK)
printf("%d\n", data);
else
printf("栈已经空了!\n");
}
printf("Stack Size = %d\n", stack->count);
return 0;
}