📄 银行家算法程序.txt
字号:
#include <stdio.h>
#define N 5
struct bank //定义数结构体
{char num[6]; //进程编号
int max[3]; //最大需求矩阵
int allocation[3]; //分配矩阵
int need[3]; //需求矩阵
int available[3]; //可利用资源向量
int work[3]; //工作向量
int wa[3]; // work+allocation
char finish;
}bank[N];
main()
{int i,j,k,number,p,t;
int request[3];
char h;
char a='T';
char b='F';
int q=0;
char finish1[5];
int m;
int record[5];
int work1[3];
char f[5];
for(i=0;i<N;i++)
finish1[i]=b;
for(i=0;i<N;i++)
{printf("\nInput data of bank %d:\n",i);
printf("NO.:");
scanf("%s",&bank[i].num);
for(j=0;j<3;j++)
{printf("max %d:\n",j+1);
scanf("%d",&bank[i].max[j]);}
for(j=0;j<3;j++)
{printf("allocation %d:\n",j+1);
scanf("%d",&bank[i].allocation[j]);}
printf("\n");}
for(i=0;i<N;i++)
{for(j=0;j<3;j++)
bank[i].need[j]=bank[i].max[j]-bank[i].allocation[j];}
//得到需求量
for(j=0;j<3;j++)
{printf("enter data of available:\n");
scanf("%d",&bank[0].available[j]);}
for(i=0;i<N;i++)
{f[i]=finish1[i];}
printf(" max allocation need available\n");
printf(" NO. A B C A B C A B C A B C\n");
for(i=0;i<N;i++)
{printf("%5s",bank[i].num);
for(j=0;j<3;j++)
printf("%4d",bank[i].max[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].allocation[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].need[j]);
if(i==0)
{for(j=0;j<3;j++)
printf("%4d",bank[i].available[j]);
printf("\n");}
else
{printf("\n");}
} //输出资源分配表
loop: {printf("\n which number of request?\n");
scanf("%d",&number);
printf("\n");}
for(j=0;j<3;j++)
{printf("enter data of request %d:\n",j+1);
scanf("%d",&request[j]);} //输入请求资源进程号
q=0;
for(j=0;j<3;j++)
{if((request[j]<=bank[number].need[j])&&(request[j]<=bank[0].available[j]))
q++;
else
q+=0;}
{if (q==3)
{for(j=0;j<3;j++)
{bank[number].need[j]=bank[number].need[j]-request[j];
bank[0].available[j]=bank[0].available[j]-request[j];
bank[number].allocation[j]=bank[number].allocation[j]+request[j];} //安全检测
printf(" max allocation need available\n");
printf("NO. A B C A B C A B C A B C\n");
for(i=0;i<N;i++)
{printf("%5s",bank[i].num);
for(j=0;j<3;j++)
printf("%4d",bank[i].max[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].allocation[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].need[j]);
if (i==0)
{for(j=0;j<3;j++)
printf("%4d",bank[i].available[j]);
printf("\n");}
else
printf("\n");
}//请求资源分配后的资源分配表
for(j=0;j<3;j++)
{work1[j]=bank[0].available[j];}
m=0;
t=0;
while (t<5)
{for(i=0;i<5;i++)
{if((work1[0]>=bank[i].need[0])&&(work1[1]>=bank[i].need[1])&&(work1[2]>=bank[i].need[2])&&(finish1[i]==b))
{record[m]=i;
bank[i].work[0]=work1[0];
bank[i].work[1]=work1[1];
bank[i].work[2]=work1[2];
work1[0]=work1[0]+bank[i].allocation[0];
work1[1]=work1[1]+bank[i].allocation[1];
work1[2]=work1[2]+bank[i].allocation[2];
finish1[i]=a;
bank[i].wa[0]=work1[0];
bank[i].wa[1]=work1[1];
bank[i].wa[2]=work1[2];
bank[i].finish=finish1[i];
m++; }
else
continue;
}
t++;} //安全算法
printf("\n");
{if (m==5)
{printf(" work need allocation work+alloct finish\n");
printf("NO. A B C A B C A B C A B C \n");
for(k=0;k<N;k++)
{p=record[k];
printf("%5s",bank[p].num);
for(j=0;j<3;j++)
printf("%4d",bank[p].work[j]);
for(j=0;j<3;j++)
printf("%4d",bank[p].need[j]);
for(j=0;j<3;j++)
printf("%4d",bank[p].allocation[j]);
for(j=0;j<3;j++)
printf("%4d",bank[p].wa[j]);
printf("%4c",bank[p].finish);
printf("\n");} //输出申请资源时的安全性检查表
for(k=0;k<N;k++)
printf("%4d",record[k]); //安全序列输出
printf("\n Contiune or not(Y/N)?");
getchar();
h=getchar();
if (h=='N'||h=='n')
{getchar();
exit(0);
else
for(i=0;i<N;i++)
{finish1[i]=f[i];}
goto loop;
} //选择继续或选择退出
else
printf("it is not safe to assign");
printf("\n Contiune or not(Y/N)?");
getchar();
h=getchar();
if (h=='N'||h=='n')
{getchar();
exit(0);}
else
{printf("\n Enter the request\n");
for(j=0;j<3;j++)
{bank[number].need[j]=bank[number].need[j]+request[j];
bank[0].available[j]=bank[0].available[j]+request[j];
bank[number].allocation[j]=bank[number].allocation[j]-request[j];
}//恢复判断前的原始数据
for(i=0;i<N;i++)
{finish1[i]=f[i];}
goto loop;
}}}
else
{printf("\n Waring: Out the extent!");
printf("\n Contiune or not(Y/N)?");
getchar();
h=getchar();
if (h=='N'||h=='n')
{getchar();
exit(0); }
else
{printf("\n Rewrite the request\n");
goto loop; }//判断选择继续或退出
}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -