zoukankan      html  css  js  c++  java
  • 数组实现循环队列

    queue.h

    #include <stdbool.h>
    #ifndef MGRAPH_QUEUE_H
    #define MGRAPH_QUEUE_H
    typedef int ElementType;
    typedef int Position;
    typedef struct QNode * PtrToQNode;
    struct QNode {
        ElementType * Data; // 存储元素的数组
        Position Front, Rear; // 队列的、尾指针
        int MaxSize; // 队列的最大容量
    };
    typedef PtrToQNode Queue;
    
    Queue CreateQueue(int MaxSize);
    bool IsFull(Queue Q);
    bool AddQ(Queue Q, ElementType X);
    bool IsEmpty(Queue Q);
    ElementType DeleteQ(Queue);
    
    #endif //MGRAPH_QUEUE_H
    

    queue.c

    #include "queue.h"
    #include <stdlib.h>
    #include <stdio.h>
    
    #define ERROR -1
    
    Queue CreateQueue(int MaxSize)
    {
        Queue  Q = (Queue)malloc(sizeof(struct QNode));
        Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
        Q->Front = Q->Rear = 0;
        Q->MaxSize = MaxSize;
        return Q;
    }
    
    bool IsFull(Queue Q)
    {
        return ((Q->Rear + 1) % Q->MaxSize == Q->Front); // 这里我们选择少用一个空间, 当队列尾指针加 1 就会从后面赶上头指针时 --> 队满
    }
    
    bool AddQ(Queue Q, ElementType X)
    {
        if (IsFull(Q)) {
            printf("队列满");
            return false;
        } else {
            Q->Rear = (Q->Rear + 1) % Q->MaxSize; // 尾指针向后移动一个位置
            Q->Data[Q->Rear] = X;
            return true;
        }
    }
    
    bool IsEmpty(Queue Q)
    {
        return (Q->Front == Q->Rear); // 头指针和尾指针相等时, 队列为空, 注意与队列满的时候作区分
    }
    
    ElementType DeleteQ(Queue Q)
    {
        if (IsEmpty(Q)) {
            printf("队列空");
            return ERROR;
        } else {
            Q->Front = (Q->Front + 1) % Q->MaxSize;
            return Q->Data[Q->Front]; // 虽然这里 Q->Front 位置上的数据还在, 但是其实它已经被删除了, 因为我们是选择的少用一个空间
        }
    }
    

    参考: 浙江大学陈越数据结构图部分, 教材 --> 《数据结构第二版》(陈越)

  • 相关阅读:
    ScheduledThreadPoolExecutor源码解读
    Spring事务源码阅读笔记
    Spring AOP的实现研究
    cglib之Enhancer
    Spring IOC容器创建bean过程浅析
    CompletionService简讲
    Spring Boot:关于“No converter found for return value of type: class xxx”的解决方法
    java关于Date转换成字符串格式以及Date的增加
    jsp中文乱码六种情况---解决方案
    MYSQL给表添加字段
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/14016183.html
Copyright © 2011-2022 走看看