現有N個任務等處理,完成每個任務需要的時間分別為T1,T2,...(設為整數),處理任務的機器共有2臺,要求將這些任務順序分配給這兩臺機器處理,分配的原則是當前哪臺機器處理任務的時間短就分配給哪臺機器(如果當前兩臺機器處理完成任務的時間相同,則分配給第1臺機器),要求按被處理完時間的先后順序輸出對應的任務號。
提示:設定兩個佇列,第一個佇列存盤分配給第一臺機器的任務號,第二個佇列存盤分配給第二臺機器的任務號。
函式initQueue完成佇列初始化;queueEmpty判斷佇列是否為空;enQueue實作入隊操作;deQueue實作出隊操作;getHead獲取隊頭元素;createJobs實作任務執行時間的輸入,并將任務加入到相應的佇列;dealJobs實作根據任務完成時間出佇列,并輸出任務編號
#include
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 佇列存盤空間初始分配量 */
typedef int Status;
//構建任務資料型別
typedef struct {
int id;//任務編號
int starttime;//任務開始時間
int runtime;//任務運行時間
} QElemType;
/*回圈佇列的順序存盤結構
采用少用一個元素的方法實作,
即佇列空間為 MAXSIZE,則有MAXSIZE-1個元素時則認為佇列滿。
/
typedef struct {
QElemType data[MAXSIZE];
int front; / 頭指標 /
int rear; / 尾指標,若佇列不空,指向佇列尾元素的下一個位置 */
} SqQueue;
Status initQueue(SqQueue &Q);
Status queueEmpty(SqQueue Q);
void enQueue(SqQueue &Q,QElemType e);
Status deQueue(SqQueue &Q,QElemType &e);
QElemType getHead(SqQueue Q);
void createJobs(SqQueue &A,SqQueue &B,int jobsNum);
void dealJobs(SqQueue &A,SqQueue &B);
int main(void) {
int jobsNum; //任務數目
SqQueue A,B;
initQueue(A);
initQueue(B);
scanf("%d", &jobsNum);
createJobs(A,B,jobsNum);
dealJobs(A,B);
return 0;
}
/* 初始化一個空佇列Q,頭尾指標初始設定 */
Status initQueue(SqQueue &Q) {
Q.front = 0;
Q.rear = 0;
return OK;
}
/* 若佇列Q為空佇列,則回傳TRUE,否則回傳FALSE */
Status queueEmpty(SqQueue Q) {
if(Q.front == Q.rear)
return TRUE;
return FALSE;
}
/*只提交以下代碼*/
void enQueue(SqQueue &Q,QElemType e) {
}
Status deQueue(SqQueue &Q,QElemType &e) {
}
QElemType getHead(SqQueue Q) {
}
void createJobs(SqQueue &A,SqQueue &B,int jobsNum) {
}
void dealJobs(SqQueue &A,SqQueue &B) {
}
輸入
第1行輸入一個整數,表示有n個任務
第2行輸入n個整數,表示每個任務需要處理的時間
輸出
按處理完成的先后順序輸出對應的任務編號(如果兩臺機器同時完成當前任務,則先顯示機器1的任務號)
樣例輸入
4
10 30 15
樣例輸出
1 3 2 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77479.html
標籤:非技術區
下一篇:設計模式 工廠類
