⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 yinhangjia.c

📁 银行家算法
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define false 0
#define true 1
int Available[10];           
int Max[10][10];             
int Allocation[10][10]={0};      
int Need[10][10]={0};            
int Work[10];               
int Finish[10];              
int Request[10][10];         
int Pause[10];
int List[10];
int i,j;
int n;                      
int m;                       
int a;                      
int l,e;                     
int b=0,c=0,f=0,g;           
void mainenter()
{
 printf("请输入系统总共有的资源数:");
 scanf("%d",&n);
 printf("请输入总共有多少个进程:");
 scanf("%d",&m);
 for(i=1;i<=n;i++)
 {
  printf("第%d类资源有的资源实例:",i);
  scanf("%d",&Available[i]);
 }
 for(i=1;i<=m;i++)
 {
  for(j=1;j<=n;j++)
  {
   printf("进程P[%d]对第%d类资源的最大需求量:",i,j);
   scanf("%d",&Max[i][j]);
   Need[i][j]=Max[i][j];
  }
 }
}
void mainrequest()
{
    printf("请输入申请资源的进程:");
    scanf("%d",&a);
 for(i=1;i<=n;i++)
 {
  printf("请输入进程P[%d]对%d类资源的申请量:",a,i);
  scanf("%d",&Request[a][i]);
  if(Request[a][i]>Need[a][i])
   printf("\n出错!进程申请的资源数多于它自己申报的最大量\n");
  if(Request[a][i]>Available[i])
   printf("\nP[%d]必须等待\n",a);

  Available[i]=Available[i]-Request[a][i];
  Allocation[a][i]=Allocation[a][i]+Request[a][i];
  Need[a][i]=Need[a][i]-Request[a][i];
  Work[i]=Available[i];
 }
 for(i=1;i<=m;i++) 
 {
  Pause[i]=Available[i];
  Finish[i]=false;
 }
 for(g=1;g<=m;g++)
 {
  for(i=1;i<=m;i++)
  {
   b=0;                 
   for(j=1;j<=n;j++)
   {    
    if(Need[i][j]<=Pause[j])
    {
     b=b+1;    
    }
                if(Finish[i]==false&&b==n)
    {
     for(l=1;l<=n;l++)
     {
      Pause[l]=Pause[l]+Allocation[i][l]; 
     }
     Finish[i]=true; 
     printf("$$ %d ",i);
    }
   }
  }
 }
    printf("\n");
 for(i=1;i<=m;i++)  
 {
  if(Finish[i]==true) 
  f=f+1;
 }
 
 if (f==m)
 {
  printf("safe static");
  f=0;
 }
 else
 {
  printf("unsafe static");
  for(i=1;i<=n;i++)
  {
   Available[i]=Available[i]+Request[a][i];
   Allocation[a][i]=Allocation[a][i]-Request[a][i];
   Need[a][i]=Need[a][i]+Request[a][i];
  }
 }
}
void mainprint()
{
 printf("当前的系统状态\n");
 printf("        目前占有量     最大需求量      尚需要量 \n进程");
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
  {
   printf("  %d类",j);
  }
 for(i=1;i<=m;i++)
 {
  printf("\nP[%d]",i);
  for(j=1;j<=n;j++)
  {
   printf("   %d ",Allocation[i][j]);
  }
  for(j=1;j<=n;j++)
  {
   printf("   %d ",Max[i][j]);
  }
  for(j=1;j<=n;j++)
  {
   printf("   %d ",Need[i][j]);
  }
 }
 printf("\n\n系统剩余资源量:   ");   
 for(i=1;i<=n;i++)
 {
  printf("   %d ",Available[i]);
 }
 printf("\n");
}
void main()
 { int k,h=1;
   while(h)
  {  system("cls"); 
   {
    printf("\n\n            ★ 欢迎使用本程序 ★\n");
    printf("\n\n  1:输入系统的资源数、申请进程数、每个类资源的实例数");
    printf("\n  2:……………………………………  输入进程的资源申请");
    printf("\n  3:……………………………………………  输出系统状态");
    printf("\n  4:…………………………………………………  退出程序");
    printf("\n\n please choose ");
    scanf("%d",&k);
   }
     switch(k)
   {
    case 1:mainenter();      break;
    case 2:mainrequest();      break;
    case 3:mainprint();      break;
    case 4:h=0;        break;
   }
     printf("\n");
     system("pause");
  }
   system("cls");
   printf("\n\n       谢谢使用 \n");
   printf("\n\n  See you next time!!!\n\n\n");
 }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -