银行家算法代码实现(C语言)「建议收藏」

银行家算法代码实现(C语言)「建议收藏」自存#include<stdio.h>#include<stdlib.h>structprocess{inta,b,c;//max值intx,y,z;//allocation值intneed1,need2,need3;//need值intfinish;}p[5];intn=5,i,t;intresource[5]={0};intsum[5]={0};intavai[3]={0};in.

大家好,又见面了,我是你们的朋友全栈君。

 自存

#include <stdio.h>
#include <stdlib.h>

struct process{
    int a,b,c;  //max值
    int x,y,z;  //allocation值
    int need1,need2,need3;  //need值
    int finish;
}p[5];

int n=5,i,t;
int resource[5]={0};
int sum[5]={0};
int avai[3]={0};
int work[3]={0};
int request[3]={0};

void Security_Algorithm(){

    int i;
    printf("系统的available值为:%d %d %d\n",avai[0],avai[1],avai[2]);
    int flag=1;
    int t=0;
    int f[6]={0};
    while(1){
        for(i=0;i<n;i++){
            if((p[i].finish==0)&&(p[i].need1<=work[0]&&p[i].need2<=work[1]&&p[i].need3<=work[2])){
            work[0]+=p[i].x;
            work[1]+=p[i].y;
            work[2]+=p[i].z;
            p[i].finish=1;
            flag++;
            f[t++]=i;  //记录安全序列数
            }
        }
        if(flag>=5) break;
    }

    for(i=0;i<n;i++){
        if(p[i].finish!=1) {
            printf("系统状态不安全\n");
            break;
        }

    }
    if(i==n) {
        printf("系统状态安全\n");
        printf("安全序列为:  ");
        for(i=0;i<t;i++){
            printf("P%d",f[i]);
        }
        printf("\n");
    }

}

int main()
{
    struct process;

    printf("注:本算法代码分析有5个进程、3类资源的问题\n");

    printf("请输入三类资源的总数量为:\n");
    for(i=0;i<3;i++){
        scanf("%d",&resource[i]);
    }

    printf("请按次序输入5个进程(p0-p4)的max值:\n");
    for(i=0;i<n;i++){
        scanf("%d %d %d",&p[i].a,&p[i].b,&p[i].c);
        p[i].finish=0;
    }

    printf("请按次序输入5个进程(p0-p4)的allocation值:\n");
    for(i=0;i<n;i++){
        scanf("%d %d %d",&p[i].x,&p[i].y,&p[i].z);
    }

    for(i=0; i<n; i++){
        sum[0]+=p[i].x;
        sum[1]+=p[i].y;
        sum[2]+=p[i].z;
    }
     for(i=0;i<n;i++){
        p[i].need1=p[i].a-p[i].x;
        p[i].need2=p[i].b-p[i].y;
        p[i].need3=p[i].c-p[i].z;
    }
    //先调用安全算法
    for(i=0;i<3;i++){
        avai[i]=resource[i]-sum[i];
        work[i]=avai[i];
    }
    Security_Algorithm();

    //将finish置零
    for(i=0;i<n;i++){
        p[i].finish=0;
    }


    printf("请输入你想让哪个进程发出请求(0-4):");
    scanf("%d",&t);
    printf("请输入进程发出的请求序列:");

    for(i=0;i<3;i++){
        scanf("%d",&request[i]);
    }



    if(request[0]<=p[t].need1&&request[1]<=p[t].need2&&request[2]<=p[t].need3)
    {
        if(request[0]<=avai[0]&&request[1]<=avai[1]&&request[2]<=avai[2])
        {
        //修改allocation值
            p[t].x+=request[0];
            p[t].y+=request[1];
            p[t].z+=request[2];
            printf("假分配后allocation值:%d %d %d\n",p[t].x,p[t].y,p[t].z);
        //修改need值
            p[t].need1-=request[0];
            p[t].need2-=request[1];
            p[t].need3-=request[2];
            printf("假分配后need值:%d %d %d\n",p[t].need1,p[t].need2,p[t].need3);
        //修改available值
            avai[0]-=request[0];
            avai[1]-=request[1];
            avai[2]-=request[2];

            for(i=0;i<3;i++){
            work[i]=avai[i];
        }
            Security_Algorithm();
            printf("系统可以分配资源\n");

        }
        else printf("不满足available值,无法分配\n");
    }

    else printf("不满足条件任何一个进程的need值,无法分配\n");

    return 0;
}


 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138860.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月30日 下午6:46
下一篇 2022年5月30日 下午7:00


相关推荐

  • JavaScript之数组的详细介绍

    JavaScript之数组的详细介绍每一门编程语言 都有数组或类似数组的结构 同样的 JavaScript 虽然是脚本语言 也不例外 学习 JavaScript 的数组 我们从新建第一个数组开始 JavaScript 中的数组 长度是动态可变的 如果学过其他编程语言的朋友可能对这一点不是很习惯 但事实上反而使得问题变得简单了 因此不需要再定义数组的时候就指定它的大小

    2026年3月19日
    1
  • OpenClaw本地部署最低硬件要求:从基础到优化的全维度指南-天下数据

    OpenClaw本地部署最低硬件要求:从基础到优化的全维度指南-天下数据

    2026年3月13日
    3
  • acwing-91. 最短Hamilton路径(状态压缩dp)

    acwing-91. 最短Hamilton路径(状态压缩dp)给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j])。对于任意的 x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]≥a[x,z]。输出格式输出一个整数,表示最短 Ha

    2022年8月9日
    8
  • bootstrap开发工具_bootstrap经典网页布局

    bootstrap开发工具_bootstrap经典网页布局在这里推荐一款基于bootstrap的在线布局工具,以后布局可以就可以和做PPT一样了http://www.bootcss.com/p/layoutit/

    2022年8月3日
    5
  • 卷积运算原理

    卷积运算原理卷积运算内容选自吴恩达老师的深度学习课程当中 在此记录 以边缘检测为例 介绍卷积是如何进行运算的 一 边缘检测示例首先是垂直边缘检测 对左边的一个 6 6 的灰度图像进行卷积运算 中间 3 3 的即为我们通常说的核或者过滤器 从左边的矩阵左上角开始 利用过滤器在该矩阵上进行计算 对应元素相乘后求和 得到一个数值 例如左上角第一个 3 3 的矩阵 进行卷积后 得到右边 4 4 矩阵的第一个元素 即 5 以此

    2026年3月19日
    2
  • java适合女生学吗_【软帝学院】女生不适合学习java?其实女生学java更有优势,更好就业!…[通俗易懂]

    java适合女生学吗_【软帝学院】女生不适合学习java?其实女生学java更有优势,更好就业!…[通俗易懂]女生适合学java吗?女生做IT怎么样首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说,我觉得这是一种偏见。不少人潜意识里认为女生不适合从事IT开发岗位的工作,因为他们觉得这些岗位对逻辑性的要求很好,而且要具备一定的操作水平,而女生在这方面比较薄弱。实际上,女生从Java的工作,很多时候能做得比男生更好。为什么说女生比男生更能学好java呢?1、女生往往比男生更细心,我…

    2022年7月7日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号