使用C语言将循环队列元素逆置
时间: 2023-05-30 16:01:53 浏览: 288
以下是使用C语言将循环队列元素逆置的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
int isEmpty(Queue q) {
return q.front == q.rear;
}
int isFull(Queue q) {
return (q.rear + 1) % MAX_SIZE == q.front;
}
void enqueue(Queue *q, int value) {
if (isFull(*q)) {
printf("Queue is full!\n");
return;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
}
int dequeue(Queue *q) {
if (isEmpty(*q)) {
printf("Queue is empty!\n");
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
void reverseQueue(Queue *q) {
int temp[MAX_SIZE], i = 0;
while (!isEmpty(*q)) {
temp[i++] = dequeue(q);
}
for (int j = i - 1; j >= 0; j--) {
enqueue(q, temp[j]);
}
}
void printQueue(Queue q) {
while (!isEmpty(q)) {
printf("%d ", dequeue(&q));
}
printf("\n");
}
int main() {
Queue q;
initQueue(&q);
for (int i = 1; i <= 5; i++) {
enqueue(&q, i);
}
printf("Original queue: ");
printQueue(q);
reverseQueue(&q);
printf("Reversed queue: ");
printQueue(q);
return 0;
}
```
该代码中,我们定义了一个循环队列结构体 Queue,其中包含了队列的数据和队头、队尾指针。我们实现了队列的初始化、判空、判满、入队、出队、逆置和打印等函数。
在逆置函数中,我们先将队列中的元素全部出队并保存到一个临时数组中,然后再将临时数组中的元素按逆序入队到队列中。
在主函数中,我们初始化了一个循环队列,将一些元素入队,并依次打印出原始队列和逆置后的队列。运行结果如下:
```
Original queue: 1 2 3 4 5
Reversed queue: 5 4 3 2 1
```
阅读全文