• 数据结构:链式队列


    头文件.h

    #ifndef _LINKQUEUE_H
    #define _LINKQUEUE_H

    typedef char linkqueue_data_t;
    //链表的结构体
    typedef struct node{
        linkqueue_data_t data;
        struct node *next;
    }lst_node,*lst_pnode; 
    //存头尾的结构体
    typedef struct linkqueue{
        lst_pnode tail;
        lst_pnode head;
    }lkq_node,*lkq_pnode;

    //创建
    lkq_pnode create_linkqueue();

    //判空
    int empty_linkqueue(lkq_pnode Q);

    //打印
    int show_linkqueue(lkq_pnode Q);

    //入队
    int e_linkqueue(lkq_pnode Q, linkqueue_data_t data);
    //出队
    linkqueue_data_t d_linkqueue(lkq_pnode Q);


    #endif
     

    源文件.c

    #include "linkqueue.h"
    #include
    #include

    //创建
    lkq_pnode create_linkqueue()
    {
        lst_pnode L = (lst_pnode)malloc(sizeof(lst_node));
        if(NULL == L)
        {
            printf("malloc1 is default\n");
            return NULL;
        }
        L->next = NULL;
        
        lkq_pnode Q= (lkq_pnode)malloc(sizeof(lkq_node));
        if(NULL == Q)
        {
            printf("malloc2 is default\n");
            return NULL;
        }
        
        Q->head = Q->tail = L;
        
        return Q;
    }

    //判空
    int empty_linkqueue(lkq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        if(Q->head == Q->tail)
            return 0;
        else
            return -1;
    }

    //打印
    int show_linkqueue(lkq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        if(0 == empty_linkqueue(Q))
        {
            printf("Q is empty\n");
            return -1;
        }
        lst_pnode t = Q->head;
        while(t->next)
        {
            t = t->next;
            printf("data=%c ", t->data);
        }
        puts("");
        
        return 0;
    }

    //入队
    int e_linkqueue(lkq_pnode Q, linkqueue_data_t data)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        lst_pnode p = (lst_pnode)malloc(sizeof(lst_node));
        if(NULL == p)
        {
            printf("malloc1 is default\n");
            return -1;
        }
        p->data = data;
        
        Q->tail->next = p;
        p->next = NULL;
        
        Q->tail = Q->tail->next;
        
        return 0;
    }
    //出队
    linkqueue_data_t d_linkqueue(lkq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        if(0 == empty_linkqueue(Q))
        {
            printf("Q is empty\n");
            return -1;
        }
        
        lst_pnode temp = Q->head->next;
        Q->head->next = temp->next;
        linkqueue_data_t data = temp->data;
        if(temp->next == NULL)
            Q->tail = Q->head;
        
        free(temp);
        
        return data;
        
    }
     

    main.c(函数调用)

    #include "linkqueue.h"
    #include

    int main()
    {
        lkq_pnode Q = create_linkqueue();
        
        int i;
        for(i = 0; i < 7; i++)
        {
            e_linkqueue(Q,i+48);
        }
        
        show_linkqueue(Q);
        
        for(i = 0; i < 7; i++)
        {
            printf("data=%c\n", d_linkqueue(Q));
        }
    }
     

  • 相关阅读:
    云原生Docker Cgroups资源控制操作
    想要精通算法和SQL的成长之路 - 跳跃游戏系列
    Kubernetes (K8s) 深度分析与选型指南
    c#委托的三种实现方式
    Operator 开发实践 六 (API分组)
    【实用技巧】Latex写算法伪代码(格式篇)
    数字 IC 设计职位经典笔/面试题(四)
    MySQL表的操作
    树莓派CM4安装系统
    构建数字化供应商管理体系,SRM供应商管理系统助力餐饮企业科学管理供应链
  • 原文地址:https://blog.csdn.net/qq_63626307/article/details/126334257