顺序(循环)队列基本操作的实现
时间: 2023-07-24 13:37:53 浏览: 92
循环顺序队列各种基本操作的实现
顺序队列是一种基于数组的队列数据结构,其基本操作包括以下几个:
1. 初始化队列:创建一个空的数组作为队列的存储空间,并设置队头和队尾指针为0。
2. 入队操作:将一个元素添加到队列的末尾,即队尾指针指向的位置,并将队尾指针加1。如果队列已满,则无法添加元素。
3. 出队操作:将队头指针指向的元素从队列中删除,并将队头指针加1。如果队列已空,则无法删除元素。
4. 获取队头元素:返回队头指针指向的元素,但不删除它。如果队列已空,则返回空值。
下面是基于数组的顺序队列的代码实现:
```c++
#define MAXSIZE 100 // 定义队列的最大容量
typedef struct {
int data[MAXSIZE]; // 存放队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue &Q) {
Q.front = Q.rear = 0; // 队头和队尾指针都指向0
}
// 判断队列是否为空
bool IsEmpty(SqQueue Q) {
return Q.front == Q.rear; // 队头和队尾指针相等时队列为空
}
// 判断队列是否已满
bool IsFull(SqQueue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front; // 队尾指针的下一个位置等于队头指针时队列已满
}
// 入队操作
bool EnQueue(SqQueue &Q, int x) {
if (IsFull(Q)) return false; // 队列已满无法入队
Q.data[Q.rear] = x; // 将元素添加到队尾指针指向的位置
Q.rear = (Q.rear + 1) % MAXSIZE; // 队尾指针加1
return true;
}
// 出队操作
bool DeQueue(SqQueue &Q, int &x) {
if (IsEmpty(Q)) return false; // 队列已空无法出队
x = Q.data[Q.front]; // 取出队头指针指向的元素
Q.front = (Q.front + 1) % MAXSIZE; // 队头指针加1
return true;
}
// 获取队头元素
bool GetHead(SqQueue Q, int &x) {
if (IsEmpty(Q)) return false; // 队列已空无法获取队头元素
x = Q.data[Q.front]; // 取出队头指针指向的元素
return true;
}
```
需要注意的是,在判断队列是否已满时,需要使用取模运算来实现循环队列的特性。此外,在出队操作和获取队头元素时,需要使用引用参数来返回取出的元素。
阅读全文