p71:P71 例3-6 设计一个程序模仿操作系统的进程管理问题。进程服务按优先级高的先服务、优先级相同的先到先服务的原则管理。设文件task.dat中存放了仿真进程请求服务,其中第一列表示进程的任务号,第二

P71 例3-6 设计一个程序模仿操作系统的进程管理问题。进程服务按优先级高的先服务、优先级相同的先到先服务的原则管理。设文件task.dat中存放了仿真进程请求服务,其中第一列表示进程的任务号,第二列表示进程的优先级。

头文件:SeqPQueue.h

#include<stdio.h>#include<stdlib.h>#define MaxQueueSize 100typedef int ElemType;typedef struct{int priority;ElemType elem;}DataType;typedef struct{DataType queue[MaxQueueSize];int size;}SeqPQueue;void QueueInitiate(SeqPQueue *Q){Q->size=0;}int QueueNotEmpty(SeqPQueue Q){if(Q.size<=0)return 0;elsereturn 1;}int QueueAppend(SeqPQueue *Q,DataType x){if(Q->size>=MaxQueueSize){printf("队列已满无法插入!\n");return 0;}else{Q->queue[Q->size]=x;Q->size++;return 1;}}int QueueDelete(SeqPQueue *Q,DataType *d){DataType min;int minIndex,i;if(Q->size<=0){printf("队列已空无数据元素出队列!\n");return 0;}else{min=Q->queue[0];minIndex=0;for(i=1;i<Q->size;i++){if(Q->queue[i].priority<min.priority){min=Q->queue[i];minIndex=i;}}*d=Q->queue[minIndex];for(i=minIndex+1;i<Q->size;i++)Q->queue[i-1]=Q->queue[i];Q->size--;return 1;}}int QueueGet(SeqPQueue *Q,DataType *d){DataType min;int minIndex,i;if(Q->size<=0){printf("队列已空无数据元素可取!\n");return 0;}else{min=Q->queue[0];minIndex=0;for(i=1;i<Q->size;i++){if(Q->queue[i].priority<min.priority){min=Q->queue[i];minIndex=i;}}*d=Q->queue[minIndex];return 1;}}

源文件:例3-6.c

#include"SeqPQueue.h"int main(){SeqPQueue myPQueue;FILE *fp;DataType task;int i;if((fp=fopen("task.dat","r"))==NULL){printf("不能打开文件task.dat!");exit(0);}QueueInitiate(&myPQueue);while(!feof(fp)){fscanf(fp,"%d %d",&task.elem,&task.priority);QueueAppend(&myPQueue,task);}i=1;printf("序号 任务号 优先级\n");while(QueueNotEmpty(myPQueue)){QueueDelete(&myPQueue,&task);printf("%d\t",i);printf("%d\t",task.elem);printf("%d\n",task.priority);i++;}return 0;}

.dat文件为:task.dat

1 302 203 404 205 0

在VS2019下,需将源文件3-6.c的fopen和fscanf做一些修改,所以源文件3-6.c为:

#include"SeqPQueue.h"int main(){SeqPQueue myPQueue;FILE *fp;DataType task;int i;fopen_s(&fp,"task.dat","r");if(fp==NULL){printf("不能打开文件task.dat!");exit(0);}QueueInitiate(&myPQueue);while(!feof(fp)){fscanf_s(fp,"%d %d",&task.elem,&task.priority);QueueAppend(&myPQueue,task);}i=1;printf("序号 任务号 优先级\n");while(QueueNotEmpty(myPQueue)){QueueDelete(&myPQueue,&task);printf("%d\t",i);printf("%d\t",task.elem);printf("%d\n",task.priority);i++;}return 0;}

相关推荐

相关文章