1、银行家 银行家算法#include malloc.h #include stdio.h #include stdlib.h #define alloclen sizeof(struct allocation) #define maxlen sizeof(struct max) #define avalen sizeof(struct available) #define needlen sizeof(struct need) #define finilen sizeof(struct finish) #define pathlen sizeof(struct path) struct allo
2、cation int value; struct allocation *next; ; struct max int value; struct max *next; ; struct available /*可用资源数*/ int value; struct available *next; ; struct need /*需求资源数*/ int value; struct need *next; ; struct path int value; struct path *next; ; struct finish int stat; struct finish *next; ; int
3、main() int row,colum,status=0,i,j,t,temp,processtest; struct allocation *allochead,*alloc1,*alloc2,*alloctemp; struct max *maxhead,*maxium1,*maxium2,*maxtemp; struct available *avahead,*available1,*available2,*workhead,*work1,*work2,*worktemp,*worktemp1; struct need *needhead,*need1,*need2,*needtemp
4、; struct finish *finihead,*finish1,*finish2,*finishtemp; struct path *pathhead,*path1,*path2; printf(n请输入系统资源的种类数:); scanf(%d,&colum); printf(请输入现时内存中的进程数:); scanf(%d,&row); printf(请输入已分配资源矩阵:n); for(i=0;irow;i+) for (j=0;jnext=alloc2-next=NULL; scanf(%d,&allochead-value); status+; else alloc2=(stru
5、ct allocation *)malloc(alloclen); scanf(%d,%d,&alloc2-value); if(status=1) allochead-next=alloc2; status+; alloc1-next=alloc2; alloc1=alloc2; alloc2-next=NULL; status=0; printf(请输入最大需求矩阵:n); for(i=0;irow;i+) for (j=0;jnext=maxium2-next=NULL; scanf(%d,&maxium1-value); status+; else maxium2=(struct ma
6、x *)malloc(maxlen); scanf(%d,%d,&maxium2-value); if(status=1) maxhead-next=maxium2; status+; maxium1-next=maxium2; maxium1=maxium2; maxium2-next=NULL; status=0; printf(请输入现时系统剩余的资源矩阵:n); for (j=0;jnext=available2-next=NULL; work1-next=work2-next=NULL; scanf(%d,&available1-value); work1-value=availab
7、le1-value; status+; else available2=(struct available*)malloc(avalen); work2=(struct available*)malloc(avalen); scanf(%d,%d,&available2-value); work2-value=available2-value; if(status=1) avahead-next=available2; workhead-next=work2; status+; available1-next=available2; available1=available2; work1-n
8、ext=work2; work1=work2; available2-next=NULL; work2-next=NULL; status=0; alloctemp=allochead; maxtemp=maxhead; for(i=0;irow;i+) for (j=0;jnext=need2-next=NULL; need1-value=maxtemp-value-alloctemp-value; status+; else need2=(struct need *)malloc(needlen); need2-value=(maxtemp-value)-(alloctemp-value)
9、; if(status=1) needhead-next=need2; status+; need1-next=need2; need1=need2; maxtemp=maxtemp-next; alloctemp=alloctemp-next; need2-next=NULL; status=0; for(i=0;inext=finish2-next=NULL; finish1-stat=0; status+; else finish2=(struct finish*)malloc(finilen); finish2-stat=0; if(status=1) finihead-next=fi
10、nish2; status+; finish1-next=finish2; finish1=finish2; finish2-next=NULL; /*Initialization compleated*/ status=0; processtest=0; for(temp=0;temprow;temp+) alloctemp=allochead; needtemp=needhead; finishtemp=finihead; worktemp=workhead; for(i=0;istat=0) for(j=0;jnext,worktemp=worktemp-next) if(needtem
11、p-valuevalue) processtest+; if(processtest=colum) for(j=0;jvalue+=alloctemp-value; worktemp1=worktemp1-next; alloctemp=alloctemp-next; if(status=0) pathhead=path1=path2=(struct path*)malloc(pathlen); path1-next=path2-next=NULL; path1-value=i; status+; else path2=(struct path*)malloc(pathlen); path2-
12、value=i; if(status=1) pathhead-next=path2; status+; path1-next=path2; path1=path2; finishtemp-stat=1; else for(t=0;tnext; finishtemp-stat=0; else for(t=0;tnext; alloctemp=alloctemp-next; processtest=0; worktemp=workhead; finishtemp=finishtemp-next; path2-next=NULL; finishtemp=finihead; for(temp=0;te
13、mpstat=0) printf(n系统处于非安全状态!n); exit(0); finishtemp=finishtemp-next; printf(n系统处于安全状态.n); printf(n安全序列为: n); do printf(p%d ,pathhead-value); while(pathhead=pathhead-next); printf(n); return 0; To get started, select MATLAB Help or Demos from the Help menu.? Error using = mrdivideMatrix dimensions mu
14、st agree.Error in = touruchanchu at 4x=b/dx = 139.2801 267.6056 208.1377 dx=inv(b)dx = 1.3459 0.2504 0.3443 0.5634 1.2676 0.4930 0.4382 0.4304 1.2167? Input argument b is undefined.Error in = jacobi at 7N=length(b); A=4,1,-1;1,-5,-1;2,-1,-6b=13;-8;-2P=0;0;0X=jacobi(A,b,P,10(-4),20) A = 4 1 -1 1 -5 -
15、1 2 -1 -6b = 13 -8 -2P = 0 0 0k = 9err = 2.5713e-005X = 3.0000 2.0000 1.0000 A=1,-9,-10;-9,1,5;8,7,1A = 1 -9 -10 -9 1 5 8 7 1 a=-1,0,4a = -1 0 4 p=1,1,1p = 1 1 1 X=jacobi(A,b,P,10(-4),20) k = 20err = 4.3622e+018X = 1.0e+018 * -2.7077 2.7842 -0.2643 X=jacobi(A,b,P,10(-4),20) k = 20err = 4.3622e+018X
16、= 1.0e+018 * -2.7077 2.7842 -0.2643 X=jacobi(A,b,P,10(-4),20) k = 20err = 4.3622e+018X = 1.0e+018 * -2.7077 2.7842 -0.2643 A=10,4,5;4,10,7;5,7,10b=-1,4,0p=1,1,1X=jacobi(A,b,P,10(-4),20) A=5,-1,13;-1,2,4;-3,4,15b=-1,0,4p=1,1,1X=jacobi(A,b,P,10(-4),20) function X=jacobi(A,b,P,delta,max1) % A是n维非奇异阵 % B是n维向量 % P是初值 % delta是误差界 % X为所求的方程组AX=B的近似解 N=length(b); for k=1:max1 for j=1:N X(j)=(b(j)-A(j,1:j-1,j+1:N)*P(1:j-1,j+1:N)/A(j,j); end err=abs(norm(X-P); P=X; if (errdelta) break end end X=X;k,err
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1