• 循环队列


    #include <stdio.h>
    #include <stdlib.h>
    
    //Real capacity is CircularQueueMaxSize -1
    #define CircularQueueMaxSize 1000
    
    typedef int ElementType;
    
    struct CircularQueue
    {
        ElementType QueueData[CircularQueueMaxSize];
        int Front;
        int Rear;
    };
    
    int CircularQueueIsEmpty(struct CircularQueue *Queue)
    {
        return (Queue -> Front == Queue -> Rear);
    }
    
    int CircularQueueIsFull(struct CircularQueue *Queue)
    {
        return ((Queue -> Rear + 1) % CircularQueueMaxSize == Queue -> Front);
    }
    
    struct CircularQueue *CircularQueueInit()
    {
        struct CircularQueue *Queue;
        Queue = malloc(sizeof(struct CircularQueue));
        
        Queue -> Front = Queue -> Rear = 0;
        
        return Queue;
    }
    
    //if Queue is full,return 1 
    int CircularQueueEnqueue(struct CircularQueue *Queue,ElementType ToBeEnqueue)
    {
        if(CircularQueueIsFull(Queue))
        {
            return 1;
        }
        else
        {
            Queue -> Rear = (Queue -> Rear + 1) % CircularQueueMaxSize;
            Queue -> QueueData[Queue -> Rear] = ToBeEnqueue;
        }
        return 0;
    }
    
    //if Queue is empty,return 1 
    ElementType CircularQueueTop(struct CircularQueue *Queue)
    {
        if(CircularQueueIsEmpty(Queue))
        {
            return 1;
        }
        else
        {
            return Queue -> QueueData[(Queue -> Front + 1) % CircularQueueMaxSize];
        }
        return 0;
    }
    
    //if Queue is empty,return 1 
    int CircularQueueDequeue(struct CircularQueue *Queue)
    {
        if(CircularQueueIsEmpty(Queue))
        {
            return 1;
        }
        else
        {
            Queue -> Front = (Queue -> Front + 1) % CircularQueueMaxSize;
            return 0;
        }
    }
    
    int MakeCircularQueueEmpty(struct CircularQueue *Queue)
    {
        Queue -> Front = Queue -> Rear = 0;
        
        return 0;
    }
    
    int CircularQueueDelete(struct CircularQueue *Queue)
    {
        free(Queue);
        Queue = NULL;
        return 0;
    }
    
    int main()
    {
        int test;
        int i;
        
        struct CircularQueue *Queue;
        Queue = CircularQueueInit();
        MakeCircularQueueEmpty(Queue);
        CircularQueueDelete(Queue);
        
        Queue = CircularQueueInit();
        test = CircularQueueTop(Queue);
        CircularQueueDequeue(Queue);
        
        CircularQueueEnqueue(Queue,39);
        test = CircularQueueTop(Queue);
        CircularQueueDequeue(Queue);
        printf("%d
    ",test);
        for(i = 1;i < 2000;i ++)
        {
            CircularQueueEnqueue(Queue,i);
        }
        for(i = 1;i < 500;i ++)
        {
            CircularQueueDequeue(Queue);
        }
        test = CircularQueueTop(Queue);
        CircularQueueDequeue(Queue);
        printf("%d
    ",test);
        return 0;
    }
  • 相关阅读:
    day01-html
    Word中划线的方法(五种)
    关于获取请求参数并处理显示的总结
    确定目标,把握时间,创造机会,努力加油!(关于大三下学期人生规划浅谈)
    重载运算符(一个例子)
    关于连接数据库的那点总结(感觉挺好的)
    Ribbon负载均衡
    idea中一份代码模拟集群
    Eureka集群
    Eureka配置服务提供者、服务消费者、失效剔除和自我保护
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9427305.html
Copyright © 2020-2023  润新知