循环队列基本操作实现
时间: 2023-10-28 17:07:17 浏览: 147
循环队列的基本操作和实现
4星 · 用户满意度95%
循环队列的基本操作包括初始化、入队、出队、求队列长度、求队头元素、判空、清空和销毁等。以下是循环队列基本操作的实现方法:
1. 初始化:创建一个空的循环队列,需要指定队列的最大长度。
2. 入队:将元素插入到队列的队尾,如果队列已满则无法插入。
3. 出队:将队列的队头元素删除并返回,如果队列为空则无法删除。
4. 求队列长度:返回队列中元素的个数。
5. 求队头元素:返回队列的队头元素,但不删除。
6. 判空:判断队列是否为空。
7. 清空:清空队列中的所有元素。
8. 销毁:销毁队列,释放内存空间。
以下是一个基于顺序表实现的循环队列的代码示例:
```
#define MAXSIZE 100 // 队列的最大长度
typedef struct {
int data[MAXSIZE]; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
} CircularQueue;
// 初始化循环队列
void InitQueue(CircularQueue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(CircularQueue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int IsFull(CircularQueue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
// 入队
int EnQueue(CircularQueue *q, int x) {
if (IsFull(q)) {
return 0; // 队列已满,无法插入
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
return 1;
}
// 出队
int DeQueue(CircularQueue *q, int *x) {
if (IsEmpty(q)) {
return 0; // 队列为空,无法删除
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return 1;
}
// 求队列长度
int QueueLength(CircularQueue *q) {
return (q->rear - q->front + MAXSIZE) % MAXSIZE;
}
// 求队头元素
int GetHead(CircularQueue *q, int *x) {
if (IsEmpty(q)) {
return 0; // 队列为空,无法获取队头元素
}
*x = q->data[q->front];
return 1;
}
// 清空队列
void ClearQueue(CircularQueue *q) {
q->front = q->rear = 0;
}
// 销毁队列
void DestroyQueue(CircularQueue *q) {
free(q);
}
```
阅读全文