用c实现链队出队列操作并把主函数也写出来
时间: 2024-11-12 10:33:46 浏览: 29
在C语言中,我们可以使用结构体和指针来实现链队的数据结构。这里是一个简单的单向链表出队列操作的示例,包括一个`Node`结构体,一个`Queue`结构体以及相关的插入和删除函数。请注意,这里假设我们已经定义了一个`Node`结构体,包含数据域`data`和下一个节点的指针`next`。
```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* queue) {
queue->front = queue->rear = NULL;
}
// 入队操作(添加元素到队尾)
void enqueue(Queue* queue, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) { // 列表为空
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队操作(移除并返回队首元素)
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Queue is empty.\n");
return -1; // 返回错误值表示队列空
}
int removedValue = queue->front->data;
Node* temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) { // 队列只剩一个元素
queue->rear = NULL;
}
free(temp); // 释放内存
return removedValue;
}
// 主函数示例
int main() {
Queue myQueue;
initQueue(&myQueue);
// 入队操作
enqueue(&myQueue, 1);
enqueue(&myQueue, 2);
enqueue(&myQueue, 3);
// 出队操作
printf("Dequeued element: %d\n", dequeue(&myQueue)); // 输出:Dequeued element: 1
// 再次尝试出队
printf("Dequeued element: %d\n", dequeue(&myQueue)); // 输出:Dequeued element: 2
// 验证队列是否为空
if (dequeue(&myQueue) != -1) {
printf("Error: Dequeuing from an empty queue.\n");
}
return 0;
}
```
在这个示例中,首先初始化一个空队列,然后入队三个元素,再依次出队并打印元素。注意在队列为空时会给出提示。主函数展示了如何在实际程序中使用这些功能。
阅读全文