c语言接口(三)--- 队列接口

QUEUE接口

数据结构定义

typedef void* PLIST_QUEUE;

typedef struct __queueNode
{
    struct __queueNode *pNext;
    int data;
}ST_QUEUE_NODE;

typedef struct __listQueue
{
    ST_QUEUE_NODE header;
    ST_QUEUE_NODE *pRear;
    int size;
}LIST_ST_QUEUE;
  • 1、创建并初始化队列
PLIST_QUEUE init_list_queue(void)
{
    LIST_ST_QUEUE *pListQ = malloc(sizeof(LIST_ST_QUEUE));

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

    pListQ->header.pNext = NULL;
    pListQ->size = 0;
    pListQ->pRear = &pListQ->header;

    return pListQ;
}
  • 2、加入队列
int push_list_queue(PLIST_QUEUE pListQ, void *pData)
{
    ST_QUEUE_NODE *pstQNode = NULL;
    LIST_ST_QUEUE *pstListQ = NULL;

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

    pstQNode = (ST_QUEUE_NODE *)pData;
    pstListQ = (LIST_ST_QUEUE *)pListQ;

    pstListQ->pRear->pNext = pstQNode;
    pstQNode->pNext = NULL;
    pstListQ->pRear = pstQNode;
    pstListQ->size++;

    return 1;
}
  • 3、退出队列
int pop_list_queue(PLIST_QUEUE pListQ)
{
    LIST_ST_QUEUE *pstListQ = NULL;
    ST_QUEUE_NODE *pstQNode = NULL;

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

    pstListQ = (LIST_ST_QUEUE *)pListQ;
    if(pstListQ->size == 0)
    {
        return 0;
    }

    pstQNode = pstListQ->header.pNext;
    if(pstListQ->size == 1)
    {
        pstListQ->header.pNext = NULL;
        pstListQ->pRear = &pstListQ->header;
    }
    else
    {    
        pstListQ->header.pNext = pstQNode->pNext;
    }
    pstListQ->size--;
    
    return 1;
}
  • 4、获取队列首节点
void *get_list_queue_first_node(PLIST_QUEUE pListQ)
{
    LIST_ST_QUEUE *pstListQ = NULL;

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

    pstListQ = (LIST_ST_QUEUE *)pListQ;

    return pstListQ->header.pNext;
}
  • 5、获取队列最后的元素
void *get_list_queue_last_node(PLIST_QUEUE pListQ)
{
    LIST_ST_QUEUE *pstListQ = NULL;

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

    pstListQ = (LIST_ST_QUEUE *)pListQ;

    return pstListQ->pRear;
}

- 6、获取队列长度

int get_list_queue_size(PLIST_QUEUE pListQ)
{
    LIST_ST_QUEUE *pstListQ = NULL;

    if(NULL == pListQ)
    {

        return -1;
    }

    pstListQ = (LIST_ST_QUEUE *)pListQ;

    return pstListQ->size;
}
  • 7、释放
void free_list_queue(PLIST_QUEUE pListQ)
{
    LIST_ST_QUEUE *pstListQ = NULL;

    if(NULL == pListQ)
    {
        return ;
    }

    pstListQ = (LIST_ST_QUEUE *)pListQ;
    pstListQ->header.pNext = NULL;
    pstListQ->pRear = NULL;
    pstListQ->size = 0;

    free(pListQ);
    pListQ = NULL;
}
  • 8、遍历打印
void print_list_queue(PLIST_QUEUE pListQ)
{
    LIST_ST_QUEUE *pstListQ = NULL;
    ST_QUEUE_NODE *pstQNode = NULL;
    int size = 0;

    if(NULL == pListQ)
    {
        printf("list queue is null!\n");
        return;
    }

    pstListQ = (LIST_ST_QUEUE *)pListQ;
    pstQNode = pstListQ->header.pNext;
    size = pstListQ->size;
    
    while(size > 0)
    {
        printf("list queue node:%d\n", pstQNode->data);
        pstQNode = pstQNode->pNext;
        size--;
    }
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值