码迷,mamicode.com
首页 > 其他好文 > 详细

21 循环队列

时间:2020-06-04 01:42:21      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:while   max   show   循环   size   def   数组   false   queue   

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>       //exit 函数需要
#include <malloc.h>
#define MAXSIZE 8
typedef struct queue {
    int* arr;      //int 类型数组,arr数组名
    int head;    //队头
    int rear;         //队尾后一个元素
}QUEUE;

//函数原型
bool init_queue(QUEUE* queue);
bool enqueue(QUEUE* queue, int val);   //入队
bool dequeue(QUEUE* queue, int* val); //出队
bool is_empty(QUEUE* queue);
bool is_full(QUEUE* queue);
void show_queue(QUEUE* queue);

//测试程序
main() {
    bool is_em = 1, is_fu = 0;
    QUEUE queue;
    int val;          //出队的int;
    init_queue(&queue);
    enqueue(&queue, -200100);
    enqueue(&queue, 12);
    enqueue(&queue, 13);
    enqueue(&queue, 14);
    enqueue(&queue, 15);
    enqueue(&queue, 116);
    enqueue(&queue, 117);
    enqueue(&queue, 1118);
    enqueue(&queue, 1119);
    enqueue(&queue, 11114);
    show_queue(&queue);
    is_em = is_empty(&queue);
    is_fu = is_full(&queue);
    dequeue(&queue, &val);
    printf("dequeue val=%d", val);
    printf("\nis_em=%d,    is_full=%d ", is_em, is_fu);
}
bool init_queue(QUEUE* queue) {
    queue->arr = (int*)malloc(sizeof(int) * MAXSIZE);   // 注意: 是创建int 的存储空间,不是对结构体!
    if (NULL == queue->arr)                    //申请失败
        exit(-1);
    queue->head = 0;                //起始都为0
    queue->rear = 0;
}

bool enqueue(QUEUE* queue, int val) {
    if (is_full(queue))
        return false;
    else
    {
        queue->arr[queue->rear] = val;
        queue->rear = (queue->rear + 1) % MAXSIZE;                 //循环队列队头自加
    }
}

bool dequeue(QUEUE* queue, int* val) {
    if (is_empty(queue))
        return false;
    else {
        *val = queue->arr[queue->head];
        queue->head = (queue->head + 1) % MAXSIZE;     //循环队列队后自加
    }
}

bool is_empty(QUEUE* queue) {
    if (queue->head == queue->rear)                 //如果相等就是空,因为还剩一个空间就是队满了,所以不会和对满冲突
        return true;
    else
        return false;
}


bool is_full(QUEUE* queue) {
    if (queue->head == (queue->rear + 1) % MAXSIZE)        //还剩一个空间就是队满了
        return true;                        //循环队列可以理解为head 在追rear,   rear 在追head
    else
        return false;
}

void show_queue(QUEUE* queue) {
    int i;
    i = queue->head;
    printf("queue:      ");
    while (i != queue->rear) {
        printf("%d ", queue->arr[i]);
        i = (i + 1) % MAXSIZE;
    }
    printf("\n");
}

 

21 循环队列

标签:while   max   show   循环   size   def   数组   false   queue   

原文地址:https://www.cnblogs.com/abel2020/p/13040869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!