C语言里顺序存储结构下循环队列,C语言实现顺序存储结构的循环链表

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

#include

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值