其他分享
首页 > 其他分享> > 队列之顺序队列

队列之顺序队列

作者:互联网

队列

原理:
<1> 队列是一种受限的线性结构
<2> 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

队列的顺序存储

用数组来存储队列的元素,设立一个队首(front)用来表示队首元素的下标,设立一个队尾(rear)用来表示队尾元素的下标。

其结构体定义如下

typedef struct Queue{
	dataType queue[MAX_SIZE];
	int front;
	int rear;
}SqQueue;

算法实现:

初始化顺序队列

bool initQueue(SqQueue*& Q) {
	if (!Q) return false;
	Q->front = Q->rear = 0;
	return true;	
}

判断队列元素存储空满情况

//判断队列是否为满
bool isQueueFull(SqQueue*& Q) {
	if (!Q) return false;
	if (Q->rear == MAX_SIZE) return true;
	return false;
}
//判断队列是否为空
bool isQueueEmpty(SqQueue*& Q) {
	if (!Q) return false;
	if (Q->rear == Q->front) return true;
	return false;
}

插入一个元素在队尾

bool QueueInsert(SqQueue*& Q, dataType data) {
	if (!Q) return false;
	if (isQueueFull(Q))
	{
		cout << "队列已满,无法插入数据!" << endl;
		return false;
	}
	Q->queue[Q->rear++] = data;
	return true;
}

队首出列

关于队首出列算法实现有两种思路
<1>删除front所指的元素,并将其后所有元素前移一个位置。
<2>直接将front所指的位置后移一位
其中第一种思路并不会使存储空间变小,但是所有元素前移浪费时间。
第二种思路会使存储空间表笑,但是不会移动元素。
这里实现第二种思路的代码

//出列队首元素,并将此元素存储在data里
bool QueueDelete(SqQueue*& Q,dataType &data) {
	if (!Q) return false;
	if (isQueueEmpty(Q))
	{
		cout << "队列已空,无法出数据!" << endl;
		return false;
	}
	data = Q->queue[Q->front];
	Q->front++;
	return true;
}

遍历队列

void printQueue(SqQueue*& Q) {
	if (!Q)
		return;
	if (isQueueEmpty(Q)) {
		cout << "队列是空的!" << endl;
		return;
	}
	for ( int i = Q->front;i < Q->rear;i++) {
		cout << Q->queue[i] << endl;
	}
	return;
}

标签:顺序,false,队列,SqQueue,front,return,rear
来源: https://www.cnblogs.com/Ybossy/p/12867307.html