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

📄 bank.cpp

📁 .cpp
💻 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 + -