数据结构和算法—循环队列

了解循环队列之前, 先熟悉一下队列和链队列,这样可以更好的理解循环队列

队列
链队列

循环队列为空的条件:(q->front == q->rear) 为空

循环队列为满的情况也是q->front == q->rear,
解决方法:空出一元素, 作为满的条件
如图:
在这里插入图片描述
循环队列为满的条件:(q->rear+1 == Q->front) 为满

代码实现

#include <iostream>
#include <Windows.h>
#include <stdio.h>

#define MAX_SIZE  10

// 循环队列的定义
typedef int ELEM;

typedef struct _Queue{
	ELEM date[MAX_SIZE];
	int front;
	int rear;
}Queue;

// 队列的初始化
void initQueue(Queue& q) {
	q.front = q.rear = 0;
}

//队列是否为空
bool empty(Queue& q) {
	if(q.front == q.rear) return true;
	return false;
}

//队列是否为满
bool full(Queue& q) {
	if(q.rear+1 == q.front) return true;
	return true;
}

// 入队
bool EnQueue(Queue& q, ELEM& e) {
	if(full(q)) return false;

	q.date[q.rear] = e;
	q.rear = (q.rear+1)%MAX_SIZE;
	return true;
}

// 出队
bool DeQueue(Queue& q, ELEM& e) {
	if(empty(q)) return false;
	
	e = q.date[q.front];
	
	q.front=(q.front+1)%MAX_SIZE;
	return true;
}

// 获取长度
int length(Queue& q) {
	return (q.rear-q.front+MAX_SIZE)%MAX_SIZE;
}

//获取首元素
void getElem(Queue& q, ELEM& e) {
	if(empty(q)) return;

	e = q.date[q.front];
}

万变不离其宗,队列不过是受限制的线性表…先进先出是原理,记住这个就可以了

发布了18 篇原创文章 · 获赞 2 · 访问量 224

猜你喜欢

转载自blog.csdn.net/weixin_44238530/article/details/102647938