c语言作业高优先级调度,进程的优先调度算法的c语言实现

在进程中实现优先级算法可以使用最小堆排列来实现。

一般在优先级调度算法中要实现的操作

1.从后备作业队列中选择一个优先级最高的作业将他们调入内存,分配必要的资源。此处的优先级越高关键字越小

2.创建进程并且放入到后备作业队列中

3,。改变一个进程的优先级重新排列后备作业队列的顺序

此处的c语言实现仅仅使用一个数组代表关键字,

若再真实的操作系统中,真可以使用结构体数组来代替示例中的简单数组。

struct Process

{

int key;

int* pointer;//指向进程的入口代码

//更多的其他信息

}process#include

#define HEAP_SIZE 5//定义堆的大小,记住此时的大小不包含堆数组的0号元素,0号元素储存的是 堆的大小;

//================Min_heapify==================

/*

此函数的作用是使以i为根的堆成为最小堆;

*/

void Min_heapify(int *array,int i){

int heap_size=array[0];

int l=0;

int r=0;

int least=0;

//此处不使用递归节约时间;

while(i>0){

l=2*i;

r=2*i+1;

if(l<=heap_size&&array[l]

least=l;

else

least=i;

if(r<=heap_size&&array[r]

least=r;

if(least!=i){

int temp;

temp=array[i];

array[i]=array[least];

array[least]=temp;}

i/=2;

}

}

//=================Build_min_heap===============

/*

此函数是建立以数组array的最小堆;

*/

void Build_min_heap(int* array){

int heap_size=array[0];

for(int i=(heap_size/2);i>0;i--)

Min_heapify(array,i);

}

//============= Heap_extract_min=============

/*

此函数是返回最小堆的最小的关键字

*/

int Heap_extract_min(int*array){

int min;

int heap_size=array[0];

if(heap_size<1)

printf("heap underflow\n");

min=array[1];

array[1]=array[heap_size];

array[0]-=1;

Min_heapify(array,1);

return min;

}

//=========== Heap_prior_increase===============

/*

此函数的作用是增加堆中某个元素的优先值,优先级高的关键字小;

*/

void Heap_prior_increase(int*array,int i,int key){

if(key>array[i]&&key<0){

printf("the prior you want to increse cann't be relize\n");

return ;}

array[i]=key;

while(i>1&&array[i/2]>array[i]){

int temp;

temp=array[i];

array[i]=array[i/2];

array[i/2]=temp;

i/=2;}

}

//=========== Min_heap_insert=====================

/*

此函数的作用是插入元素;

*/

void Min_heap_insert(int*array,int key){

int heap_size;

array[0]+=1;

heap_size=array[0];

array[heap_size]=-2;

Heap_prior_increase(array,heap_size,key);

}

int main(){

printf("\n ^_^welcome to wuhan university^_^\n\n");

int test;

int heap_array[HEAP_SIZE+1]={3,2,1,4,-1,-1};//此处的第一个元素是堆的大小;

Build_min_heap(heap_array);

Heap_prior_increase(heap_array,3,3);

printf("\nheap_array:");

for(int i=0;i<6;i++)

printf(" %d ",heap_array[i]);

Min_heap_insert(heap_array,6);

printf("\nheap_array:");

for(int i=0;i<6;i++)

printf(" %d ",heap_array[i]);

Min_heap_insert(heap_array,2);

printf("\nheap_array:");

for(int i=0;i<6;i++)

printf(" %d ",heap_array[i]);

test=Heap_extract_min(heap_array);

printf("\nHeap_extract_min=%d \n",test) ;

printf("\n ^_^welcome to wuhan university^_^\n\n");

getchar();

}

1900c148cb185b2416b7ca5fa71a20ae.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值