六、线性队列

序言

线性队列是用数组实现的队列.队列遵循的原则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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值