zoukankan      html  css  js  c++  java
  • 队列(顺序存储结构)

    • 队列:具有一定操作约束的线性表,只能在一端作插入、删除,与堆栈类似
    • 具有先入先出的特性(First In First Out)
    • 同理,分顺序存储结构、链式存储结构两种形式



    队列(顺序存储结构)

    • 通常由一个一维数组和一个队列头元素变量front和一个队列尾元素变量rear组成

    • 加入一个元素rear加1,删除一个元素front加1

    • 空的时候front=rear,但是填满时front/rear也相等,这时便不利于区分;为此通常采用加1求余的方式,同时构成循环队列

    • 1)判断是否为空:front == rear 即为空

    • 2)判断是否为满:(rear+1)%MaxSize == front 即为满

    图解如下:



    0、结构初始化

    #define Size ###
    struct QueueNode {
        ElementType *Data;
        int MaxSize;
        int front;
        int rear;
    };
    

    1、建立空队列 createQueue

    struct QueueNode* createQueue() {
        struct QueueNode* q=malloc(sizeof(struct QueueNode));
        q->Data=(ElementType*)malloc(MaxSize*sizeof(ElementType));
        q->front=q->rear=0;
        q->MaxSize=Size;
    
        return q;
    }
    

    2、判断队列是否充满 isFull

    bool isFull(struct QueueNode* q) {
        return ( (q->rear+1)%q->MaxSize == q->front );
    }
    

    3、判断队列是否为空 isEmpty

    bool isEmpty(struct QueueNode* q) {
        return ( q->rear == q->front );
    }
    

    4、入队操作addQueue

    void addQueue(struct QueueNode* q,ElementType x) {
        if (isFull(q)) return false;
        else {
            q->rear = (q->rear+1)%q->MaxSize;
            q->Data[q->rear]=x;
        }
    }
    

    5、出队操作deleteQueue

    ElementType deleteQueue(struct QueueNode* q) {
        if (isEmpty(q)) return false;
        else {
            q->front = (q->front+1)%q->MaxSize;
            return q->Data[q->front];
        }
    }
    
  • 相关阅读:
    js加密
    sharepoint更新左侧列表的名字
    HTML转换JS
    Html空格字符代码:
    docker 与host互传文件
    Ubuntu里node命令出错,找不到
    docker查看运行容器详细信息
    docker保存容器的修改
    Docker容器中安装新的程序
    运行docker容器镜像
  • 原文地址:https://www.cnblogs.com/WakingUp/p/8543416.html
Copyright © 2011-2022 走看看