C语言实现:抢占式动态优先级调度算法计算4进程完成时间(附代码与注意点)
以下是用 C 语言实现的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义进程结构体 typedef struct { char name[10]; int arrivalTime; int runningTime; int priority; } Process; // 比较函数,用于优先级队列排序 int compare(const void *a, const void *b) { Process *p1 = (Process *)a; Process *p2 = (Process *)b; return p2->priority - p1->priority; } int main() { Process processes[4]; int i; // 输入进程信息 for (i = 0; i < 4; i++) { scanf("%s %d %d %d", processes[i].name, &processes[i].arrivalTime, &processes[i].runningTime, &processes[i].priority); } int currentTime = 0; int completedProcesses = 0; Process *runningProcess = NULL; Process readyQueue[4]; int readyQueueSize = 0; while (completedProcesses < 4) { // 将到达的进程放入就绪队列 for (i = 0; i < 4; i++) { if (processes[i].arrivalTime == currentTime) { readyQueue[readyQueueSize++] = processes[i]; } } // 如果没有运行进程且就绪队列不为空,选择优先级最高的进程运行 if (runningProcess == NULL && readyQueueSize > 0) { qsort(readyQueue, readyQueueSize, sizeof(Process), compare); runningProcess = &readyQueue[0]; readyQueueSize--; for (i = 0; i < readyQueueSize; i++) { readyQueue[i] = readyQueue[i + 1]; } } // 运行进程的优先级减 1,运行时间减 1 if (runningProcess!= NULL) { runningProcess->priority--; runningProcess->runningTime--; // 如果进程运行结束 if (runningProcess->runningTime == 0) { printf("%s 完成时间: %d\n", runningProcess->name, currentTime + 1); completedProcesses++; runningProcess = NULL; } } // 就绪进程的优先级加 1 for (i = 0; i < readyQueueSize; i++) { readyQueue[i].priority++; } currentTime++; } return 0; } ``` 额外需要注意的逻辑点: 1. 输入的进程信息格式要严格按照要求,包括字符串长度、数据类型和分隔方式。 2. 对于进程的调度和状态切换,要确保逻辑的准确性和完整性。 3. 处理就绪队列的操作,如添加、删除和排序,要注意边界情况和指针的使用。 ######[AI写代码神器 | 686点数解答 | 2024-11-21 16:58:31]
- 小核桃破密码遇进度条:补全代码实现百分比加载及完成提示 (字节豆包 | 326点数解答 | 2025-12-13 20:06:10)62
- 小核桃补全代码:实现进度条加载信息输出(字节豆包 | 53点数解答 | 2026-01-10 19:26:25)54
- 小核桃解门密遇进度条,代码补全助其加载完成!(字节豆包 | 90点数解答 | 2026-01-10 19:26:42)50
- 小核桃破解密码遇进度条!C++代码补全助其完成加载(百度文心 | 231点数解答 | 2026-01-10 19:57:04)57
- C++ 代码揭秘:小核桃大门密码进度条代码解析(字节豆包 | 320点数解答 | 2025-11-28 19:40:52)81
- C++ 代码:助小核桃根据输入整数输出进度及完成提示(字节豆包 | 338点数解答 | 2025-11-28 19:42:04)62
- 小核桃破密码遇进度条:补全代码实现进度输出逻辑(字节豆包 | 106点数解答 | 2025-12-27 20:58:56)56
- 小核桃破解大门密码遇进度条,Python代码补全助其搞定!(字节豆包 | 106点数解答 | 2025-12-27 20:59:05)55
- 小核桃破解大门密码遇进度条:C++代码补全及详细解释(字节豆包 | 300点数解答 | 2025-12-27 20:59:16)55
- 小核桃大门密码破解:补全代码实现进度条输出逻辑(字节豆包 | 320点数解答 | 2025-12-27 21:00:07)53
- 小核桃破解密码遇进度条,C++代码补全帮你搞定!(DeepSeek | 78点数解答 | 2025-12-28 14:39:05)42
- 小核桃破解密码遇进度条!补全代码实现特殊输出需求 (字节豆包 | 87点数解答 | 2026-01-10 19:25:33)41