SHAOXIAOJ正在加载中...

1654: 队列-简单任务调度

金币值:2 定数:7 时间限制:1.000 s 内存限制:128 M
正确:3 提交:4 正确率:75.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 数据结构-栈与队列

题目描述

现有N个任务等处理,完成每个任务需要的时间分别为T1,T2,...(设为整数),处理任务的机器共有2台,要求将这些任务顺序分配给这两台机器处理,分配的原则是当前哪台机器处理任务的时间短就分配给哪台机器(如果当前两台机器处理完成任务的时间相同,则分配给第1台机器),要求按被处理完时间的先后顺序输出对应的任务号。
提示:设置两个队列,第一个队列存储分配给第一台机器的任务号,第二个队列存储分配给第二台机器的任务号。
函数initQueue完成队列初始化;queueEmpty判断队列是否为空;enQueue实现入队操作;deQueue实现出队操作;getHead获取队头元素;createJobs实现任务执行时间的输入,并将任务加入到相应的队列;dealJobs实现根据任务完成时间出队列,并输出任务编号。
#include <stdio.h>
#include <stdlib.h>

#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 8

输出样例    复制

1 3 2 4

提示

void createJobs(SqQueue &A,SqQueue &B,int jobsNum) {
	int fa=0,fb=0;//分别记录队列A和B的任务完成时间
	int t;
	QElemType job;
	for(int i = 1; i <= jobsNum; i++) {
		scanf("%d", &t);
		job.id=i;
		job.runtime=t;

		if(fa<=fb) {
			
		} else {
			
		}
	}
}
void dealJobs(SqQueue &A,SqQueue &B) {
	QElemType temp;	//若两个队列都不为空
	while(!queueEmpty(A) && !queueEmpty(B)) {
		
	}

	while(!queueEmpty(A)) {
		
	}

	while(!queueEmpty(B)) {
		
	}
}