最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

银行家算法 c语言

业界 admin 8浏览 0评论

操作系统学习之银行家算法,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

操作系统学习之银行家算法,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
发布评论

评论列表 (0)

  1. 暂无评论