?? 2.txt
字號:
#include"stdio.h"
#define N 5
struct freearea
{
int startaddress;
int size;
int state;
}freeblock[N]={{20,20,1},{80,50,1},{150,100,1},{300,30,0},{600,100,1}};
int alloc(int applyarea)
{
int i,tag=0;
for(i=0;i<N;i++)
if (freeblock[i].state==1 && freeblock[i].size>applyarea)
{
freeblock[i].startaddress=freeblock[i].startaddress+applyarea;
freeblock[i].size=freeblock[i].size-applyarea;
tag=1;
return freeblock[i].startaddress-applyarea;
}
else
if(freeblock[i].state==1 && freeblock[i].size==applyarea)
{
freeblock[i].state=0;
tag=1;
return freeblock[i].startaddress;
}
if(tag==0)
return -1;
}
void setfree()
{
int s,l,tag1=0,tag2=0,tag3=0,i,j;
printf("input free area startaddress:\n");
scanf("%d",&s);
printf("input free area size:\n");
scanf("%d",&l);
for(i=0;i<N;i++)
{
if(freeblock[i].startaddress==s+1 && freeblock[i].state==1)
{
l=l+freeblock[i].size;
tag1=1;
for(j=0;j<N;j++)
if(freeblock[j].startaddress+freeblock[j].size==s && freeblock[j].state==1)
{
freeblock[i].state=0;
freeblock[j].size=freeblock[j].size+1;
tag2=1;
break;
}
if(tag2==0)
{
freeblock[i].startaddress=s;
freeblock[i].size=l;
break;
}
}
}
if(tag1==0)
{
for(i=0;i<N;i++)
if(freeblock[i].startaddress+freeblock[i].size==s && freeblock[i].state==1)
{
freeblock[i].size=freeblock[i].size+1;
tag3=1;
break;
}
if(tag3==0)
for(j=0;j<N;j++)
if(freeblock[j].state==0)
{
freeblock[j].startaddress=s;
freeblock[j].size=l;
freeblock[j].state=1;
break;
}
}
}
void adjust()
{
int i,j;
struct freearea middata;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(freeblock[j].startaddress>freeblock[j+1].startaddress)
{
middata.startaddress=freeblock[j].startaddress;
middata.size=freeblock[j].size;
middata.state=freeblock[j].state;
freeblock[j].startaddress=freeblock[j+1].startaddress;
freeblock[j].size=freeblock[j+1].size;
freeblock[j].state=freeblock[j+1].state;
freeblock[j+1].startaddress=middata.startaddress;
freeblock[j+1].size=middata.size;
freeblock[j+1].state=middata.state;
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(freeblock[j].state==0 && freeblock[j+1].state==1)
{
middata.startaddress=freeblock[j].startaddress;
middata.size=freeblock[j].size;
middata.state=freeblock[j].state;
freeblock[j].startaddress=freeblock[j+1].startaddress;
freeblock[j].size=freeblock[j+1].size;
freeblock[j].state=freeblock[j+1].state;
freeblock[j+1].startaddress=middata.startaddress;
freeblock[j+1].size=middata.size;
freeblock[j+1].state=middata.state;
}
}
void print()
{
int i;
printf(" |..............................................|\n");
printf(" | start size state |\n");
printf(" |..............................................|\n");
for(i=0;i<N;i++)
{
printf(" | %3d %3d %3d |\n",
freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);
printf(" |..............................................|\n");
}
}
void main()
{
int applyarea,start,j;
char end;
printf("\n is there any job request memory? y or n:");
while((end=getchar())=='y')
{
printf("at first the free momery is this:\n");
adjust();
print();
printf("input request memory size:");
scanf("%d",&applyarea);
start=alloc(applyarea);
adjust();
printf("after allocation,the free memory is this:\n");
print();
if(start==-1)
printf("there is no fit memory,please wait\n");
else
printf("job`smemory start address is:%d\n",start);
printf("job size is:%d\n",applyarea);
printf("job is running.\n");
printf("job is terminated.\n");
for(j=1;j<100000;j++);
setfree();
adjust();
print();
printf("is there any job that is waiting? y/n:");
end=getchar();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -