C_银行家算法的实现
来源:互联网 发布:python爬虫培训 编辑:程序博客网 时间:2024/05/20 07:31
#include <stdio.h>#include <stdlib.h>#define PRONUM 5#define RESNUM 4#define SAFE 1#define UNSAFE 0int max[PRONUM][RESNUM];int available[RESNUM];int allocation[PRONUM][RESNUM];int need[PRONUM][RESNUM];int work[RESNUM];int request[RESNUM];int processorder[PRONUM];int smaller(int);int SystemState();void getNeed();void init();void addWorkAndAllocation(int);int main(){ init(); FILE *pFile; pFile = fopen("output.txt", "w"); if(SystemState() == SAFE) { printf("The system is in a safe state and the order is : \n"); int i = 0; for(;i<PRONUM;i++) printf("%d ", processorder[i]); fputs("The system is in a safe state\n", pFile); } else { printf("The sys is in an unsafe state\n"); fputs("The system is in a unsafe state\n", pFile); } fclose(pFile); return 0;}void init(){ char ans; printf("Make a requeset?y/n"); ans = getchar(); int i, j; printf("Please input Allocation : \n"); for(i = 0;i<PRONUM;i++) for(j = 0;j<RESNUM;j++) scanf("%d", &allocation[i][j]); printf("Please input Max : \n"); for(i = 0;i<PRONUM;i++) for(j = 0;j<RESNUM;j++) scanf("%d", &max[i][j]); printf("Please input Available : \n"); for(i = 0;i<RESNUM;i++) scanf("%d", &available[i]); getNeed(); if(ans == 'y') { int process; printf("Please input the num of the process that make a request\n"); scanf("%d", &process); printf("Please inut the Request\n"); { for(i = 0;i<RESNUM;i++) scanf("%d", &request[i]); } for(i = 0;i<RESNUM;i++) { if(request[i] > available[i]) { printf("The request is bigger than available, No request is fulfiled"); return ; } } for(i = 0;i<RESNUM;i++) { need[process][i]-=request[i]; available[i]-=request[i]; allocation[process][i]+=request[i]; } }}void getNeed(){ int i, j; for(i = 0;i<PRONUM;i++) for(j = 0;j<RESNUM;j++) need[i][j] = max[i][j] - allocation[i][j];}int SystemState(){ int i, order; for(i =0;i<PRONUM;i++) work[i] = available[i]; int finish[PRONUM]; for(i = 0;i<PRONUM;i++) finish[i] = 0; order = 0; for(i = 0;i<PRONUM;i++) { if(!finish[i]&& smaller(i)) { order++; finish[i] = 1; processorder[i] = order; addWorkAndAllocation(i); i = -1; } } for(i = 0;i<PRONUM;i++) { if(!finish[i]) return UNSAFE; } return SAFE;}int smaller(int row){ int i = 0; for(;i<RESNUM;i++) { if(need[row][i] > work[i]) return 0; } return 1;}void addWorkAndAllocation(int row){ int i; for(i=0;i<RESNUM;i++) { work[i]+=allocation[row][i]; }}
0 0
- C_银行家算法的实现
- 银行家算法的实现
- 银行家算法的实现
- 银行家算法的模拟实现
- 银行家算法的C实现
- 银行家算法的C++实现
- 银行家算法的简单实现
- [C#]银行家算法的实现
- C#的银行家算法的实现
- 对银行家算法的一种实现
- 银行家算法的C语言实现
- 银行家算法的java编程实现
- 关于银行家算法的模拟实现
- 银行家算法的数组方式实现
- 银行家算法的Python简单实现
- 银行家算法实现
- 银行家算法实现
- 银行家算法:c++实现
- 背包问题博文收藏
- leetcode——322——Coin Change
- Android - SQLite
- HDU 1232 畅通工程(Kruskal)
- JDK的动态代理
- C_银行家算法的实现
- android处理oom异常
- 【Qt】QDockWidget
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- blob 存储大小
- MySQL设计软件登录模块
- 第九周项目1 深复制体验(2)
- 开卷有益
- 二十位活跃在github上的国内技术大牛