用c➕➕描述循环队列每种操作在顺序循环队列或链队上的实现
时间: 2024-05-09 18:16:03 浏览: 180
循环队列的基本操作的c算法实现
循环队列可以使用顺序存储结构或链式存储结构实现。以下是使用 C++ 描述的循环队列在顺序循环队列或链队上的操作实现。
## 顺序循环队列
### 定义循环队列的结构体
```c++
#define MAXSIZE 100 // 循环队列的最大长度
typedef struct {
int data[MAXSIZE]; // 存储队列元素的数组
int front; // 头指针,指向队首元素
int rear; // 尾指针,指向队尾元素的下一个位置
} SqQueue;
```
### 初始化循环队列
```c++
void InitQueue(SqQueue &Q) {
Q.front = Q.rear = 0;
}
```
### 判断循环队列是否为空
```c++
bool IsEmpty(SqQueue Q) {
return Q.front == Q.rear;
}
```
### 判断循环队列是否已满
```c++
bool IsFull(SqQueue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front;
}
```
### 入队操作
```c++
bool EnQueue(SqQueue &Q, int x) {
if (IsFull(Q)) {
return false; // 队列已满,无法入队
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MAXSIZE; // 循环队列的下一个位置
return true;
}
```
### 出队操作
```c++
bool DeQueue(SqQueue &Q, int &x) {
if (IsEmpty(Q)) {
return false; // 队列为空,无法出队
}
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MAXSIZE; // 循环队列的下一个位置
return true;
}
```
## 链式循环队列
### 定义循环队列的结构体
```c++
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
typedef struct {
LinkList front; // 头指针,指向队首元素
LinkList rear; // 尾指针,指向队尾元素
} LinkQueue;
```
### 初始化循环队列
```c++
void InitQueue(LinkQueue &Q) {
Q.front = Q.rear = new LNode;
Q.front->next = NULL;
}
```
### 判断循环队列是否为空
```c++
bool IsEmpty(LinkQueue Q) {
return Q.front == Q.rear;
}
```
### 入队操作
```c++
void EnQueue(LinkQueue &Q, int x) {
LNode *p = new LNode;
p->data = x;
p->next = NULL;
Q.rear->next = p;
Q.rear = p; // 尾指针后移
}
```
### 出队操作
```c++
bool DeQueue(LinkQueue &Q, int &x) {
if (IsEmpty(Q)) {
return false; // 队列为空,无法出队
}
LNode *p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
Q.rear = Q.front; // 队列中只有一个元素,出队后尾指针指向头结点
}
delete p;
return true;
}
```
阅读全文