美文网首页
C语言数据结构——线性表循环队列(静态数组实现方式)

C语言数据结构——线性表循环队列(静态数组实现方式)

作者: 含光印象 | 来源:发表于2020-01-07 14:38 被阅读0次

    队列相关知识及操作请参看上一章

    C语言数据结构——线性表循环队列(动态数组实现方式)

    一、队列数据类型定义

    #define QUEUE_ZISE          6//队列长度
    
    typedef struct Queue
    {
        int qFront;//队首
        int qRear;//队尾
        int BasicArr[QUEUE_ZISE];//队列数据
    }Queue, * pQueue;
    //Queue  等效于 struct Queue 
    //pQueue 等效于 struct Queue *
    

    二、队列初始化

    队列初始化
    //初始化队列
    void InitQueue(pQueue queue)
    {
        queue->qFront = 0;
        queue->qRear  = 0;
    
        printf("队列初始化成功......\r\n");
        printf("队列总长度 : %d\r\n", (QUEUE_ZISE - 1));
        printf("队首 : %d\r\n", queue->qFront);
        printf("队尾 : %d\r\n", queue->qRear);
    }
    

    三、判断队列是否为空

    队列为空
    //队列是否为空
    bool IsEmptyQueue(pQueue queue)
    {
        if (queue->qFront == queue->qRear)//队首等于队尾
            return true;
        else
            return false;
    }
    

    四、判断队列是否已满

    队列已满
    //队列是否为满
    bool IsFullQueue(pQueue queue)
    {
        //队尾下个数据为队首
        if (((queue->qRear + 1) % QUEUE_ZISE) == queue->qFront)
            return true;
        else
            return false;
    }
    

    五、数据入队

    数据入队
    //入队
    void EnterQueue(pQueue queue, int vale)
    {
        if (IsFullQueue(queue))
        {
            printf("队列已满,入队失败......\r\n");
            return;
        }
    
        //从队尾入队
        queue->BasicArr[queue->qRear] = vale;//入队数据
        queue->qRear = (queue->qRear + 1) % QUEUE_ZISE;//队尾移向下个位置
    
        printf("入队成功!入队值为:%d   ---->    ", vale);
        printf("队首: %d   队尾: %d\r\n", queue->qFront, queue->qRear);
    }
    

    六、数据出队

    数据出队
    //出队
    int OutQueue(pQueue queue)
    {
        int out = 0;
    
        if (IsEmptyQueue(queue))
        {
            printf("队列已空,出队失败......\r\n");
            return out;
        }
    
        out = queue->BasicArr[queue->qFront];//出队值
        queue->qFront = (queue->qFront + 1) % QUEUE_ZISE;//指向下一个出队值
    
        printf("出队成功!出队值为:%d   ---->    ", out);
        printf("队首: %d   队尾: %d\r\n", queue->qFront, queue->qRear);
    
        return  out;
    }
    

    七、遍历队列

    //显示队列数据
    void ShowQueue(pQueue queue)
    {
        int cur = 0;
    
        if (IsEmptyQueue(queue))
        {
            printf("队列为空,显示失败......\r\n");
            return;
        }
    
        printf("队列数据: ");
        cur = queue->qFront;
        while (cur != queue->qRear)
        {
            printf("%d  ", queue->BasicArr[cur]);
            cur = (cur + 1) % QUEUE_ZISE;
        }
        printf("\r\n");
    }
    

    八、获取队列使用空间

    //队列使用空间
    int CountQueue(pQueue queue)
    {
        int cur = 0;
        int len = 0;
    
        cur = queue->qFront;
        while (cur != queue->qRear)
        {
            len++;
            cur = (cur + 1) % QUEUE_ZISE;
        }
    
        printf("队列使用空间 : %d\r\n", len);
        return len;
    }
    

    九、获取队列剩余空间

    //队列剩余空间
    int ResidueQueue(pQueue queue)
    {
        int len = 0;
        int cur = 0;
        int res = 0;
    
        cur = queue->qFront;
        while (cur != queue->qRear)
        {
            len++;
            cur = (cur + 1) % QUEUE_ZISE;
        }
    
        res = QUEUE_ZISE - 1 - len;
        printf("队列剩余空间 : %d\r\n", res);
        return res;
    }
    

    十、代码验证演示

    void main(void)
    {
        Queue queue;
    
        InitQueue(&queue);//初始化队列
        printf("\r\n");
        
        EnterQueue(&queue, 10);//入队
        EnterQueue(&queue, 20);
        EnterQueue(&queue, 30);
        EnterQueue(&queue, 40);
        EnterQueue(&queue, 50);
        CountQueue(&queue);//队列使用空间
        ResidueQueue(&queue);//队列剩余空间
        ShowQueue(&queue);//显示队列数据
        printf("\r\n");
    
        OutQueue(&queue);//出队
        OutQueue(&queue);
        OutQueue(&queue);
        CountQueue(&queue);//队列使用空间
        ResidueQueue(&queue);//队列剩余空间
        ShowQueue(&queue);//显示队列数据
        printf("\r\n");
    
        while (1);
    }
    

    十一、运行结果

    队列初始化成功......
    队列总长度 : 5
    队首 : 0
    队尾 : 0
    
    入队成功!入队值为:10   ---->    队首: 0   队尾: 1
    入队成功!入队值为:20   ---->    队首: 0   队尾: 2
    入队成功!入队值为:30   ---->    队首: 0   队尾: 3
    入队成功!入队值为:40   ---->    队首: 0   队尾: 4
    入队成功!入队值为:50   ---->    队首: 0   队尾: 5
    队列使用空间 : 5
    队列剩余空间 : 0
    队列数据: 10  20  30  40  50
    
    出队成功!出队值为:10   ---->    队首: 1   队尾: 5
    出队成功!出队值为:20   ---->    队首: 2   队尾: 5
    出队成功!出队值为:30   ---->    队首: 3   队尾: 5
    队列使用空间 : 2
    队列剩余空间 : 3
    队列数据: 40  50
    
    运行结果1 运行结果2 运行结果3 运行结果4 运行结果5

    相关文章

      网友评论

          本文标题:C语言数据结构——线性表循环队列(静态数组实现方式)

          本文链接:https://www.haomeiwen.com/subject/atlractx.html