#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#define NULL 0
#define int ElemType
#define LEN sizeof(struct MainM)
#define minsize 8
int main_mem[1024];
int n;
strct MainM
{
ElemType num;
int size;
int beign;
struct MainM *next,*pre;
}*start, *node;
void mem_made()
{
int use_start=random(1023);
int use_end=random(96);
int i;
while(use_start+use_end<1023)
{
for(i=use_start;i<=use_start+use_end;i++)
{
man_mem[i]=1;
}
use_start=random(1023);
use_end=random(96);
}
}
void create(void)
{
int i=0;
start=(struct MainM*)malloc(LEN);
node=start;
for(;i<1023;)
{
if(main_mem[i]==1)
{
i++;
contiune;
}
else if(main_mem[i]==0)
{
node->next=(struct MainM*)malloc(LEN);
node->next-pre=node;
node->begin=i;
node->size=1;
while((main_mem[++i]==0)&&(i<=1023))
{
node->size++;
}
node=node->next;
}
}
node->pre-next=start;
start-pre=node-pre;
node=start;
}
int scan(int m)
{
int i=0;
int n=0;
struct MainM *p;
p=node;
do
{
if(m>node->size)
node =node->next;
else if(m<=node->size)
{
if(node->size-m<minsize)
{
for(i=node->begin;i<=((node->begin)+node->size-1):i++)
{
main_mem[i]=1;
}
if(start==node)
{
start=node->next;
node->pre->next=start;
start->pre=node->pre;
}
else
{
node->pre->next=node->next;
node->next->pre=node->pre;
}
node=node->next;
p=node;
return 1;
}
else
{
for(i=node->begin;i<=((node->begin)+m-1)i++)
{
main_mem[i]=1;
node->begin+=m;
node->size=m;
if(node->size==0)
{
if(start==node)
{
start=node->next;
node->pre->next=start;
start->pre=node->pre;
}
else
{
node->pre->next=node->next;
node->next->pre=node->pre;
}
}
}
node=node->next;
p=node;
return 1;
}
}
}while(node!=p);
return 0;
}
void print()
{
struct MainM *d;
d=start;
printf("B:");
do
{
printf("%d\t",d->begin);
d=d->next;
}while(d!=start);
d=start;
printf("\nS:");
do
{
printf("%d\t",d->size);
}while(d!=start);
}
void printline()
{
struct MainM *f;
f=node;
setcolor(7);
setlinestyle(8,4,3);
line((f->begin)*0.6+10,425,(f-begin)*0.6+10,440);
line((f->begin)*0.6+7,436,(f-begin)*0.6+10,440);
line((f->begin)*0.6+13,436,(f-begin)*0.6+10,440);
}
int main(int argc,char *argv[])
{
int i=0;
int m=DETECT,d=0;
int con=0;
initgraph(&m,&d,"C:\\TURBOC2\\BGI");
_graphetmem(1024);
clrscr();
mem_made();
create();
while(1)
{
clrscr();
cleardevice();
setbkcolor(1);
setlinestyle(0,0,0);
for(i=0;i<1024;i++)
{
if(main_mem[i]==0)
{
setcolor(2);
}
else if(main_mem[i]==1)
{
setcolor(4);
}
rectangle(1*0.6+10,400,i*0.6+10.5,420);
}
for(i=0;i<1024;i++)
{
if(main_mem[i]==0)
{
setcolor(2);
}
else
setcolor(0);
rectangle(1*0.6+10,440,i*0.6+10.5,460);
}
printline();
for(i=0;i<=1023;i++)
{
printf("%d",main_mem[i]);
}
printf("\n********************************************************************************");
printf("\nPlease input the requests:\n");
scanf("%d",&n);
con=scan(n);
if(con)
{
printf("Success!!");
}
else
{
printf("Nospace to use!Just wait!!");
}
getch();
}
return 0;
}
循环首次适应算法
最新推荐文章于 2022-05-24 13:32:49 发布