c语言代码新建一个队列,队列中的每个元素的属性有id和name,实现入队和出队等操作
时间: 2024-11-03 15:15:21 浏览: 30
在C语言中,我们可以使用数组或者链表来实现一个队列数据结构,这里我们选择链表作为基础,因为其插入和删除元素更高效。首先,我们需要创建一个结构体`QueueItem`表示队列中的元素,包含`id`和`name`两个属性,然后定义一个队列结构`Queue`来管理这些元素。
```c
#include <stdio.h>
#include <stdlib.h>
// 队列元素结构
typedef struct {
int id;
char name[50];
} QueueItem;
// 队列结构
typedef struct {
QueueItem* front; // 前端指针
QueueItem* rear; // 后端指针
int size; // 队列大小
} Queue;
// 初始化队列
Queue* createQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
return queue;
}
// 入队操作
void enqueue(Queue* queue, QueueItem item) {
if (queue->size == sizeof(queue->front)) {
printf("队列已满,无法入队。\n");
return;
}
QueueItem* newNode = (QueueItem*)malloc(sizeof(QueueItem));
memcpy(newNode, &item, sizeof(QueueItem)); // 拷贝新元素到节点
if (queue->rear == NULL) { // 如果队列为空
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
queue->size++;
}
// 出队操作
QueueItem dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("队列为空,无法出队。\n");
return queue->front;
}
QueueItem item = queue->front->id; // 获取并保存第一个元素的信息
QueueItem* temp = queue->front;
queue->front = queue->front->next; // 更新前端指针
free(temp); // 释放已出队的节点内存
if (queue->front == NULL) {
queue->rear = NULL;
}
queue->size--;
return item; // 返回出队元素
}
// 打印队列内容
void printQueue(Queue* queue) {
QueueItem* current = queue->front;
while (current != NULL) {
printf("ID: %d, Name: %s\n", current->id, current->name);
current = current->next;
}
}
int main() {
Queue* q = createQueue();
// 入队示例
QueueItem item1 = {1, "Element1"};
enqueue(q, item1);
// 出队示例
QueueItem dequeuedItem = dequeue(q);
printf("出队的ID: %d, Name: %s\n", dequeuedItem.id, dequeuedItem.name);
// 打印队列
printQueue(q);
return 0;
}
```
以上代码展示了如何用C语言创建一个简单的队列,实现入队、出队和打印功能。请注意,这只是一个基本的示例,并未处理所有异常情况。在实际应用中,可能需要考虑更多的错误检查和资源清理。
阅读全文