复制代码的时候:最好点下图 [cpp] 旁边的那个标签进行复制,不然可能代码编译不了。
在短进程优先算法中需要注意:下一个进程是已经到达且运行时间最短的进程。
输入如下:
4
A 8.00 2.00
B 8.50 0.50
C 9.00 0.10
D 9.50 0.20
输出如下:
C代码:
#include <stdio.h>
#include <stdlib.h>
#define INF 1000000.0
struct PCB {
char id[10]; // 进程ID
double reachTime; // 进程到达的时间
double needTime; // 进程完成需要的时间
double startTime; // 进程开始的时刻
double finishTime; // 进程完成的时刻
double cTime; // 进程周转时间
double wcTime; // 进程带权周转时间
char state; // 进程的状态( 设每个进程处于就绪R(ready),完成F(finish)两种状态之一 )
};
/* 两种情况:
1.在lastTime时刻,选择已经到达且拥有最短运行时间的进程
2.在lastTime时刻,没有进程到达,此时选择拥有最早到达时间的进程
*/
int findNext( struct PCB arr[], int length, double lastTime ) {
// p是已经到达且拥有最短运行时间的进程的下标
// q是没有到达的进程中拥有最早到达时间的进程的下标
int i, p, q;
double minNeedTime, minReachTime;
p = q = -1; minNeedTime = minReachTime = INF;
for( i = 0; i < length; i++ ) {
if( arr[i].state=='R' ) { // 进程处就绪状态
// 第一情况
if( arr[i].reachTime<=lastTime && arr[i].n