用循环数组实现队列

Queue.h

#ifndef _QUEUE_H

typedef struct Queue * PtrQueue;

void MakeEmpty(PtrQueue Q);
PtrQueue CreateQueue(int maxSize);
bool IsEmpty(PtrQueue Q);
bool IsFull(PtrQueue Q);
void DeleteQueue(PtrQueue Q);
void EnQueue(PtrQueue Q, int X);
int DeQueue(PtrQueue Q);

#endif //_QUEUE_H

struct Queue
{
	int capacityOfQueue;
	int sizeOfQueue;
	int frontOfQueue;
	int rearOfQueue;
	int * arrayOfQueue;
};

Queue.cpp

#include "StdAfx.h"
#include "Queue.h"

PtrQueue CreateQueue(int maxSize)
{
	PtrQueue Q = NULL;
	Q = new Queue();
	if (Q == NULL)
		throw "Fail to new a queue!";

	Q->arrayOfQueue = new int[maxSize]();
	if (Q->arrayOfQueue == NULL)
		throw "Fail to new array of queue!";	
	Q->capacityOfQueue = maxSize;
	MakeEmpty(Q);

	return Q;
}

void MakeEmpty(PtrQueue Q)
{
	Q->sizeOfQueue = 0;
	Q->frontOfQueue = 0;
	Q->rearOfQueue = 0;
}

bool IsEmpty(PtrQueue Q)
{
	if (Q->sizeOfQueue == 0)
		return true;
	else
		return false;
}

bool IsFull(PtrQueue Q)
{
	if (Q->sizeOfQueue == Q->capacityOfQueue)
		return true;
	else
		return false;
}

void DeleteQueue(PtrQueue Q)
{
	if (Q)
	{
		delete[] Q->arrayOfQueue;
		Q->arrayOfQueue = NULL;
		delete Q;
		Q = NULL;
	}
}

void EnQueue(PtrQueue Q, int X)
{
	if (IsFull(Q))
		throw "Full queue!";
	else
	{
		Q->rearOfQueue = Q->rearOfQueue % Q->capacityOfQueue;
		Q->arrayOfQueue[Q->rearOfQueue++] = X;
		Q->sizeOfQueue++;
	}
}

int DeQueue(PtrQueue Q)
{
	if (IsEmpty(Q))
		throw "Empty queue!";
	else
	{
		Q->frontOfQueue = Q->frontOfQueue % Q->capacityOfQueue;
		Q->sizeOfQueue--;
		return Q->arrayOfQueue[Q->frontOfQueue++];
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值