教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

C语言实现银行家算法源代码

来源:网络收集 时间:2026-08-16
导读: #include stdio.h #define MAXPROCESS 50 /*最大进程数*/ #define MAXRESOURCE 100 /*最大资源数*/ #define true 1 #define false 0 int AVAILABLE[MAXRESOURCE]; /*可用资源数组*/ int MAX[MAXPROCESS][MAXRESOURCE]; /*最大需求矩阵*/ int ALLOCATION[MAXP

#include "stdio.h"
#define MAXPROCESS 50 /*最大进程数*/
#define MAXRESOURCE 100 /*最大资源数*/
#define true 1
#define false 0
int AVAILABLE[MAXRESOURCE]; /*可用资源数组*/
int MAX[MAXPROCESS][MAXRESOURCE]; /*最大需求矩阵*/
int ALLOCATION[MAXPROCESS][MAXRESOURCE]; /*分配矩阵*/
int NEED[MAXPROCESS][MAXRESOURCE]; /*需求矩阵*/
int REQUEST[MAXPROCESS][MAXRESOURCE]; /*进程需要资源数*/
int FINISH[MAXPROCESS]; /*系统是否有足够的资源分配*/
int p[MAXPROCESS]; /*记录序列*/
int m,n; /*m个进程,n个资源*/
void Init();
int Safe();
void Bank();
void main()
{
Init();
Safe();
Bank();
} /*最大资源数*/
void Init() /*初始化算法*/
{
int i,j;
printf("请输入进程的数目:\n");
scanf("%d",&m);
printf("请输入资源的种类:\n");
scanf("%d",&n);
printf("请输入每个进程最多所需的各资源数,按照%dx%d矩阵输入\n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&MAX[i][j]);
printf("请输入每个进程已分配的各资源数,也按照%dx%d矩阵输入\n",m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&ALLOCATION[i][j]);
NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];
if(NEED[i][j]<0)
{
printf("您输入的第%d个进程所拥有的第%d个资源数错误,请重新输入:\n",i+1,j+1);
j--;
continue;
}
}
}
printf("请输入各个资源现有的数目:\n");
for(i=0;i<n;i++)
{
scanf("%d",&AVAILABLE[i]);
}
}
int Safe() /*安全性算法,返回值:true,false*/
{
int i,j,k,l=0;
int Work[MAXRESOURCE]; /*工作数组*/
for(i=0;i<n;i++)
Work[i] = AVAILABLE[i];
for(i=0;i<m;i++)
{
FINISH[i] = false;
}
for(i=0;i<m;i++)
{
if(FINISH[i] == true)
{
continue;
}
else
{
for(j=0;j<n;j++)
{
if(NEED[i][j]>Work[j])
{
break;
}
}
if(j==n)
{
FINISH[i]=true;
for(k=0;k<n;k++)
{
Work[k]+=ALLOCATION[i][k];
}
p[l++]=i;
i=-1;
}
else
{
continue;
}
}
if(l==m)
{
//cout<<"系统是安全的"<<endl;
printf("系统是安全的\n");
//cout<<"安全序列:"
;<<endl;
printf("安全序列:\n");
for(i=0;i<l;i++)
{
//cout<<p[i];
printf("%d",p[i]);
if(i!=l-1)
{

printf("-->");
}
}
return true;
}
}
printf("系统是不安全的\n");
return false;
}
void Bank() /*银行家算法*/
{
int i,cusneed;
char again;
while(1)
{
printf("请输入要申请资源的进程号(注:第1个进程号为0,依次类推)\n");
scanf("%d",&cusneed);
printf("请输入进程所请求的各资源的数量\n");
for(i=0;i<n;i++)
{
scanf("%d",&REQUEST[cusneed][i]);
}
for(i=0;i<n;i++)
{
if(REQUEST[cusneed][i]>NEED[cusneed][i])
{
printf("您输入的请求数超过进程的需求量!请重新输入!\n");
continue;
}
if(REQUEST[cusneed][i]>AVAILABLE[i])
{
printf("您输入的请求数超过系统有的资源数!请重新输入!\n");
continue;
}
}
for(i=0;i<n;i++)
{
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
NEED[cusneed][i]-=REQUEST[cusneed][i];
}
if(Safe())
{
printf("同意分配请求!\n");
}
else
{
printf("您的请求被拒绝!\n");
for(i=0;i<n;i++)
{
AVAILABLE[i]+=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]-=REQUEST[cusneed][i];
NEED[cusneed][i]+=REQUEST[cusneed][i];
}
}
for(i=0;i<m;i++)
{
FINISH[i]=false;
}
print
f("您还想再次请求分配吗?是请按y/Y,否请按其它键\n");
scanf("%c",&again);
if(again=='y'||again=='Y')
{
continue;
}
break;
}
}

…… 此处隐藏:664字,全部文档内容请下载后查看。喜欢就下载吧 ……
C语言实现银行家算法源代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/134425.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)