数据结构题目009

it2025-01-21  16

设计一个程序模仿操作系统的进程管理问题,进 程服务按优先级高的先服务,同优先级的先到先服务的管理 原则。设文件task.dat中存放了仿真进程服务请求,其中第 一列是进程任务号,第二列是进程的优先级。 以下为task.dat文件中的内容 1 30 2 20 3 40 4 20 5 0

具体代码实现如下:

#include <stdio.h> #include <stdlib.h> #define MAX 100 typedef struct ElemType { int lever; int num; }ElemType; typedef struct Heap { ElemType data[MAX]; int len; }Heap,*LHeap; void Init(LHeap H) { H->len = 0; } bool IsEmpty(LHeap H) { return (H->len == 0); } bool IsFull(LHeap H) { return (H->len == MAX - 1); } void Insert(LHeap H,ElemType x) { int i; if (!IsFull(H)) { i = H->len + 1; while ((i!=1)&&(x.lever < H->data[i/2].lever)) { H->data[i] = H->data[i/2]; i/=2; } H->data[i].lever = x.lever; H->data[i].num = x.num; H->len++; } } void DeleteMax(LHeap H,ElemType* x) { int parent = 1,child = 2; ElemType tmp; if (!IsEmpty(H)) { x->lever = H->data[1].lever; x->num = H->data[1].num; tmp = H->data[H->len--]; while (child <= H->len) { if ((child < H->len) && (H->data[child].lever > H->data[child+1].lever)) { child++; } if (tmp.lever <= H->data[child].lever) { break; } H->data[parent] = H->data[child]; parent = child; child*=2; } H->data[parent] = tmp; } } int main() { Heap H; FILE *fp; int i = 1; ElemType task; if ((fp = fopen("task.dat","r")) == NULL) { printf("不能打开文件task.dat!"); exit(0); } Init(&H); while (!feof(fp)) { fscanf(fp,"%d %d",&task.num,&task.lever); Insert(&H,task); } printf("序号\t任务号\t优先级\t\n"); while (!IsEmpty(&H)) { DeleteMax(&H,&task); printf("%d\t",i); printf("%d\t",task.num); printf("%d\t\n",task.lever); i++; } system("pause"); return 0; }
最新回复(0)