编辑代码

#include <stdio.h>
#include "stdlib.h"
/*stm32数据结构*/
//typedef char int8_t;
//typedef short int16_t;
//typedef int int32_t;
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;
}