短作业优先与时间片轮转法

#include <iostream>#include <iomanip>#include <vector>using namespace std;#define MaxNum 100int  ArrivalTime[MaxNum];  //到达时间int  ServiceTime[MaxNum];  //服务时间int  FinishTime[MaxNum];...
摘要由CSDN通过智能技术生成
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
#define MaxNum 100
int  ArrivalTime[MaxNum];  //到达时间
int  ServiceTime[MaxNum];  //服务时间
int  FinishTime[MaxNum];   //完成时间
int  WholeTime[MaxNum];    //周转时间
double  WeightWholeTime[MaxNum];      //带权周转时间
double AverageWT_SJF;  //SJF算法的平均周转时间
double AverageWWT_SJF; //SJF算法的平均带权周转时间
bool isFinished_SJF[MaxNum];
static int n;
struct RR{
    // 进程名称
    char name[10];
    // 到达时间
    int daodatime;
    // 服务时间
    int fuwutime;
    // 剩余时间
    int shengyutime;
    // 所处状态
    char *state;


    struct RR *next;
};


// 根据到达时间从小到大排序
struct RR *input()
{
    int N, i;
    // 定义队首、队尾
    struct RR *head, *rear;
    // p是队尾指针,q是队首指针,t是执行时间
    struct RR *p, *q, *t;
    // 初始化队首和队尾为空
    head = rear = NULL;


    printf("请输入进程数目:");
    scanf("%d", &N);


    for(i = 0; i < N; i++)
    {
        // 初始化一个空间给进程
        p = (struct RR *)malloc(sizeof(struct RR));


        printf("请输入第%d个进程的名字、到达时间、服务时间(例如:1 2 1):\n", i+1);
        scanf("%s%d%d", p->name, &p->daodatime, &p->fuwutime);
        p->shengyutime = p->fuwutime;
        p->state = "就绪";
        p->next = NULL;


        // 当输入结束时,把p的数据放到队首,以便下一步执行
        if(rear == NULL)
        {
            head = p;
            p->next = NULL;
            rear = p;
        }
        // 否则执行时间为空,队首变成q
        else
        {
            t = NULL;
            q = head;
            // 当q和q的到达时间小于p的到达时间时,把执行时间给q
            while(q && q->daodatime < p->daodatime)
            {
                t = q;
                q = q->next;
            }
            // 当q是队首时,则下一个队首变成p,以便每个进程都能够得到时间片
            if(q == head)
            {
                p->next = head;
                head = p;
            }
            // 当执行时间片到达队尾时(执行完成),返回给队首p
            else if(t == rear)
            {
                rear->next = p;
                p->next = NULL;
                rear = p;
            }
            // 否则给队首p占用执行时间,p执行完后到q
            else
            {
                t->next = p;
                p->next = q;
            }
        }
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值