天天看点

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

对队列的顺序表示的改进

队满

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

但是队空时font下标和rear下标也是相等的,为了区分,可以采用下面这种方式font=rear+1表示队满

也可以采用设一个标志位判断空还是满

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

入队

void EnQueue(Queue *Q, ElemType x)
{
	if(((Q->rear+1)%MAXSIZE) == Q->front)//若队满退出
		return;

	Q->base[Q->rear] = x;
	Q->rear = (Q->rear+1)%MAXSIZE;//尾指针的下标永远在0——MAXSIAZE-1之间
}
           
C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

打印输出

void ShowQueue(Queue *Q)
{
	for(int i=Q->front; i!=Q->rear;)//!=Q->rear说明没有结束
	{
		printf("%d ",Q->base[i]);
		i = (i+1)%MAXSIZE;//不能顺序的加,循环起来加
	}
	printf("\n");
}
           

出队

void DeQueue(Queue *Q)
{
	if(Q->front == Q->rear)
		return;
	Q->front = (Q->front+1)%MAXSIZE;
}
           

测试

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

分析

想存进去8个元素,只能存7个,最后一个位置留空区分队满和队空

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

出队一个元素后,实际上1并没有出去

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

插入一个元素后,rear下标变为0,新元素插入到原来下标为7的位置

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

继续出队一个元素,其实要出队的内存数据不会删除,只是改变下标位置

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

这时rear指针是0,再插入一个元素,就在0下标处覆盖原来的值以达到出队再入队的效果。

rear++,到1的位置,rear+1等于front=2了,说明队列满了。

C语言实现循环队列(队列的顺序表示的改进)对队列的顺序表示的改进测试

继续阅读