队列的链式存储内容翻转C + +代码
时间: 2023-09-09 17:14:06 浏览: 66
以下是队列的链式存储内容翻转的 C 代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列的结构体
typedef struct _Node {
int data;
struct _Node* next;
} Node;
typedef struct _Queue {
Node* front;
Node* rear;
int size;
} Queue;
// 初始化队列
void init(Queue* queue) {
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
// 判断队列是否为空
int is_empty(Queue* queue) {
return queue->size == 0;
}
// 入队
void enqueue(Queue* queue, int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (is_empty(queue)) {
queue->front = node;
} else {
queue->rear->next = node;
}
queue->rear = node;
queue->size++;
}
// 出队
int dequeue(Queue* queue) {
if (is_empty(queue)) {
printf("Error: Queue is empty.\n");
return -1;
}
Node* node = queue->front;
int data = node->data;
queue->front = node->next;
free(node);
queue->size--;
return data;
}
// 翻转队列
void reverse(Queue* queue) {
Node* prev = NULL;
Node* curr = queue->front;
Node* next;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
queue->front = prev;
}
// 输出队列
void print(Queue* queue) {
Node* node = queue->front;
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Queue queue;
init(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
enqueue(&queue, 4);
printf("Original queue: ");
print(&queue);
reverse(&queue);
printf("Reversed queue: ");
print(&queue);
return 0;
}
```
注意,在这个代码示例中,我们使用了单向链表来实现队列的链式存储。如果你对链表的概念还不够熟悉,可以参考一些基础的链表教程来加深理解。