c语言接口(二)--- 栈接口

Stack接口

  • 栈结构类型定义
#define STACK_MAX_SIZE      (1024)

typedef struct __stack
{
    void *pData[STACK_MAX_SIZE];
    int size;
}ST_STACK;

typedef void* PST_STACK;

typedef struct __lstack
{
    struct __lstack *pstNext;
    int data;
}LST_STACK;

typedef struct __listStack
{
    LST_STACK header;
    int size;
}LIST_ST_STACT;

方式一

  • 创建和初始化栈
PST_STACK init_stack(void)
{
    ST_STACK *pstStack = malloc(sizeof(ST_STACK));
    if(NULL == pstStack)
    {
        return NULL;
    }

    for(int i = 0; i < STACK_MAX_SIZE; i++)
    {
        pstStack->pData[i] = NULL;
    }
    pstStack->size = 0;

    return pstStack;
}
  • 入栈
/*入栈*/
int push_stack(PST_STACK pstStack, void *pData)
{
    ST_STACK *pStack = NULL;

    if(NULL == pstStack || NULL == pData )
    {
        return -1;
    }

    pStack = (ST_STACK *)pstStack;
    if(pStack->size > STACK_MAX_SIZE)
    {
        return 0;
    }

    pStack->pData[pStack->size] = pData;
    pStack->size++;

    return 1;    
}
  • 出栈
/*出栈*/
int pop_stack(PST_STACK pstStack)
{
    ST_STACK *pStack = NULL;

    if(NULL == pstStack)
    {
        return -1;
    }

    pStack = (ST_STACK *)pstStack;
    if(pStack->size == 0)
    {
        return 0;
    }
    pStack->pData[pStack->size - 1] = NULL;
    pStack->size--;

    return 1;
}
  • 获得栈顶元素
void *get_top_stack(PST_STACK pstStack)
{
    ST_STACK *pStack = NULL;

    if(NULL == pstStack)
    {
        return NULL;
    }

    pStack = (ST_STACK *)pstStack;

    return pStack->pData[pStack->size - 1];
}
  • 获取栈大小
int get_stack_size(PST_STACK pstStack)
{
    ST_STACK *pStack = NULL;

    if(NULL == pstStack)
    {
        return -1;
    }

    pStack = (ST_STACK *)pstStack;

    return pStack->size;
}
  • 遍历打印
void print_stack(PST_STACK pstStack)
{
    ST_STACK *pStack = NULL;
    int size = 0;

    if(NULL == pstStack)
    {
        return;
    }

    pStack = (ST_STACK *)pstStack;
    size = pStack->size;
    while(size > 0)
    {
        struct Test *stOut = (struct Test *)pStack->pData[size - 1];
        
        printf("stack %d: %s %d\n", size, stOut->data, stOut->length);
        size--;
    }
}

方式二

  • List 方式堆栈创建及初始化
PST_STACK init_list_stack(void)
{
    LIST_ST_STACT *pListStStack = malloc(sizeof(LIST_ST_STACT));

    if(NULL == pListStStack)
    {
        return NULL;
    }

    pListStStack->header.pstNext = NULL;
    pListStStack->size = 0;

    return pListStStack;
}
  • List stack 入栈
int push_list_stack(PST_STACK pStack, void *pData)
{
    LIST_ST_STACT *pListStack = NULL;
    LST_STACK *pstStack = NULL;

    if(NULL == pStack || NULL == pData)
    {
        return -1;
    }

    pListStack = (LIST_ST_STACT *)pStack;
    pstStack = (LST_STACK *)pData;

    pstStack->pstNext = pListStack->header.pstNext;
    pListStack->header.pstNext = pstStack;
    pListStack->size++;

    return 1;
}
  • List stack 出栈
int pop_list_stack(PST_STACK pStack)
{
    LIST_ST_STACT *pListStack = NULL;
    LST_STACK *pstStack = NULL;

    if(NULL == pStack)
    {
        return -1;
    }

    pListStack = (LIST_ST_STACT *)pStack;
    if(pListStack->size == 0)
    {
        return 0;
    }
    
    pstStack = pListStack->header.pstNext;
    pListStack->header.pstNext = pstStack->pstNext;
    pListStack->size--;

    return -1;
}

  • List stack 获取栈顶元素
void *get_list_stack_top(PST_STACK pStack)
{
    LIST_ST_STACT *pListStack = NULL;

    if(NULL == pStack)
    {
        return NULL;
    }

    pListStack = (LIST_ST_STACT *)pStack;
    if(pListStack->size == 0)
    {
        return NULL;
    }

    return pListStack->header.pstNext;    
}

  • List stack 获取堆栈大小
int get_list_stack_size(PST_STACK pStack)
{
    LIST_ST_STACT *pListStack = NULL;

    if(NULL == pStack)
    {
        return -1;
    }

    pListStack = (LIST_ST_STACT *)pStack;

    return pListStack->size;
}
  • List stack 释放
void free_list_stack(PST_STACK pStack)
{
    LIST_ST_STACT *pListStack = NULL;

    if(NULL == pStack)
    {
        return;
    }

    pListStack = (LIST_ST_STACT *)pStack;
    pListStack->header.pstNext = NULL;
    pListStack->size = 0;
    
    free(pStack);
    pStack = NULL;
}
  • 打印List stack
void print_list_stack(PST_STACK pStack)
{
    LIST_ST_STACT *pListStack = NULL;
    LST_STACK *pStackNode = NULL;
    int size = 0;

    if(NULL == pStack)
    {
        printf("list stack is null\n");
        return;
    }

    pListStack = (LIST_ST_STACT *)pStack;
    pStackNode = pListStack->header.pstNext;
    size = pListStack->size;
    
    while(size != 0)
    {
        printf("List stack node: %d\n", pStackNode->data);
        pStackNode = pStackNode->pstNext;
        size--;        
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值