您好,欢迎来到年旅网。
搜索
您的当前位置:首页操作系统十大题全集--银行家算发

操作系统十大题全集--银行家算发

来源:年旅网
[原创][9.银行家算法/十大题型]算法全实现 /* 银行家算法

银行家可以把一定数量的资金供多个用户周转使用,为保证资金的安全银行家规定: 1.当一个用户对资金的最大需求量不超过银行家现有的资金就要接纳该用户; 2.用户可以分期贷款,但垡的总数不能超过最大需求量;

3.当银行家现有的资金不能满足用户的沿需垡数时,对用户的贷款可推迟支付,但总能使用户在有限的时间里得到贷款;

4当用户得到所需的全部资金后,一定能在有限的时间里归还所有的资金. 假设共有3类资源A B C,分别为10,5,7个 进程列表存在文件中,格式为

进程名 对A类资源需求数量 对B类资源需求数量 对c资源需求数量 输出每个进程的处理结果

本程序包括:银行家算法

VC++调试通过 (C)copyright by Neo

欢迎大家测试 请问题请Email:sony006@163.com */

#include #include #include #include #include #include const int MAX_P=20;

const int MAXA=10; //定义A类资源的数量 const int MAXB=5; const int MAXC=7;

typedef struct node{ int a;

int b; int c; int remain_a; int remain_b; int remain_c; }bank;

typedef struct node1{ char name[20]; int a; int b; int c; int need_a; int need_b; int need_c; }process; bank banker;

process processes[MAX_P]; int quantity; //初始化函数 void initial() { int i;

banker.a=MAXA; banker.b=MAXB; banker.c=MAXC; banker.remain_a=MAXA; banker.remain_b=MAXB; banker.remain_c=MAXC; for(i=0;istrcpy(processes[i].name,\"\"); processes[i].a=0; processes[i].b=0; processes[i].c=0; processes[i].need_a=0; processes[i].need_b=0; processes[i].need_c=0; } }

//新加作业 void add() {

char name[20]; int flag=0; int t;

int need_a,need_b,need_c; int i; cout<cout<<\"新加作业\"<cout<<\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"<>name;

for(i=0;iif(!strcmp(processes[i].name,name)){ flag=1; break; } } if(flag){

cout<<\"错误,作业已存在\"<cout<<\"本作业所需A类资源:\"; cin>>need_a;

cout<<\"本作业所需B类资源:\"; cin>>need_b;

cout<<\"本作业所需C类资源:\"; cin>>need_c; t=1;

cout<banker.remain_a){

cout<<\"错误,所需A类资源大于银行家所剩A类资源\"<if(need_b>banker.remain_b){

cout<<\"错误,所需B类资源大于银行家所剩B类资源\"<if(need_c>banker.remain_c){

cout<<\"错误,所需C类资源大于银行家所剩C类资源\"<t=0; } if(t){

strcpy(processes[quantity].name,name); processes[quantity].need_a=need_a; processes[quantity].need_b=need_b; processes[quantity].need_c=need_c; quantity++;

cout<<\"新加作业成功\"<cout<<\"新加作业失败\"<//为作业申请资源 void bid() {

char name[20]; int i,p; int a,b,c; int flag;

cout<cout<<\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"<>name; p=-1;

for(i=0;iif(!strcmp(processes[i].name,name)){ p=i; break; } }

if(p!=-1){

cout<<\"该作业要申请A类资源数量:\"; cin>>a;

cout<<\"该作业要申请B类资源数量:\"; cin>>b;

cout<<\"该作业要申请C类资源数量:\"; cin>>c;

flag=1;

if((a>banker.remain_a)||(a>processes[p].need_a-processes[p].a)){

cout<<\"错误,所申请A类资源大于银行家所剩A类资源或该进程还需数量\"<if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){

cout<<\"错误,所申请B类资源大于银行家所剩B类资源或该进程还需数量\"<if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){

cout<<\"错误,所申请C类资源大于银行家所剩C类资源或该进程还需数量\"<banker.remain_a-=a; banker.remain_b-=b; banker.remain_c-=c; processes[p].a+=a; processes[p].b+=b; processes[p].c+=c;

cout<<\"为作业申请资源成功\"<cout<<\"为作业申请资源失败\"<cout<<\"该作业不存在\"<//撤消作业 void finished() {

char name[20]; int i,p;

cout<cout<<\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"<>name;

p=-1;

for(i=0;iif(!strcmp(processes[i].name,name)){ p=i; break; } }

if(p!=-1){

banker.remain_a+=processes[p].a; banker.remain_b+=processes[p].b; banker.remain_c+=processes[p].c; for(i=p;istrcpy(processes[quantity-1].name,\"\"); processes[quantity-1].a=0; processes[quantity-1].b=0; processes[quantity-1].c=0; processes[quantity-1].need_a=0; processes[quantity-1].need_b=0; processes[quantity-1].need_c=0; quantity--;

cout<<\"撤消作业成功\"<cout<<\"撤消作业失败\"<//查看资源情况 void view() { int i;

cout<cout<<\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"<cout<0){

for(i=0;icout<<\"作业名:\"<cout<<\"A类:\"<cout<<\"当前没有作业\"<//显示版权信息函数 void version() {

cout<cout<<\" ┏━━━━━━━━━━━━━━━━━━━━━━━┓\"<void main() {

int chioce; int flag=1;

initial(); version(); while(flag){

cout<<\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"<>chioce;

switch(chioce){ case 1: add(); break; case 2: bid(); break; case 3: finished(); break; case 4: view(); break; case 0: flag=0; break; default:

cout<<\"选择错误\"<

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务