[数据结构]栈
											Stack.h 程序代码:
程序代码:#ifndef STACK_H
#define STACK_H
#include <stdbool.h>
#include <stddef.h>
typedef signed int ssize_t;
typedef struct StackNode_struct
{
    int data;
    struct StackNode_struct * Prev;
} StackNode_t;
typedef struct
{
    StackNode_t * Top;
    StackNode_t * Bottom;
    size_t Count;
} Stack_t;
bool Stack_Init(Stack_t * stack);
bool Stack_Push(Stack_t * stack, int data);
bool Stack_Pop(Stack_t * stack, int * data);
bool Stack_Top(Stack_t * stack, int * data);
bool Stack_IsEmpty(const Stack_t * stack);
ssize_t Stack_Count(const Stack_t * stack);
#endifStack.c
 程序代码:
程序代码:#include <stdlib.h>
#include "Stack.h"
bool Stack_Init(Stack_t * stack)
{
    StackNode_t * node = NULL;
    if(!stack)
        return false;
    node = malloc(sizeof(StackNode_t));
    if(!node)
        return false;
   
    node->Prev = NULL;
    node->data = 0;
    stack->Top = node;
    stack->Bottom = node;
    stack->Count = 0;
    return true;
}
bool Stack_Push(Stack_t * stack, int data)
{
    StackNode_t * node = NULL;
    if(!stack)
        return false;
   
    node = malloc(sizeof(StackNode_t));
    if(!node)
        return false;
   
    node->data = data;
    node->Prev = stack->Top;
    stack->Top = node;
    stack->Count++;
    return true;
}
bool Stack_Pop(Stack_t * stack, int * data)
{
    StackNode_t * node = NULL;
    if(!stack)
        return false;
   
    if(stack->Count == 0)
        return false;
   
    *data = stack->Top->data;
    node = stack->Top;
    stack->Top = node->Prev;
    stack->Count--;
    free(node);
    return true;
}
bool Stack_Top(Stack_t * stack, int * data)
{
    if(!stack)
        return false;
   
    if(stack->Count == 0)
        return false;
   
    *data = stack->Top->data;
    return true;
}
bool Stack_IsEmpty(const Stack_t * stack)
{
    if(!stack)
        return false;
   
    return stack->Count == 0;
}
ssize_t Stack_Count(const Stack_t * stack)
{
    if(!stack)
        return -1;
   
    return stack->Count;
}
 
											







