c语言数据结构新建一个队列,队列中每个元素的属性有id和name,实现入队和出队等操作
时间: 2024-10-27 21:02:12 浏览: 27
在C语言中,我们可以使用数组或链表来创建一个队列来存储具有id和name属性的元素。这里我们选择链表作为实现方式,因为链表在插入和删除操作上效率较高。首先,我们需要定义一个队列节点结构体`QueueNode`,然后创建一个全局队列头指针`QueueHead`。
```c
#include <stdio.h>
#include <stdlib.h>
// 队列节点结构体
typedef struct QueueNode {
int id;
char name[50];
struct QueueNode* next;
} QueueNode;
// 创建一个新的队列节点
QueueNode* create_node(int id, const char* name) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->id = id;
strcpy(newNode->name, name);
newNode->next = NULL;
return newNode;
}
// 初始化空队列
void initialize_queue(QueueNode** queueHead) {
*queueHead = NULL;
}
// 入队操作 - 在链表尾部添加新节点
void enqueue(QueueNode** queueHead, int id, const char* name) {
QueueNode* newNode = create_node(id, name);
if (*queueHead == NULL) {
*queueHead = newNode;
} else {
QueueNode* current = *queueHead;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 出队操作 - 删除并返回队首节点,如果队列为空则返回NULL
QueueNode* dequeue(QueueNode** queueHead) {
if (*queueHead == NULL) {
printf("Queue is empty.\n");
return NULL;
}
QueueNode* temp = *queueHead;
*queueHead = (*queueHead)->next;
free(temp); // 释放已删除节点的内存
return temp; // 返回已删除的节点
}
// 打印队列元素
void print_queue(QueueNode* node) {
while (node != NULL) {
printf("ID: %d, Name: %s\n", node->id, node->name);
node = node->next;
}
}
int main() {
QueueNode* queueHead = NULL;
initialize_queue(&queueHead);
enqueue(&queueHead, 1, "Alice");
enqueue(&queueHead, 2, "Bob");
print_queue(queueHead); // 输出:ID: 1, Name: Alice ID: 2, Name: Bob
QueueNode* dequeued = dequeue(&queueHead);
if (dequeued != NULL) {
printf("Dequeued: ID: %d, Name: %s\n", dequeued->id, dequeued->name);
}
return 0;
}
```
阅读全文