c语言的循环列队

#include <stdio.h>
#include <stdlib.h>
#include "cyclequeue.h"

/*****************************************************************
函数名:cycleQueue_create
功  能:创建一个循环队列
参  数:int maxsize        表示循环队列最多能够存储的元素个数
返回值:循环队列的指针
备  注:
*****************************************************************/
cycleQueue* cycleQueue_create(int maxsize)
{
    if (maxsize <= 0) {
        printf("[Line %d] %s 队列最大元素个数有误,创建失败!\n", __LINE__, __FUNCTION__);
        return NULL;
    }
    //为循环队列结构分配空间
    cycleQueue* q = malloc(sizeof(cycleQueue));
    if (q == NULL) {
        printf("[Line %d] %s 内存不足,创建失败!\n", __LINE__, __FUNCTION__);
        return NULL;
    }
    //为循环队列的元素分配空间
    q->data = malloc( maxsize * sizeof(elemType));
    if (q->data == NULL) {
        printf("[Line %d] %s 内存不足,创建失败!\n", __LINE__, __FUNCTION__);
        return NULL;
    }
    q->front = q->rear = 0;
    q->maxsize = maxsize;
    q->cnt = 0;
    return q;
}

/*****************************************************************
函数名:cycleQueue_destroy
功  能:销毁一个循环队列
参  数:cycleQueue* q    循环队列的指针
返回值:操作的成功或失败
备  注:
*****************************************************************/
BOOL cycleQueue_destroy(cycleQueue* q)
{
    if (q == NULL) {
        printf("[Line %d] %s 传入的参数为NULL!\n", __LINE__, __FUNCTION__);
        return FALSE;
    }
    //释放队列元素的空间
    free(q->data);
    //释放队列结构的空间
    free(q);
    return TRUE;
}

/*****************************************************************
函数名:cycleEnQueue
功  能:循环队列的入队操作
参  数:cycleQueue* q    循环队列的指针
        elemType val    待入队的数值
返回值:操作的成功或失败
备  注:
*****************************************************************/
BOOL cycleEnQueue(cycleQueue* q, elemType val)
{
    if (q == NULL) {
        printf("[Line %d] %s 传入的参数为NULL!\n", __LINE__, __FUNCTION__);
        return FALSE;
    }
    判断队列是否已满
    //if (q->cnt == q->maxsize) {
    //    printf("[Line %d] %s 队列已满,入队失败!\n", __LINE__, __FUNCTION__);
    //    return FALSE;
    //}
    //给rear对应的元素空间进行赋值
    q->data[q->rear] = val;
    q->rear = (q->rear + 1) % q->maxsize;
    //队列元素数量+1
    q->cnt += 1;
    return TRUE;
}

/*****************************************************************
函数名:cycleDeQueue
功  能:循环队列的出队操作
参  数:cycleQueue* q    循环队列的指针
        elemType *p_val    指向存储出列数据的空间
返回值:操作的成功或失败
备  注:
*****************************************************************/
BOOL cycleDeQueue(cycleQueue* q, elemType *p_val)
{
    if (q == NULL || p_val == NULL) {
        printf("[Line %d] %s 传入的参数为NULL!\n", __LINE__, __FUNCTION__);
        return FALSE;
    }
    //判断队列是否为空
    if (q->cnt == 0) {
        printf("[Line %d] %s 队列为空,出队失败!\n", __LINE__, __FUNCTION__);
        return FALSE;
    }
    //使用front对应的元素进行赋值
    *p_val = q->data[q->front];
    q->front = (q->front + 1) % q->maxsize;
    //队列元素数量+1
    q->cnt -= 1;
    return TRUE;
}

头文件

#ifndef _CYCLEQUEUE_H_
#define _CYCLEQUEUE_H_

typedef int elemType;

typedef struct {
    elemType* data;    //指向用于存储队列元素的空间
    int front;        //表示首个元素的下标
    int rear;        //表示末尾元素的下一个位置的下标
    int maxsize;    //用于表示队列最大容量
    int cnt;        //用于当前队列元素个数
}cycleQueue;

typedef enum {
    FALSE = 0,
    TRUE,
}BOOL;

cycleQueue* cycleQueue_create(int maxsize);
BOOL cycleQueue_destroy(cycleQueue* q);
BOOL cycleEnQueue(cycleQueue* q, elemType val);
BOOL cycleDeQueue(cycleQueue* q, elemType* p_val);


#endif // !_CYCLEQUEUE_H_
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值