📄 bank.cpp
字号:
#include "stdio.h"
#include "iostream.h"
#include<malloc.h>
int available[3]={0,0,0};
int n,sum;
typedef struct node
{
int name;
int max[3];
int allocation[3];
int need[3];
int flag;
struct node *next;
}*lklist;
lklist setup()
{
lklist head,q;
head=(lklist)malloc(sizeof(struct node));
q=head;
printf("输入进程个数\n");
scanf("%d",&n);
sum=n;
printf("输入进程名、最大需求、已分配、尚需求\n");
for (int i=0; i<n; i++)
{
lklist p=(lklist)malloc(sizeof(struct node));
p->flag=0; cin>>p->name>>p->max[0]>>p->max[1]>>p->max[2]>>p->allocation[0]>>p->allocation[1]>>p->allocation[2]>>p->need[0]>>p->need[1]>>p->need[2];
q->next=p;
q=p;
}
q->next=0;
printf("输入尚可利用资源数\n");
cin>>available[0]>>available[1]>>available[2];
return(head);
}
void display(lklist head)
{
if(head->next)
{
lklist p=head->next;
while(p)
{
cout<<p->name<<"\t"<<p->max[1]<<"\t"<<p->allocation[1]<<"\t"<<p->need[1]<<"\t"<<p->flag<<endl;
p=p->next;
}
}
}
int cheek(lklist head)
{
int m=1;
if(head->next)
{
lklist p=head->next;
while(p)
{
if(p->flag ==0)
m=0;
p=p->next;
}
}
return(m);
}
void bank(lklist head)
{
int request[3];
int n,biaozhi=0,alldone=0,z=0,flag1=0 ,y=1;
// int y=1;
while(y==1)
{ int work[100]={0,0,0,0,0,0,0,0};
lklist p;
p=head->next;
printf("输入请求进程名 请求数量\n");
cin>>n>>request[0]>>request[1]>>request[2];
while(p->name!=n)
p=p->next;
for(int i=0;i<=2;i++)
{
if(p->need[i]<request[i])
biaozhi=1;
}
if(biaozhi==1)
{
printf("出现错误!所需资源量超过最大值\n");
return;
}
for(int j=0;j<=2;j++)
{
if(available[j]<request[j])
biaozhi=1;
}
if(biaozhi==1)
{
printf("无足够资源,需等待\n");
return;
}
for(i=0;i<=2;i++)
{
p->allocation[i]=p->allocation[i]+request[i];
p->need[i]=p->need[i]-request[i];
available[i]=available[i]-request[i];
}
while(alldone==0&&flag1==0)
{
p=head->next;
while(p->need[0]>available[0] || p->need[1]>available[1] || p->need[2]>available[2] || p->flag==1)
p=p->next;
if(p==0)
flag1=1;
else
{
p->flag=1;
available[0]=p->allocation[0]+available[0];
available[1]=p->allocation[1]+available[1];
available[2]=p->allocation[2]+available[2];
work[z++]=p->name;
}
alldone=cheek(head);
}
if(flag1==1)
printf("不安全分配\n");
for(i=0;i<sum;i++)
printf(" %d",work[i]);
cout<<"\n继续请输'1',否输'0'\t";
cin>>y;
}
}
void main()
{
lklist head;
head=setup();
bank(head);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -