用指针实现队列的代码
时间: 2024-04-24 19:23:25 浏览: 78
用指针实现队列
下面是使用指针实现队列的示例代码(使用链表实现):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义队列节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 定义队列结构
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = NULL;
q->rear = NULL;
}
// 判断队列是否为空
int isEmpty(Queue* q) {
return (q->front == NULL);
}
// 入队操作
void enqueue(Queue* q, int data) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (isEmpty(q)) {
// 队列为空,新节点为队头和队尾
q->front = newNode;
q->rear = newNode;
} else {
// 将新节点加入队尾
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队操作
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1; // 返回一个特殊值表示出错
}
// 取出队头节点数据并删除节点
int data = q->front->data;
Node* temp = q->front;
q->front = q->front->next;
free(temp);
// 如果队列为空,则重置队尾指针
if (q->front == NULL) {
q->rear = NULL;
}
return data;
}
// 打印队列元素
void printQueue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return;
}
Node* temp = q->front;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf("Queue: ");
printQueue(&q);
int data = dequeue(&q);
printf("Dequeued element: %d\n", data);
printf("Queue after dequeue: ");
printQueue(&q);
return 0;
}
```
这个示例代码使用链表来实现队列,通过结构体指针 `front` 和 `rear` 分别指向队列的头部和尾部。入队操作通过创建新的节点并将其加入队尾,出队操作则取出队头节点并删除。`isEmpty()` 函数用于判断队列是否为空,`printQueue()` 函数用于打印队列中的元素。在 `main()` 函数中,我们进行了一些入队和出队操作,并打印队列的状态。
阅读全文