实现链队列的初始化、判断队列是否为空、入队和出队的操作老式c语言
时间: 2024-10-13 16:15:08 浏览: 58
在老式的 C 语言中,我们可以手动创建一个链表结构来实现链队列。以下是链队列的基本操作:
1. **初始化** (Queue initialization):
```c
typedef struct Node {
int data; // 存储数据的域
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 初始化空链队列
QueueNode* initQueue() {
QueueNode* queue = (QueueNode*)malloc(sizeof(QueueNode));
queue->data = -1;
queue->next = NULL;
return queue;
}
```
这里我们创建了一个指向`QueueNode`结构体的指针,并将其所有成员都设置为默认值。
2. **判断队列是否为空** (Check if the queue is empty):
```c
bool isEmpty(QueueNode* queue) {
return queue->next == NULL;
}
```
通过检查`next`字段是否为`NULL`来判断队列是否为空。
3. **入队操作** (Enqueue or Add an element):
```c
void enqueue(QueueNode** front, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = *front; // 将新节点链接到当前头结点之后
*front = newNode; // 更新头结点
}
```
这会将新的`value`插入队列头部。
4. **出队操作** (Dequeue or Remove an element):
```c
int dequeue(QueueNode** front) {
if (isEmpty(*front)) {
printf("Queue is empty.\n");
return -1; // 或者抛出错误
}
int removedValue = (*front)->data;
QueueNode* temp = *front;
*front = (*front)->next;
free(temp); // 释放已移除节点的内存
return removedValue;
}
```
首先检查队列是否为空,然后取出并返回头结点的数据,更新头结点并将旧节点释放。
阅读全文