• 数据结构基础:队列


    头文件.h

    #ifndef _SQQUEUE_H
    #define _SQQUEUE_H

    #define N 1024
    typedef char squeue_data_t;
    typedef struct sqqueue{
        squeue_data_t buf[N];
        int tail;
        int head;    
    }sqq_node,*sqq_pnode;

    //创建
    sqq_pnode create_sqqueue();

    //判空
    int empty_sqqueue(sqq_pnode Q);
    //判满
    int full_sqqueue(sqq_pnode Q);
    //打印
    int show_sqqueue(sqq_pnode Q);

    //出队
    squeue_data_t d_sqqueue(sqq_pnode Q);
    //入队
    int e_sqqueue(sqq_pnode Q, squeue_data_t data);
    #endif


    源文件.c

    #include "sqqueue.h"
    #include
    #include

    //创建
    sqq_pnode create_sqqueue()
    {
        sqq_pnode Q = (sqq_pnode)malloc(sizeof(sqq_node));
        if(NULL == Q)
        {
            printf("malloc is default\n");
            return NULL;
        }
        
        Q->tail = Q->head = 0;
        
        return Q;
    }

    //判空
    int empty_sqqueue(sqq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        if(Q->tail == Q->head)
            return 0;
        else
            return -1;
    }
    //判满
    int full_sqqueue(sqq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        if((Q->tail+1)%N == Q->head)
            return 0;
        else
            return -1;
    }

    //打印
    int show_sqqueue(sqq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        //判空
        if(0 == empty_sqqueue(Q))
        {
            printf("Q is empty\n");
            return -1;
        }
        
        int i;
        for(i = Q->head; i != Q->tail; i = (i+1)%N)
        {
                printf("buf[%d]=%c ", i, Q->buf[i]);
        }
    }

    //出队
    squeue_data_t d_sqqueue(sqq_pnode Q)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        //判空
        if(0 == empty_sqqueue(Q))
        {
            printf("Q is empty\n");
            return -1;
        }
        squeue_data_t data = Q->buf[Q->head];
        Q->head = (Q->head+1)%N;
        
        return data;
    }
    //入队
    int e_sqqueue(sqq_pnode Q, squeue_data_t data)
    {
        if(NULL == Q)
        {
            printf("Q is NULL\n");
            return -1;
        }
        
        //判满
        if(0 == full_sqqueue(Q))
        {
            printf("Q is full\n");
            return -1;
        }
        Q->buf[Q->tail] = data;
        Q->tail = (Q->tail+1)%N;
        
        return 0;
    }
     

    main.c(文件调用)

    #include "sqqueue.h"
    #include

    int main()
    {
        sqq_pnode Q = create_sqqueue();
        
        int i;
        for(i = 0; i < 7; i++)
        {
            e_sqqueue(Q,i+48);
        }
        
        show_sqqueue(Q);
        
        for(i = 0; i < 7; i++)
        {
            printf("data=%c\n", d_sqqueue(Q));
        }
    }
     

  • 相关阅读:
    内网穿透工具之花生壳(二)
    Java IO---序列化和反序列化
    一分钟带你了解网络安全(如何自学)
    springboot 集成 Swagger2(速通)
    kafka
    3.前端开发就业前景
    MATLAB算法实战应用案例精讲-【数据分析】数据仓库-数据治理
    我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(中)
    Linux虚拟机新增磁盘分区格式化和挂载
    SQL按年月创建动态表
  • 原文地址:https://blog.csdn.net/qq_63626307/article/details/126334209