c语言工作轮休算法

Python019

c语言工作轮休算法,第1张

有没有具体的要求,比方说数据结构方面,我这有一个,你可以参考参考

#include"stdio.h"

#include"stdlib.h"

#define n 10 /*假定系统允许的最大作业为n,假定模拟实验中n值为10*/

#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/

#define minisize 100

struct{

float address/*已分分区起始地址*/

float length/*已分分区长度,单位为字节*/

int flag/*已分配区表登记栏标志,用"0"表示空栏目*/

}used_table[n]/*已分配区表*/

struct{

float address/*空闲区起始地址*/

float length/*空闲区长度,单位为字节*/

int flag/*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/

}free_table[m]/*空闲区表*/

void main( )

{

int i,a

void allocate(char str,float leg)//分配主存空间函数

void reclaim(char str)//回收主存函数

float xk

char J/*空闲分区表初始化:*/

free_table[0].address=10240

free_table[0].length=102400

free_table[0].flag=1

for(i=1i<mi++)

free_table[i].flag=0/*已分配表初始化:*/

for(i=0i<ni++)

used_table[i].flag=0

while(1)

{

printf("\n选择功能项(0-退出,1-分配主存,2-回收主存,3-显示主存)\n")

printf("选择功项(0~3) :")

scanf("%d",&a)

switch(a)

{

case 0: exit(0)/*a=0程序结束*/

case 1: /*a=1分配主存空间*/printf("输入作业名J和作业所需长度xk: ")

scanf("%*c%c%f",&J,&xk)

allocate(J,xk)/*分配主存空间*/

break

case 2: /*a=2回收主存空间*/printf("输入要回收分区的作业名")

scanf("%*c%c",&J)reclaim(J)/*回收主存空间*/

break

case 3: /*a=3显示主存情况*//*输出空闲区表和已分配表的内容*/

printf("输出空闲区表:\n起始地址 分区长度 标志\n")

for(i=0i<mi++)

printf("%6.0f%9.0f%6d\n",free_table[i].address,free_table[i].length, free_table[i].flag)

printf(" 按任意键,输出已分配区表\n")

getchar()

printf(" 输出已分配区表:\n起始地址 分区长度 标志\n")

for(i=0i<ni++)

if(used_table[i].flag!=0)

printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length, used_table[i].flag)

else

printf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length, used_table[i].flag)

break

default:printf("没有该选项\n")

}/*case*/

}/*while*/

}/*主函数结束*/

int uflag//分配表标志

int fflag//空闲表标志

float uend_address

float fend_address

void allocate(char str,float leg)

{

uflag=0fflag=0

int k,ifloat ressize

for(i=0i<mi++)

{

if(free_table[i].flag==1 &&free_table[i].length>=leg)

{

fflag=1break

}

}

if(fflag==0)

printf("没有满足条件的空闲区\n")

else

{

ressize=free_table[i].length-leg

for(k=0k<nk++)

{

if(used_table[k].flag==0)

{

if(ressize<minisize)//剩余块过小

{

used_table[k].length=free_table[i].length

used_table[k].address=free_table[i].address

used_table[k].flag=str

free_table[i].length=0

free_table[i].flag=0

break

}

else

{

used_table[k].address=free_table[i].address+ressize

used_table[k].flag=str

used_table[k].length=leg

free_table[i].length=ressize

break

}

}

}//for结束

}

}

void reclaim(char str)

{

uflag=0fflag=0

int k,i

for(k=0k<nk++)

{

if(used_table[k].flag==str)

{

uflag=1break

}

}

if(uflag==0)

printf("\n找不到该作业!\n")

else

{

for(i=0i<mi++)

{

uend_address=used_table[k].address+used_table[k].length

fend_address=free_table[i].address+free_table[i].length

if(used_table[k].address==fend_address)//上邻

{

fflag=1

free_table[i].length=free_table[i].length+used_table[k].length

free_table[i].flag=1

used_table[k].flag=0

used_table[k].length=0

used_table[k].address=0

printf("\n已回收!\n")

break

}

else

{

if(free_table[i].address==uend_address)//下邻

{

fflag=1

free_table[i].address=used_table[k].address

free_table[i].length=free_table[i].length+used_table[k].length

free_table[i].flag=1

used_table[k].flag=0

used_table[k].length=0

used_table[k].address=0

printf("\n已回收!\n")

break

}

}

}//for结束

if(fflag==0)

{

i=0

for(i=0i<mi++)

{

if(free_table[i].flag==0)

{

free_table[i].address=used_table[k].address

free_table[i].length=used_table[k].length

free_table[i].flag=1

used_table[k].length=0

used_table[k].flag=0

used_table[k].address=0

break

}

}

printf("\n已回收!\n")

}

}

}

方法/步骤

首先我们先去网上找到这个软件的安装包,然后安装到自己电脑上,在安装的过程中,W7系统可能会说软件与系统不兼容,这个没事的,继续安装就是

安装好后双击这个软件在桌面上的图标,打开软件后,我们需要建立c语言编写文件,点击文件新建一个C++source file,然后开始编写程序!

编写程序的过程中,要理清思路,先把头文件写上,该注释的地方还是要注释,这样以后看程序的时候不至于不懂!

把程序写好后,一定要保存,其实我们在写程序的时候就应该写一句保存一次,这是因为这个软件有时候运行不稳定!万一出现程序闪退,我们写的程序就没有了,这让人很抓狂的!

保存好程序后,我们可以开始编译执行链接程序了,如果一切无误的话,会生成一个exe文件,我们就可以实现编写的功能了,如果程序报错,那么我们需要找到错误的地方进行改正!

说了这么多,是时候自己动手验证了,这个软件使用起来很方便,功能也很强大,多练习几次就一定会使用的!