您好,欢迎来到刀刀网。
搜索
您的当前位置:首页define

define

来源:刀刀网
#define n 10 #define m 10

#define minisize 100 struct {

float address; float length; int flag; }used_table[n]; struct {

float address; float length; int flag; }free_table[m];

allocate(J,xk) char J; float xk; {

int i,k; float ad; k=-1;

for (i=0;i if (free_table[i].length>=xk&&free_table[i].flag==1)

if (k==-1||free_table[i].length printf(\"无可用空闲区\\n\"); return; }

if (free_table[k].length-xk <=minisize) {

free_table[k].flag=0;

ad=free_table[k].address; xk=free_table[k].length; } else {

free_table[k].length=free_table[k].length-xk; ad=free_table[k].address+free_table[k].length; } i=0;

while (used_table[i].flag!=0&&i =n) {

printf(\"无表目填写已分分区,错误\\n\"); if (free_table[k].flag==0) free_table[k].flag=1; else

free_table[k].length=free_table[k].length+xk; return; } else {

used_table[i].address=ad; used_table[i].length=xk; used_table[i].flag=J; }

return; }

reclaim(J) char J; {

int i,k,j,s,t; float S,L; s=0;

while ((used_table[s].flag!=J||used_table[s].flag==0)&&s =n) {

printf(\"找不到改作业\\n\"); return; }

used_table[s].flag=0; S=used_table[s].address; L=used_table[s].length; j=-1;k=-1;i=0;

while (i if (free_table[i].flag==0) {

if (free_table[i].address+free_table[i].length==S)k=i; if (free_table[i].address==S+L)j=i; }

i++; }

if (k!=-1)

if (j!=-1) {

free_table[i].length=free_table[j].length+free_table[k].length+L;

free_table[j].flag=0; } else

free_table[k].length=free_table[k].length+L; else

if (j!=-1) {

free_table[j].address=S;

free_table[j].length=free_table[j].length+L; } else {

t=0;

while (free_table[t].flag==1&&t =m) {

printf(\"内存空闲表没有空闲。回收空间失败\\n\"); used_table[s].flag=J; return; }

free_table[t].address=S; free_table[t].length=L; free_table[t].flag=1; }

return 0; }

int main() {

int i,a; float xk; char J;

free_table[0].address=10240; free_table[0].length=102400; free_table[0].flag=1; for (i=0;i free_table[i].flag=1; for (i=0;i used_table[i].flag=0; while (1) {

printf(\"选择功能项(0-退出,1-分配内存,2-回收内存,3-显示内存)\\n\"); printf(\"选择功能(0~3):\"); scanf(\"%d\",&a); switch (a) {

case 0:exit(0); case 1:

printf(\"输入作业名J和作业所需长度xk: \"); scanf(\"%*c%c%f\",&J,&xk); allocate(J,xk); break; case 2:

printf(\"输入要回收分区的作业名\"); scanf(\"%*c%c\",&J); reclaim(J); break; case 3:

printf(\"输出空闲区表:\\n起始地址 分区长度 标志\\n\"); for (i=0;i printf(\"%5.0f%10.0f%6d\\n\",free_table[i].address,free_table[i].length,free_table [i].flag); printf(\"按任意键,输出已分分区表\\n\"); getch();

printf(\"输出已分分区表:\\n起始地址 分区长度 标志\\n\"); for (i=0;i if (used_table[i].flag!=0)

printf(\"%6.0f%9.0f%6d\\n\",used_table[i].address,used_table[i].length,used_table [i].flag); else

printf(\"%6.0f%9.0f%6d\\n\",used_table[i].address,used_table[i].length,used_table [i].flag); break;

default:printf(\"没有该选项\\n\"); } } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务