C语言实现链队列按优先级顺序入队代码
时间: 2024-12-12 19:16:35 浏览: 80
在C语言中,如果你想要实现一个优先级队列,可以利用链表结构,其中每个节点包含一个数据元素和一个优先级。这里是一个简单的链式双端队列(priority queue)的实现,使用了两个链表:一个普通链表存储所有节点,另一个称为`highest_priority`链表,用于存放优先级最高的节点。当插入新节点时,会比较其优先级并相应地调整这两个链表。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
int priority;
struct node *next;
struct node *prev;
} Node;
typedef struct {
Node *head;
Node *tail;
Node *highest_priority_head;
} PriorityQueue;
void enqueue(PriorityQueue *pq, int data, int priority) {
Node *new_node = (Node*)malloc(sizeof(Node));
if (!new_node) {
printf("Memory allocation failed.\n");
return;
}
new_node->data = data;
new_node->priority = priority;
new_node->next = NULL;
new_node->prev = pq->tail;
// 如果队列为空,直接添加到两个链表头部
if (pq->head == NULL) {
pq->head = pq->tail = new_node;
pq->highest_priority_head = new_node;
} else {
// 按照优先级排序
if (priority > pq->highest_priority_head->priority) {
new_node->prev = pq->highest_priority_head;
pq->highest_priority_head->prev = new_node;
pq->highest_priority_head = new_node;
} else {
if (pq->tail->priority >= priority) { // 插入到普通链表尾部
pq->tail->next = new_node;
new_node->prev = pq->tail;
pq->tail = new_node;
} else { // 插入到普通链表头部,并更新最高优先级链表
new_node->prev = pq->head;
pq->head->next = new_node;
pq->head = new_node;
if (priority > pq->highest_priority_head->priority)
pq->highest_priority_head = new_node;
}
}
}
}
// 其他操作如删除、查看等可以根据需要添加
阅读全文
相关推荐


















