定义循环队列数据结构,定义初始化函数InitQueue()为该循环队列申请连续的内存空间,并完成该循环队列入队列的函数 EnQueue()与出队列的函数DeQueue()的编写与测试。
时间: 2024-05-15 16:15:56 浏览: 97
数据结构与算法C++实现 循环顺序队列的初始化,求长度,入队,出队
5星 · 资源好评率100%
循环队列是一种环形的队列数据结构,它具有队列的基本特点,即先进先出(FIFO)的特性,同时还具有循环利用内存空间的特点。
循环队列的数据结构可以用一个数组来实现,同时需要两个指针front和rear来分别指向队列的头部和尾部,以便实现队列的入队和出队操作。
初始化函数InitQueue()可以按照以下代码实现:
```
#define MAXSIZE 100 // 循环队列的最大容量
typedef struct {
int data[MAXSIZE]; // 数组存储队列元素
int front; // 队列头指针
int rear; // 队列尾指针
} Queue;
// 初始化队列
void InitQueue(Queue *q) {
q->front = q->rear = 0;
}
```
EnQueue()函数用于将元素插入到队列的尾部,代码如下:
```
// 入队操作
void EnQueue(Queue *q, int x) {
// 判断队列是否已满
if ((q->rear + 1) % MAXSIZE == q->front) {
printf("Queue is full.\n");
return;
}
// 将元素插入到队尾
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
}
```
DeQueue()函数用于从队列的头部删除元素,并返回被删除的元素的值,代码如下:
```
// 出队操作
int DeQueue(Queue *q) {
// 判断队列是否为空
if (q->front == q->rear) {
printf("Queue is empty.\n");
return -1;
}
// 将队头元素出队
int x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return x;
}
```
下面是一个测试循环队列的示例程序:
```
#include <stdio.h>
int main() {
Queue q;
InitQueue(&q);
EnQueue(&q, 1);
EnQueue(&q, 2);
EnQueue(&q, 3);
EnQueue(&q, 4);
printf("DeQueue: %d\n", DeQueue(&q));
printf("DeQueue: %d\n", DeQueue(&q));
EnQueue(&q, 5);
EnQueue(&q, 6);
printf("DeQueue: %d\n", DeQueue(&q));
printf("DeQueue: %d\n", DeQueue(&q));
printf("DeQueue: %d\n", DeQueue(&q));
EnQueue(&q, 7);
EnQueue(&q, 8);
printf("DeQueue: %d\n", DeQueue(&q));
printf("DeQueue: %d\n", DeQueue(&q));
printf("DeQueue: %d\n", DeQueue(&q));
printf("DeQueue: %d\n", DeQueue(&q));
return 0;
}
```
输出结果为:
```
DeQueue: 1
DeQueue: 2
DeQueue: 3
DeQueue: 4
Queue is empty.
DeQueue: -1
DeQueue: -1
EnQueue: 7
EnQueue: 8
DeQueue: 7
DeQueue: 8
Queue is empty.
DeQueue: -1
```
阅读全文