循环顺序队列 完成出队入队获取队列长度等操作
时间: 2024-01-22 08:03:22 浏览: 102
数据结构与算法C++实现 循环顺序队列的初始化,求长度,入队,出队
5星 · 资源好评率100%
循环顺序队列是一种基于数组实现的队列,其中队尾指针可以循环到队头。下面是循环顺序队列的出队、入队和获取队列长度等操作的实现。
1. 初始化队列
在初始化队列时,需要指定队列的最大长度,以便为队列分配必要的内存空间。同时,需要设置队头和队尾的初始位置。
```c++
#define MAXSIZE 100 // 队列的最大长度
typedef struct {
int data[MAXSIZE]; // 存储队列元素
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue &Q) {
Q.front = 0;
Q.rear = 0;
}
```
2. 入队操作
在入队操作时,需要先判断队列是否已满。如果队列未满,则将新元素插入到队尾,并将队尾指针后移一位。如果队尾指针已经到达数组末尾,则将其循环到数组的开头。
```c++
// 入队操作
bool EnQueue(SqQueue &Q, int x) {
if ((Q.rear + 1) % MAXSIZE == Q.front) { // 队列已满
return false;
}
Q.data[Q.rear] = x; // 将新元素插入到队尾
Q.rear = (Q.rear + 1) % MAXSIZE; // 队尾指针后移一位
return true;
}
```
3. 出队操作
在出队操作时,需要先判断队列是否为空。如果队列不为空,则将队头指针后移一位,并返回队头元素。如果队头指针已经到达数组末尾,则将其循环到数组的开头。
```c++
// 出队操作
bool DeQueue(SqQueue &Q, int &x) {
if (Q.front == Q.rear) { // 队列为空
return false;
}
x = Q.data[Q.front]; // 取出队头元素
Q.front = (Q.front + 1) % MAXSIZE; // 队头指针后移一位
return true;
}
```
4. 获取队列长度
获取队列长度可以通过计算队列中元素的个数来实现。由于队头和队尾指针可能出现循环到数组开头的情况,因此需要对队头指针和队尾指针的值进行特殊处理。
```c++
// 获取队列长度
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
```
完整代码如下:
```c++
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 队列的最大长度
typedef struct {
int data[MAXSIZE]; // 存储队列元素
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue &Q) {
Q.front = 0;
Q.rear = 0;
}
// 入队操作
bool EnQueue(SqQueue &Q, int x) {
if ((Q.rear + 1) % MAXSIZE == Q.front) { // 队列已满
return false;
}
Q.data[Q.rear] = x; // 将新元素插入到队尾
Q.rear = (Q.rear + 1) % MAXSIZE; // 队尾指针后移一位
return true;
}
// 出队操作
bool DeQueue(SqQueue &Q, int &x) {
if (Q.front == Q.rear) { // 队列为空
return false;
}
x = Q.data[Q.front]; // 取出队头元素
Q.front = (Q.front + 1) % MAXSIZE; // 队头指针后移一位
return true;
}
// 获取队列长度
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
int main() {
SqQueue Q;
InitQueue(Q);
EnQueue(Q, 1);
EnQueue(Q, 2);
EnQueue(Q, 3);
EnQueue(Q, 4);
EnQueue(Q, 5);
int length = QueueLength(Q);
cout << "队列长度为:" << length << endl;
int x;
DeQueue(Q, x);
cout << "出队元素为:" << x << endl;
length = QueueLength(Q);
cout << "队列长度为:" << length << endl;
return 0;
}
```
阅读全文