数据结构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;}