模擬迴圈排程 佇列

2022-04-16 13:05:55 字數 1512 閱讀 4463

#include #include #define len 100005

/*現有名稱為namei且處理時間為timei的n個任務按照順序排成一列,

cpu通過迴圈排程法逐一處理這些任務,每個任務最多處理q ms

(這個時間稱為時間片)。如果q ms之後任務尚未處理完畢,那麼該任務

將被移動至隊伍最末尾,cpu隨即開始處理下乙個任務

舉個例子,假設q是100,然後有如下任務佇列。

a(150) -- b(80) -- c(200) -- d(200)

首先a被處理100 ms,然後帶著剩餘的50 ms移動至隊尾

b(80) -- c(200) -- d(200) -- a(50)

隨後b被處理80 ms,在總計第180 ms時完成處理,從佇列中消失

c(200) -- d(200) -- a(50)

接下來c被處理100 ms,然後帶著剩餘的100 ms移動至隊尾。

d(200) -- a(50) -- c(100)

之後同理,一直迴圈到處理完所有任務。

請編寫乙個程式,模擬迴圈排程法。

輸入 輸入形式如下

n qname1 time1

name2 time2

...namen timen

第一行輸入表示任務數的整數n與時間片的整數q,用乙個空格隔開

接下來n行輸入各任務的資訊。字串namei與timei用乙個空格隔開。

輸出 按照任務完成的先後順序輸出各任務名以及結束時間,任務名與對應結束時間用空格隔開,

每一對任務名與結束時間佔一行。

限制 1 ≤n ≤100 000

1 ≤q ≤1000

1 ≤timei ≤50 000

1 ≤字串namei的長度 ≤10

1 ≤timei的和 ≤1 000 000

輸入示例 輸出示例

5 100 p2 180

p1 150 p5 400

p2 80 p1 450

p3 200 p3 350

p4 350 p4 800

p5 20

*//* 代表任務的結構題 */

typedef struct pp p;

p q[len];

int head, tail, n;

void enqueue(p x)

p dequeue()

int min(int a, int b)

int main()

head = 1;

tail = n + 1;

/* 模擬 */

while ( head != tail )

else

}return 0;

}

****************************************talk is cheap, show me the code***********************************====

陣列模擬迴圈佇列

前面我們用陣列模擬了佇列,大家有沒有想過乙個問題。不斷的入隊當rear maxsize 1時說明隊滿了沒問題啊,接著我們不斷出隊只留乙個元素在隊中,此時仍然rear maxsize 1,問題就暴露了出現一種假滿情況,目前的佇列是一次性使用顯然不符合現實情況。這裡我們就把它優化一下,迴圈佇列就誕生了,...

佇列三 陣列模擬迴圈佇列

package com.hao.firstdemo.datastruct author haoxiansheng public class testcirclearry class circlearray 判斷佇列是否滿了 return public boolean isfull 判斷佇列是否為空 ...

貪心 優先佇列 模擬 任務排程器

2020 03 10 17 22 21 問題描述 給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。...