帮我写出链队的查找,插入,删除的C语言代码
时间: 2024-10-12 14:08:12 浏览: 5
在C语言中,我们可以使用结构体和指针来实现一个简单的单向链表队列。这里是一个基础的链队列操作的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 链队节点结构
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 链队结构
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
} Queue;
// 初始化空队列
Queue* createQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
queue->rear = NULL;
return queue;
}
// 查找元素(若队列为空则返回0)
int findElement(Queue* queue, int value) {
QueueNode* current = queue->front;
while (current != NULL) {
if (current->data == value)
return 1; // 找到元素,返回1
current = current->next;
}
return 0; // 没找到元素,返回0
}
// 插入元素(在队尾添加)
void enqueue(Queue* queue, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 删除元素(移除并返回队首元素,若队列为空则返回NULL)
int* dequeue(Queue* queue) {
if (queue->front == NULL)
return NULL;
int* removedValue = &queue->front->data;
QueueNode* temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) // 如果队列只剩下一个节点
queue->rear = NULL;
free(temp); // 释放原队首节点内存
return removedValue;
}
// 关闭队列(释放所有节点内存)
void destroyQueue(Queue* queue) {
QueueNode* current = queue->front;
while (current != NULL) {
QueueNode* temp = current;
current = current->next;
free(temp);
}
free(queue);
}
int main() {
Queue* q = createQueue();
enqueue(q, 1);
enqueue(q, 2);
enqueue(q, 3);
printf("Find element 2: %d\n", findElement(q, 2)); // 输出1
int* removed = dequeue(q);
if (removed) {
printf("Removed element: %d\n", *removed);
}
destroyQueue(q);
return 0;
}
```