六、线性队列

2023-11-02

序言

线性队列是用数组实现的队列.队列遵循的原则FIFO(first in first out),通常我们说的线性队列,为了节省数组的空间使用,都是循环队列

结构图

队列结构

typedef struct QueueArr {
    ELEMENT *base;
    int front;
    int rear;
} QueueArr, *PQueueArr;

队列常用操作


void init_queue_array(PQueueArr *pQueueArr);

void destroy_queue_array(PQueueArr pQueueArr);

void clear_queue_array(PQueueArr pQueueArr);

bool isempty_queue_array(PQueueArr pQueueArr);

bool isfull_queue_array(PQueueArr pQueueArr);

bool enqueue_array(PQueueArr pQueueArr, ELEMENT data);

bool dequeue_array(PQueueArr pQueueArr, ELEMENT *data);

void print_queue_array(PQueueArr pQueueArr);

队列的实现

//
// Created by HomorSmith on 2017/5/10.
//
#include <math.h>
#include "queue_array.h"

void init_queue_array(PQueueArr *pQueueArr) {
    *pQueueArr = malloc(sizeof(QueueArr));
    if (*pQueueArr == NULL) {
        exit(OVERFLOW);
    }
    (*pQueueArr)->base = malloc(sizeof(MAX_QUEUE_SIZE * sizeof(QueueArr)));
    (*pQueueArr)->front = (*pQueueArr)->rear = 0;
};

void destroy_queue_array(PQueueArr pQueueArr) {
    free(pQueueArr->base);
    pQueueArr->front = pQueueArr->rear = 0;
    free(pQueueArr);
};

void clear_queue_array(PQueueArr pQueueArr) {
    pQueueArr->front = pQueueArr->rear = 0;
}

bool isempty_queue_array(PQueueArr pQueueArr) {
    if (pQueueArr->front == pQueueArr->rear) /* 队列空的标志 */
        return true;
    else
        return false;
};

//在这里.我们最后一个元素为空.
bool isfull_queue_array(PQueueArr pQueueArr) {
    if ((pQueueArr->rear + 1) % MAX_QUEUE_SIZE == (pQueueArr->front)) {
        return true;
    } else {
        return false;
    }
};

bool enqueue_array(PQueueArr pQueueArr, ELEMENT data) {
    if (isfull_queue_array(pQueueArr)) {
        return false;
    }
    pQueueArr->rear = (pQueueArr->rear + 1) % MAX_QUEUE_SIZE;
    pQueueArr->base[pQueueArr->rear] = data;
};

bool dequeue_array(PQueueArr pQueueArr, ELEMENT *data) {
    if (isempty_queue_array(pQueueArr)) {
        return false;
    }
    *data = pQueueArr->base[pQueueArr->front + 1];
    pQueueArr->front = (pQueueArr->front + 1) % MAX_QUEUE_SIZE;
    return true;

}


void print_queue_array(PQueueArr pQueueArr) {
    if (isempty_queue_array(pQueueArr)) {
        return;
    }
    int i = pQueueArr->front;
    while (i != pQueueArr->rear) {
        printf("%d\t", pQueueArr->base[i + 1]);
        i++;
        i = i % MAX_QUEUE_SIZE;
    }
};

github:https://github.com/HumorSmith/DataStructure/tree/master/queue

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六、线性队列 的相关文章

  • 【任务调度系统第四篇】:Quartz的原理

    文章目录 1 引言 2 Quartz概述 2 1 可以用来做什么 2 2 特点 3 quartz基本原理 3 1 核心元素 3 2 核心元素间关系 3 3 主要线程 3 4 数据存储 4 quartz集群原理 4 1 Quartz集群容易存
  • Go 安装、多版本管理

    文章目录 正常单版本go安装方式 1 官网下载pkg安装 2 mac brew安装 多版本安装 方案1 golang dl 方案1 GVM 管理多个go版本 安装GVM GVM命令 问题 macOS Big Sur 版本11 0 后无法利用
  • 苹果开发者账号续费时出现你的支付授权失败,请核对信息并重试..

    1 联系邮箱我用的是网易的126邮箱 账单信息一定要写信用卡的账单信息 写持卡人的姓名 一定要用大写字母 账单地址可以在手机上查看你信用卡的账单地址 下面是苹果客服的回复 2 最后我用的是建设银行的万事达的卡支付成功的

随机推荐