int main(){ //Kamus Lokal int Y; int i,j; int input; List tes; InfoUser X,Z; adrUser usr; //Algoritma /* Load(&tes); usr=FirstUser(tes); for(i=1;i<10;i++)PrintUser(usr,i); usr=NextUser(usr); for(i=1;i<10;i++)PrintUser(usr,i); */ CreateList(&tes); printf("List Kosong : %d\n",IsListEmpty (tes)); printf("Masukkan nama user \n"); scanf("%s",&X.usr); printf("%s\n", X.usr); InsVUser(&tes,X); scanf("%s",&Z.usr); InsVUser(&tes,Z); usr = FindUser(&tes,X); printf("%x\n",usr); j=-1; for (i=0;i<10;i++){ j=j*-1; InsVScore(usr,j*i*100000,0); InsVScore(usr,j*i*j*100000,1); InsVScore(usr,j*i*i*100000,2); InsVScore(usr,j*i*100000,3); InsVScore(usr,j*i*100000,4); InsVScore(usr,j*i*100000,5); InsVScore(usr,j*i*100000,6); InsVScore(usr,j*i*100000,7); } PrintUser(usr,0); usr=NextUser(usr); for (i=10;i>=0;i--){ j=j*-1; InsVScore(usr,j*i*100000,0); InsVScore(usr,j*i*j*100000,1); } PrintUser(usr,0); Save(tes); return 0; }
void algo8_2_main() { int i,n; FreeList a; Space q[N]={NULL}; // q数组为占用块的首地址 printf("sizeof(WORD)=%u m=%u int(pow(2,m))=%u\n",sizeof(WORD),m,int(pow(2,m))); for(i=0;i<=m;i++) // 初始化a { a[i].nodesize=int(pow(2,i)); a[i].first=NULL; } r=a[m].first=new WORD[a[m].nodesize]; // 在最大链表中生成一个结点 if(r) // 生成结点成功 { r->llink=r->rlink=r; // 初始化该结点 r->tag=0; r->kval=m; Print(a); PrintUser(q); n=100; q[0]=AllocBuddy(a,n); // 向a申请100个WORD的内存(实际获得128个WORD) printf("申请%d个字后,可利用空间为:\n",n); Print(a); PrintUser(q); n=200; q[1]=AllocBuddy(a,n); // 向a申请200个WORD的内存(实际获得256个WORD) printf("申请%d个字又",n); n=220; q[2]=AllocBuddy(a,n); // 向a申请220个WORD的内存(实际获得256个WORD) printf("申请%d个字后,可利用空间为:\n",n); Print(a); PrintUser(q); Reclaim(a,q[1]); // 回收q[1],伙伴不空闲 printf("回收q[1]后,可利用空间为:\n"); Print(a); PrintUser(q); Reclaim(a,q[0]); // 回收q[0],伙伴空闲 printf("回收q[0]后,可利用空间为:\n"); Print(a); PrintUser(q); Reclaim(a,q[2]); // 回收q[2],伙伴空闲,生成一个大结点 printf("回收q[2]后,可利用空间为:\n"); Print(a); PrintUser(q); } else printf("ERROR\n"); }
void main() { Space pav,p; /* 空闲块指针 */ Space v[MAX/e]={NULL}; /* 占用块指针数组(初始化为空) */ int n; printf("结构体WORD为%d个字节\n",sizeof(WORD)); p=(WORD*)malloc((MAX+2)*sizeof(WORD)); /* 申请大小为MAX*sizeof(WORD)个字节的空间 */ p->tag=1; /* 设置低址边界,以防查找左右邻块时出错 */ pav=p+1; /* 可利用空间表的表头 */ pav->rlink=pav->a.llink=pav; /* 初始化可利用空间(一个整块) */ pav->tag=0; pav->size=MAX; p=FootLoc(pav); /* p指向底部域 */ p->a.uplink=pav; p->tag=0; (p+1)->tag=1; /* 设置高址边界,以防查找左右邻块时出错 */ printf("初始化后,可利用空间表为:\n"); Print(pav); n=300; v[0]=AllocBoundTag(&pav,n); printf("分配%u个存储空间后,可利用空间表为:\n",n); Print(pav); PrintUser(v); n=450; v[1]=AllocBoundTag(&pav,n); printf("分配%u个存储空间后,pav为:\n",n); Print(pav); PrintUser(v); n=300; /* 分配不成功 */ v[2]=AllocBoundTag(&pav,n); printf("分配%u个存储空间后(不成功),pav为:\n",n); Print(pav); PrintUser(v); n=242; /* 分配整个块(250) */ v[2]=AllocBoundTag(&pav,n); printf("分配%u个存储空间后(整块分配),pav为:\n",n); Print(pav); PrintUser(v); printf("回收v[0](%d)后(当pav空时回收),pav为:\n",v[0]->size); Reclaim(&pav,&v[0]); /* pav为空 */ Print(pav); PrintUser(v); printf("1按回车键继续"); getchar(); printf("回收v[2](%d)后(左右邻区均为占用块),pav为:\n",v[2]->size); Reclaim(&pav,&v[2]); /* 左右邻区均为占用块 */ Print(pav); PrintUser(v); n=270; /* 查找空间足够大的块 */ v[0]=AllocBoundTag(&pav,n); printf("分配%u个存储空间后(查找空间足够大的块),pav为:\n",n); Print(pav); PrintUser(v); n=30; /* 在当前块上分配 */ v[2]=AllocBoundTag(&pav,n); printf("分配%u个存储空间后(在当前块上分配),pav为:\n",n); Print(pav); PrintUser(v); printf("回收v[1](%d)后(右邻区为空闲块,左邻区为占用块),pav为:\n",v[1]->size); Reclaim(&pav,&v[1]); /* 右邻区为空闲块,左邻区为占用块 */ Print(pav); PrintUser(v); printf("2按回车键继续"); getchar(); printf("回收v[0](%d)后(左邻区为空闲块,右邻区为占用块),pav为:\n",v[0]->size); Reclaim(&pav,&v[0]); /* 左邻区为空闲块,右邻区为占用块 */ Print(pav); PrintUser(v); printf("回收v[2](%d)后(左右邻区均为空闲块),pav为:\n",v[2]->size); Reclaim(&pav,&v[2]); /* 左右邻区均为空闲块 */ Print(pav); PrintUser(v); }
void main() { Space pav,p; // 空闲块指针 Space v[MAX/e]={NULL}; // 占用块指针数组(初始化为空) int n; printf("结构体WORD为%d个字节\n",sizeof(WORD)); p=new WORD[MAX+2]; // 申请大小为MAX*sizeof(WORD)个字节的空间 p->tag=1; // 设置低址边界,以防查找左右邻块时出错 pav=p+1; // 可利用空间表的表头 pav->rlink=pav->llink=pav; // 初始化可利用空间(一个整块) pav->tag=0; pav->size=MAX; p=FootLoc(pav); // p指向底部域 p->uplink=pav; p->tag=0; (p+1)->tag=1; // 设置高址边界,以防查找左右邻块时出错 printf("初始化后,可利用空间表为:\n"); Print(pav); n=300; v[0]=AllocBoundTag(pav,n); printf("分配%u个存储空间后,可利用空间表为:\n",n); Print(pav); PrintUser(v); n=450; v[1]=AllocBoundTag(pav,n); printf("分配%u个存储空间后,pav为:\n",n); Print(pav); PrintUser(v); n=300; // 分配不成功 v[2]=AllocBoundTag(pav,n); printf("分配%u个存储空间后(不成功),pav为:\n",n); Print(pav); PrintUser(v); n=242; // 分配整个块(250) v[2]=AllocBoundTag(pav,n); printf("分配%u个存储空间后(整块分配),pav为:\n",n); Print(pav); PrintUser(v); printf("回收v[0](%d)后(当pav空时回收),pav为:\n",v[0]->size); Reclaim(pav,v[0]); // pav为空 Print(pav); PrintUser(v); printf("1按回车键继续"); getchar(); printf("回收v[2](%d)后(左右邻区均为占用块),pav为:\n",v[2]->size); Reclaim(pav,v[2]); // 左右邻区均为占用块 Print(pav); PrintUser(v); n=270; // 查找空间足够大的块 v[0]=AllocBoundTag(pav,n); printf("分配%u个存储空间后(查找空间足够大的块),pav为:\n",n); Print(pav); PrintUser(v); n=30; // 在当前块上分配 v[2]=AllocBoundTag(pav,n); printf("分配%u个存储空间后(在当前块上分配),pav为:\n",n); Print(pav); PrintUser(v); printf("回收v[1](%d)后(右邻区为空闲块,左邻区为占用块),pav为:\n",v[1]->size); Reclaim(pav,v[1]); // 右邻区为空闲块,左邻区为占用块 Print(pav); PrintUser(v); printf("2按回车键继续"); getchar(); printf("回收v[0](%d)后(左邻区为空闲块,右邻区为占用块),pav为:\n",v[0]->size); Reclaim(pav,v[0]); // 左邻区为空闲块,右邻区为占用块 Print(pav); PrintUser(v); printf("回收v[2](%d)后(左右邻区均为空闲块),pav为:\n",v[2]->size); Reclaim(pav,v[2]); // 左右邻区均为空闲块 Print(pav); PrintUser(v); }