队列之顺序队列

队列

原理:
<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;
}
上一篇:Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)


下一篇:数据结构-PTA-银行业务队列简单模拟