链队列的入队出队c语言
时间: 2024-10-25 21:01:17 浏览: 28
C语言版实现链队列
链队列是一种线性数据结构,它使用节点来存储数据,并通过指针链接这些节点。在C语言中,我们可以使用结构体表示队列节点,以及两个指针,一个指向队列头部(front),一个指向队列尾部(rear)。
**入队操作(Enqueue)**:
1. 创建一个新的节点,将新元素的数据存放在这个节点。
2. 如果队列为空(front == rear),则直接将新的头结点设置为新创建的节点。
3. 否则,新节点的next指向当前尾节点,然后更新尾部指针(rear->next = new_node; rear = new_node;)。
**出队操作(Dequeue)**:
1. 检查队列是否为空(front == rear)。如果为空,说明队列已空,返回NULL或抛出异常。
2. 将队首节点的数据复制到结果变量,然后删除队首(front),即head->next赋值给front,同时可能需要更新front指针(front = front->next;)。
**示例代码** (简化版):
```c
typedef struct Node {
int data;
struct Node* next;
} QueueNode;
struct Queue {
QueueNode* front;
QueueNode* rear;
};
// 入队
void enqueue(Queue* q, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
if (q->rear == NULL) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队
int dequeue(Queue* q) {
if (q->front == NULL) {
return -1; // 或者抛出异常
}
int value = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next;
if (q->front == NULL) {
free(temp); // 清理队尾
q->rear = NULL;
}
return value;
}
阅读全文