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;
}
Esempio n. 2
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");
 }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
 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);
 }