数据结构C语言实现之循环队列

来源:互联网 发布:管家婆端口号 编辑:程序博客网 时间:2024/04/29 16:39
#include <stdio.h>#include <stdlib.h>//定义函数结果状态码#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0//定义循环队列空间大小#define QUEUESIZE 20//定义数据类型typedef int ElemType ;//定义程序返回状态类型typedef int State;//循环队列存储结构typedef struct _CircleQueue{    ElemType data[QUEUESIZE];//存储队列元素    int front;//队列头指针    int rear;//队列尾指针    int count;//队列元素个数}CircleQueue;/*************************************************Function:       InitQueueDescription:    初始化,构造空队列Input:          队列指针 CircleQueue *queueOutput:Return:         成功返回OKOthers:         空队列 queue->front = queue->rear = 0*************************************************/State InitQueue(CircleQueue *queue){    queue->front = queue->rear = 0;    queue->count = 0;    return OK;}//判断队列为空和满//1、使用计数器count,队列为空和满时,front都等于rear//2、少用一个元素的空间,约定队列满时:(rear+1)%QUEUESIZE=front,为空时front=rear//rear指向队尾元素的下一个位置,始终为空;队列的长度为(rear-front+QUEUESIZE)%QUEUESIZE/*************************************************Function:       IsQueueEmptyDescription:    队列是否为空Input:          队列指针 CircleQueue *queueOutput:Return:         为空返回TRUE,否则返回FALSEOthers:*************************************************/State IsQueueEmpty(CircleQueue *queue){    if(queue->count == 0)        return TRUE;    else        return FALSE;}/*************************************************Function:       IsQueueFullDescription:    队列是否为满Input:          队列指针 CircleQueue *queueOutput:Return:         为满返回TRUE,否则返回FALSEOthers:*************************************************/State IsQueueFull(CircleQueue *queue){    if(queue->count == QUEUESIZE)        return TRUE;    else        return FALSE;}/*************************************************Function:       EnQueueDescription:    入队Input:          队列指针 CircleQueue *queue                数据元素   ElemType eOutput:Return:         成功返回OK,失败返回ERROROthers:*************************************************/State EnQueue(CircleQueue *queue, ElemType e){    //验证队列是否已满    if(queue->count == QUEUESIZE)    {        printf("The queue is full");        return ERROR;    }    //入队    queue->data[queue->rear] = e;    //对尾指针后移    queue->rear = (queue->rear + 1) % QUEUESIZE;    //更新队列长度    queue->count++;    return OK;}/*************************************************Function:       DeQueueDescription:    出队Input:          队列指针 CircleQueue *queueOutput:Return:         成功返回数据元素,失败程序退出Others:*************************************************/ElemType DeQueue(CircleQueue *queue){    //判断队列是否为空    if(queue->count == 0)    {        printf("The queue is empty!");        exit(EXIT_FAILURE);    }    //保存返回值    ElemType e = queue->data[queue->front];    //更新队头指针    queue->front = (queue->front + 1) % QUEUESIZE;    //更新队列长度    queue->count--;    return e;}/*************************************************Function:       GetHeadDescription:    取队头元素Input:          队列指针 CircleQueue *queueOutput:Return:         成功返回数据元素,否则程序退出Others:*************************************************/ElemType GetHead(CircleQueue *queue){    //判断队列是否为空    if(queue->count == 0)    {        printf("The queue is empty!");        exit(EXIT_FAILURE);    }    return queue->data[queue->front];}/*************************************************Function:       ClearQueueDescription:    清空队列Input:          队列指针 CircleQueue *queueOutput:Return:         成功返回OKOthers:*************************************************/State ClearQueue(CircleQueue *queue ){    queue->front = queue->rear = 0;    queue->count = 0;    return OK;}/*************************************************Function:       GetLengthDescription:    取得队列的长度Input:          队列指针 CircleQueue *queueOutput:Return:         返回队列的长度Others:*************************************************/int GetLength(CircleQueue *queue){    return queue->count;}

原创粉丝点击