队列的实现

数组

保留一个数组以及两个位置Front和Rear,分别代表队首和队尾。
当一个元素入队时,Rear加1;离队则Front-1。其中若超出了数组的范围,则循环到数组的开头

  • 类型声明及定义
struct QueueRecord;
typedef struct QueueRecord *Queue;
#define MinQueueSize (5)

struct QueueRecord{
	int Capacity;
	int Front;
	int Rear;
	int Size;
	int *Array;
}
  • 测试是否为空
int IsEmpty(Queue Q)
{
	return Q->Size==0;
}
  • 测试是否为满
int IsFull(Queue Q)
{
	return Q->Size==Q->Capacity;
}
  • 创建队列
Queue CreateQueue(int MaxQueueSize)
{
	Queue Q;
	Q=malloc(sizeof(struct QueueRecord));
	if(Q==NULL)
	{
		FatalError("Out of Space");
	}
	Q->Array=malloc(sizeof(int)*MaxQueueSize);
	if(Q->Array==NULL)
		FatalError("Out of Space");
	Q->Capacity=MaxQueueSize;
	MakeEmpty(Q);
	return Q
}

void MakeEmpty(Queue Q)
{
	Q->Size=0;
	Q->Front=1;
	Q->Rear=0;
}
  • 释放栈
void DisposeQueue(Queue Q)
{
	if(Q!=NULL)
	{
		free(Q->Array);
		free(Q);
	}
}
  • 入队
void Enqueue(int X,Queue Q)
{
	if(IsFull(Q))
		Error("Full Queue");
	else{
		Q->Size++;
		Q->Rear=Succ(Q->Rear,Q);
		Q->Array[Q->Rear]=X;
	}
}

//循环数组实现
int Succ(int Value,Queue Q)
{
	if(++Value==Q->Capacity)
		value=0;
	return Value;
}
  • 出队
void Dequeue(Queue Q)
{
	if(IsEmpty(Q))
		Error("Empty Queue");
	else{
		Q->Size--;
		Q->Front=Succ(Q->Front,Q);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值