C语言实现顺序存储结构的循环链表

来源:互联网 发布:mac pro 必备软件 编辑:程序博客网 时间:2024/05/19 11:50

SqQueue.h

////////////////////////////////////////////////////////////////////用顺序存储结构表示的循环队列/////////////////////////////////////////////////////////////////#ifndef _SQQUEUE_H_#define _SQQUEUE_H_#define MAXQSIZE 100//最大队列长度typedef int QElemType;typedef struct{QElemType *base;//初始化的动态分配存储空间int front;//头指针,若队列不空,指向队列头元素int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置}SqQueue;bool InitQueue(SqQueue *Q);//初始化一个队列bool DestroyQueue(SqQueue *Q);//销毁一个队列bool ClearQueue(SqQueue *Q);//清空一个队列bool QueueEmpty(SqQueue Q);//判断队列是否为空unsigned int QueueLength(SqQueue Q);//返回队列的长度bool GetHead(SqQueue Q, QElemType *e);//获取队列头元素bool EnQueue(SqQueue *Q, QElemType e);//在队列中插入元素bool DeQueue(SqQueue *Q, QElemType *e);//在队列中删除元素#endif

SqQueue.cpp

#include <stdio.h>#include <stdlib.h>#include "SqQueue.h"//构造一个新队列bool InitQueue(SqQueue *Q){Q->base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));if(NULL == Q->base){printf("error malloc!");return false;}Q->front = Q->rear = 0;return true;}//销毁一个队列bool DestroyQueue(SqQueue *Q){if(NULL == Q->base){printf("Invalid queue!");return false;}free(Q->base);Q->base = NULL;Q->front = Q->rear = 0;return true;}//清空一个队列bool ClearQueue(SqQueue *Q){if(NULL == Q->base){printf("Invalid queue!");return false;}Q->front = Q->rear = 0;return true;}//判断队列是否为空bool QueueEmpty(SqQueue Q){if(NULL == Q.base){printf("Invalid queue!");return false;}return (Q.front == Q.rear ? true : false);}//返回队列中元素的个数unsigned int QueueLength(SqQueue Q){if(NULL == Q.base){printf("Invalid queue!");return 0;}return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;}//获取队列头元素bool GetHead(SqQueue Q, QElemType *e){if(NULL == Q.base){printf("Invalid queue!");return false;}*e = Q.base[Q.front];return true;}//在队列中插入元素bool EnQueue(SqQueue *Q, QElemType e){if(NULL == Q->base){printf("Invalid queue!");return false;}if((Q->rear + 1) % MAXQSIZE == Q->front){printf("Full queue!");return false;}Q->base[Q->rear++] = e;if(Q->rear == MAXQSIZE)Q->rear = 0;//也可以写成下式/*Q->base[Q->rear] = e;Q->rear = (Q->rear + 1) % MAXQSIZE;*/return true;}//在队列中删除元素bool DeQueue(SqQueue *Q, QElemType *e){if(QueueEmpty(*Q))return false;*e = Q->base[Q->front++];if(Q->front == MAXQSIZE)Q->front = 0;//也可以写成下式/**e = Q->base[Q->front];Q->front = (Q->front + 1) % MAXQSIZE;*/return true;}


0 0