您的位置:首页 > 编程语言 > C语言/C++

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

2016-12-25 17:52 429 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 数据结构