C语言实现银行家算法源代码
更新时间:2023-12-23 07:21:01 阅读量: 教育文库 文档下载
C语言实现银行家算法源代码
#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; }
printf("您还想再次请求分配吗?是请按y/Y,否请按其它键\\n"); scanf("%c",&again);
if(again=='y'||again=='Y') { continue; } break; } }
正在阅读:
C语言实现银行家算法源代码12-23
圆锥圆柱齿轮减速器说明书05-26
心理学名词解释10-18
51CTO下载-C程序员面试题07-27
五一兼职招聘02-07
艺术类院校专业介绍10-22
变更许可人被许可人名称备案表05-07
数学北师大版高中必修1东乡一中高一函数综合训练试题04-16
教科版三年级科学上册备课06-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 银行家
- 源代码
- 算法
- 语言
- 实现
- 员工试用期培养与考核管理办法
- 条令考试复习试题
- 朱晓喆:存款货币的权利归属与返还请求权 - 反思民法上货币“占有即所有”法则的司法运用《法学研究》
- 生物入侵者说课稿
- 2017年河南省普通高校对口招生市场营销类专业课试题
- 宋朝和元朝(历史背景阅读材料)
- 水文地质基础工作在地下水模型研究中的重要性
- 2017-2023年中国注浆管行业市场专项调研及投资前景可行性预测报告(目录)
- 6、地形图基本知识与应用
- 新建中学-施工组织设计 - 图文
- 如何纠正小学生数学课上的“粗心”
- 北京理工大学工业设计考研参考书解析 - 图文
- 神木县大柳塔第二小学教师技能大练兵活动实施方案
- 澳大利亚悉尼大学的衣食住行
- 物理学在工程技术上的运用
- 六上语文期末试题含答案 - 图文
- -linux终级版
- 福师《英汉互译》在线作业二15秋答案
- 薛广华:基于SWOT分析的郑州航空港经济综合实验区发展战略
- 古诗鉴赏题材分类解说