zoukankan      html  css  js  c++  java
  • 3.3 循环队列

    // 循环队列采用顺序存储,为了区分队头和队尾,从1号下标开始存储
    // 队头队尾同时指向0号下标表示队空,队尾下标的下一个元素是队头的时候表示队满
    // 可以设置front指向队头元素,rear指向队尾元素的下一个位置
    // 或者设置front指向队头元素的下一个节点,rear指向队尾元素
    // 本程序采用前一种,后一种在操作的时候略有不便
    // 出队的时候front+1,入队的时候rear+1
    
    /*补充求队长*/
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXSIZE 6 
    
    typedef struct node{
        int data[MAXSIZE];           // 0号下标的元素空出来作为头节点
        int front,rear;
    }Queue;
    
    void initQueue(Queue *Q){
        Q->front=0;
        Q->rear=0;
    }
    
    int isEmpty(Queue *Q){
        if(Q->front==Q->rear) 
            return 1;
        return 0;
    }
    
    int isFull(Queue *Q){
        if(Q->front==(Q->rear+1)%MAXSIZE) return 1;
        return 0;
    }
    
    int enQueue(Queue *Q, int e){
        if(isFull(Q)){
            return 0;           // 判满
            puts("Full!");
        }
        Q->rear=(Q->rear+1)%MAXSIZE;
        Q->data[Q->rear]=e;
        return 1;
    }
    
    int deQueue(Queue *Q,int *e){
        if(isEmpty(Q)){
            puts("Empty!"); 
            return 0;
        }
        *e=Q->data[Q->front+1];    // +1跳过头节点
        Q->front=(Q->front+1)%MAXSIZE;
        return 1;
    }
    
    int QueueLength(Queue Q){
        return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
    }
    
    
    // 用idx暂时代替front,判断条件不变
    void disp(Queue Q){
        int idx=Q.front;     // 未出队时,front默认为0
        while(idx%MAXSIZE!=Q.rear){
            printf("%d ",Q.data[++idx]);
        }
    }
    
    int  main(){
        Queue Q;
        initQueue(&Q);
        enQueue(&Q,7);
        enQueue(&Q,4);
        enQueue(&Q,2);
        enQueue(&Q,3);
        enQueue(&Q,6);
        int e;
        deQueue(&Q,&e);
        disp(Q); printf("
    Length:%d",QueueLength(Q));
        printf("
    e:%d
    ",e);
        deQueue(&Q,&e);
        deQueue(&Q,&e);
        deQueue(&Q,&e);
        deQueue(&Q,&e);
    
        deQueue(&Q,&e); //Empty
        
    }
  • 相关阅读:
    linux命令行总结给自己看的版本
    搜集关于人脸识别的评价指标时的感慨
    配置面部数据增加的代码环境流程记录
    关于Linux前后台进程切换
    【转&改进】Linux MPI 单机配置
    How did I Install DCGAN
    kali的安装
    TensorFlow的安装
    strcmp用法
    分享一个MVC的多层架构,欢迎大家拍砖斧正
  • 原文地址:https://www.cnblogs.com/Alexagender/p/10806309.html
Copyright © 2011-2022 走看看