操作系统课程银行家算法c语言,操作系统银行家算法(C语言版)

操作系统银行家算法,采用简单的C语言实现,功能齐全,简单易懂

//本程序由西安工业大学计算机学院SUn编写,感谢使用!

#include "stdafx.h"

#include

#define M 100

#define N 100

struct bank{

int max[M][N];

int total[N];

int allocation[M][N];

int need[M][N];

int available[N];

int work[N];

int finish[N];

int request[N];

int temp[N];//记录安全序列

int m;

int n;

int k;

}b;

void initialization(){

loop1:

printf("**************************************\n");

printf("*****欢迎使用本程序,请按提示输入*****\n");

printf("************XX XXXXXXXXXXX************\n");

printf("**************************************\n");

int i,j;

int e;

printf("请输入进程数目:\n");

scanf("%d",&e);

b.m=e;

printf("请输入资源种类数:\n");

scanf("%d",&e);

b.n=e;

printf("请输入各种资源的总数\n");

for(j=0;j

scanf("%d",&e);

b.total[j]=e;

}

printf("total\n");

for(j=0;j

printf("%d\t",b.total[j]);

}

printf("\n");

printf("请输入各进程所需的最大资源数\n");

for(i=0;i

for(j=0;j

scanf("%d",&e);

b.max[i][j]=e;

}

for(i=0;i

for(j=0;j

while(b.max[i][j]>b.total[j])

{

printf("第%d个进程所需资源无法满足\n",i+1);

goto loop1;

}

}

printf("max\n");

for(i=0;i

for(j=0;j

printf("%d\t",b.max[i][j]);

}

printf("\n");

}

printf("\n");

printf("请输入各进程已获得的各种资源数\n");

for(i=0;i

for(j=0;j

scanf("%d",&e);

b.allocation[i][j]=e;

}

for(i=0;i

for(j=0;j

while(b.allocation[i][j]>b.max[i][j])

{

printf("第%d个进程已分配资源不合法\n",i+1);

goto loop1;

}

}

printf("allocation\n");

for(i=0;i

for(j=0;j

printf("%d\t",b.allocation[i][j]);

}

printf("\n");

}

}

void calculate(){

int i,j;

for(i=0;i

for(j=0;j

b.need[i][j]=b.max[i][j]-b.allocation[i][j];

}

printf("need\n");

for(i=0;i

for(j=0;j

printf("%d\t",b.need[i][j]);

}

printf("\n");

}

for(j=0;j

int sum=0;

for(i=0;i

sum=sum+b.allocation[i][j];

}

b.available[j]=b.total[j]-sum;

}

printf("available\n");

for(j=0;j

printf("%d\t",b.available[j]);

}

printf("\n");

}

void test() {

void huishou();

int i, o = 0, p, apply;

int j;

int flag = 0;

for(i=0;i

b.finish[i]=0;

}

for (i = 0; i < b.n; i++) {

b.work[i] = b.available[i];

}

for (i = 0; i < b.m; i++) {

apply = 0;

for (j = 0; j < b.n; j++) {

if (b.finish[i] == 0 &

& b.need[i][j] <= b.work[j]) {

apply++;

if (apply == b.n) {

for (p = 0; p< b.n; p++)

b.work[p] = b.work[p] + b.allocation[i][p];//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值