操作系统学习之银行家算法,c语言代码实现:
本人原创代码,如果有什么错误的地方,欢迎大佬指正!
#include<stdio.h>
#include <malloc.h>
#include<stdlib.h>
typedef struct
{
int A;//资源A
int B;//资源B
int C;//资源C
}PCB;
typedef struct _Node
{
struct _Node* next;//创建next
PCB pcb;//类型重命名
}node;
struct node* creat_all() //利用链表创建总资源个数矩阵,此链表头结点不为空!
{
node* head = malloc(sizeof(node));//创建一个头结点
scanf("%d%d%d", &head->pcb.A, &head->pcb.B, &head->pcb.C);//输入头结点的成员变量
return head;//返回head链表
}
struct node* creat_need(int count)//利用链表创建最大需求矩阵,此链表头结点为空!
{
node* head = malloc(sizeof(node));
head->next = NULL;//将头节点赋予空值
node* move = head;//用move指针指向头结点
for (int i = 0; i < count; i++)
{
node* fresh = malloc(sizeof(node));//创建临时指针fresh
fresh->next = NULL;//fresh直接下一个结点为空
move->next = fresh;//将fresh指向move的下一个结点
scanf("%d%d%d", &fresh->pcb.A, &fresh->pcb.B, &fresh->pcb.C);//输入该结点的成员变量
move = fresh;//move指向fresh所在位置的结点,即将move向后移动一个结点
}
return head;
}
//创建资源经过分配后各类资源剩余的矩阵
struct node* surp(node* p, node* r, int n) {
node* move = r->next;//因为r链表的头结点为空,所以move指向r头结点的下一个结点
int a = 0,b=0,c=0;//定义单个整形变量,用于存储各类资源已分配的总数
int i;
for ( i = 0; i < n; i++) {
a = a + move->pcb.A;
move = move->next;
}
move = r->next;
for (i = 0; i &l