队列

队列与堆栈不同,队列是一边进,另一边出的表,如下图所示:


队列的主要操作也比较少,主要的有入队,出队,检查队列是否为空,

队列一般会有两个标志位,即Front和Rear,表示对头和队尾,通过对这两个标志位进行操作,可以对队列进行适当的操作。


0) 数组形式声明与实现

struct QueueModel
{
	int Capacity;
	int Front;
	int Rear;
	int Size;
	ElementType *Array;
};

typedef struct QueueModel *Queue;
typedef int ElementType;
在这个声明中一个队列中有容量参数,2个标志位,一个大小参数,还有一个数组用来存储数据。

1) 判断队列为空

int IsEmpty(Queue Q)
{
	return Q->size==0;
}
通过对size的控制,来表示队列为空或非空。入队一个节点,则size+1,出队一个节点,则size-1.

2) 队列设置为空

void MakeEmpty(Queue Q)
{
	Q->Size = 0;
	Q->Front = 1;
	Q->Rear = 0;
}
3) 入队

void Enqueue(ELementType X,Queue Q)
{
	if(IsFull(Q))
		Error("The Queue is Full!!");
	else
	{
		Q->Size++;
		Q->Rear = Succ(Q->Rear,Q);
		Q->Array[Q->Rear] = X;
	}
}

int IsFull(Queue Q)
{
	return Q->Size==Q->Capacity;
}

static int Succ(int value,Queue Q)
{
	if(++value==Q->Capacity)
		value=0;
	return value;
}

4) 出队

ElementType DeQueue(Queue Q)
{
	ElementType tmp;	
	if(IsEmpty(Q))
		Error("The Queue is Empty!!");
	else
	{
		tmp = Q->Array[Q->Front];
		Q->Size--;
		Q->Front = Succ(Q->Front,Q);
	}
	return tmp;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值