在C语言编程中,如何定义一个队列存放结构体,写出利用链表实现过程
时间: 2024-12-02 08:16:57 浏览: 35
在C语言中,定义一个队列存放结构体通常会涉及到使用动态内存分配和链表数据结构。这里是一个基本的例子,我们假设有一个名为`Person`的结构体,包含`name`和`age`两个成员:
```c
// 定义 Person 结构体
struct Person {
char name[50];
int age;
};
// 定义队列节点
typedef struct QueueNode {
struct Person data; // 存放 Person 结构体
struct QueueNode* next; // 指向下一个节点的指针
} QueueNode;
// 队列头结点和尾指针
QueueNode* queue_head = NULL;
QueueNode* queue_tail = NULL;
```
为了实现队列功能,我们还需要提供一些操作函数,如入队、出队以及判断队列是否为空等:
```c
// 函数声明
void enqueue(struct Person new_person); // 入队
struct Person dequeue(void); // 出队
bool is_empty(void); // 判断队列是否为空
// 实现函数
void enqueue(struct Person new_person) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
if (newNode != NULL) {
strcpy(newNode->data.name, new_person.name);
newNode->data.age = new_person.age;
newNode->next = NULL;
if (queue_tail == NULL) { // 如果队列为空
queue_head = newNode;
queue_tail = newNode;
} else {
queue_tail->next = newNode;
queue_tail = newNode;
}
} else {
printf("Memory allocation failed!\n");
}
}
struct Person dequeue() {
if (is_empty()) {
printf("Queue is empty.\n");
return (struct Person){NULL, 0};
}
struct Person removed_person = queue_head->data;
QueueNode* temp = queue_head;
queue_head = queue_head->next;
free(temp); // 释放旧节点
if (queue_head == NULL) {
queue_tail = NULL;
}
return removed_person;
}
bool is_empty() {
return queue_head == NULL;
}
```
阅读全文