队列中各任务排队等候执行时,根据任务权重动态调整执行顺序 C源码实现
时间: 2024-03-09 19:48:33 浏览: 190
C语言实现队列源码,包含顺序队列,链式队列,循环队列,亲测可用
以下是一个简单的C语言实现,使用了一个链表作为队列,每个节点包含了任务的权重和任务的指针。在向队列中添加任务时,按照权重从高到低的顺序插入节点,执行任务时从队列头开始取出节点执行。
```
#include <stdio.h>
#include <stdlib.h>
typedef struct task {
int priority;
void (*function)(void);
struct task *next;
} task_t;
task_t *head = NULL;
void enqueue(int priority, void (*function)(void)) {
task_t *new_task = malloc(sizeof(task_t));
new_task->priority = priority;
new_task->function = function;
new_task->next = NULL;
if (head == NULL) {
head = new_task;
return;
}
if (priority > head->priority) {
new_task->next = head;
head = new_task;
return;
}
task_t *current = head;
while (current->next != NULL && priority <= current->next->priority) {
current = current->next;
}
new_task->next = current->next;
current->next = new_task;
}
void execute_tasks() {
while (head != NULL) {
task_t *current = head;
head = head->next;
current->function();
free(current);
}
}
void task1() {
printf("Executing task 1\n");
}
void task2() {
printf("Executing task 2\n");
}
void task3() {
printf("Executing task 3\n");
}
int main() {
enqueue(2, task1);
enqueue(3, task2);
enqueue(1, task3);
execute_tasks();
return 0;
}
```
在这个例子中,我们定义了一个task_t类型,包含了任务的优先级和函数指针。enqueue函数按照优先级插入任务,execute_tasks函数从队列头开始取出任务执行。我们定义了三个任务,按照不同的优先级插入队列中,最后执行任务的顺序是task2、task1、task3。
阅读全文