可别分区存储管理实验

这篇博客主要介绍了如何使用C语言实现动态分区分配算法,包括首次适应、最坏适应和最佳适应三种算法,并给出了程序代码。博主在实验过程中遇到一些困难,希望得到帮助。
摘要由CSDN通过智能技术生成

老师给的程序实验,但是我c语言不太会,这个程序是有很多错误的,能不能有大佬帮忙把错误改正。感谢大佬们

二、实验内容

实现下列内存分配算法:首次适应算法、最佳适应算法、最坏适应算法

三、实验程序

#include<stdio.h>

#define L10

Typedef struct  LNode

  {int startaddress;

Int size;

Int state;

} LNode;

LNode

 

P[L]={{0,128,0},{200,256,0},{500,512,0},{1500,1600,0},{5000,150,0}};

Int N=5; int f=0;

 

Void print()

{  int i;

printf(“起始地址     分区     状态\n”);

for(i=0;i<N;i++)

printf(“%3d    %8d    %4d\n”,P[i].startaddress,P[i].size,P[i].state);

}

 

Void First()

{  int i,l=0,m;

printf(“\n 输入请求分配分区的大小:”);

scanf(“%d”,&m);

for (i=0;i<N;I++)

{   if (P[i].size<m)

Continue;

else  if (P[i].size==m)

{  P[i].state=1;

l=1;

break;

}

else

{  P[N].startaddress=P[i].startaddress+m;

P[N].size=P[i].size-m;

P[i].size=m;   P[i].state=1;

l=1;   N++;

break;

}

}

if (l==1||i<N )

{   printf(“地址成功分配\n\n”);

printf(“地址分配成功后的状态:\n”);

print();

}

else

printf(“没有可以分配的地址空间\n”);

}

 

 

 

viod  Worst()

{   int i,t=0,l=0,m;

int a[L];

printf(“\n 输入请求分配分区的大小:”);

sxanf(“%d”,&m);

for (i=0;i<N;i++)

{  a[i]=0;

if (P[i].size<m)

continue;

else if (P[i].size==m)

{  P[i].state=1;

l=1; 

break;

}

else

a[i]=P[i].size-m;

}

if (l==0)

{  for(i=0;i<N;I++)

{   if(a[i]!=0)

t=i;

}

for (i=0;i<N;i++)

{  if(a[i]!=0 && a[i]>a[t])

t=i;

}

P[N].startaddress=P[t].startaddress+m;

P[N],size=P[t].size-m;

P[t].size=m; P[t].state=1;

l=1; N++;

}

if (l==1 || i<N)

{  printf(“地址成功分配\n\n”);

printf(“地址分配成功后的状态:\n”);

print();

}

else

printf(“没有可以分配的地址空间\n”);

}

 

 

void Best()

{   int i,t=0,l=0,m;

int a[L];

printf(“\n 输入请求分配分区的大小:”);

sxanf(“%d”,&m);

for (i=0;i<N;i++)

{  a[i]=0;

if (P[i].size<m)

continue;

else if (P[i].size==m)

{  P[i].state=1;

l=1; 

break;

}

else

a[i]=P[i].size-m;

}

if (l==0)

{  for(i=0;i<N;I++)

{   if(a[i]!=0)

t=i;

}

for (i=0;i<N;i++)

{  if(a[i]!=0 && a[i]<a[t])

t=i;

}

P[N].startaddress=P[t].startaddress+m;

P[N],size=P[t].size-m;

P[t].size=m; P[t].state=1;

l=1; N++;

}

if (l==1 || i<N)

{  printf(“地址成功分配\n\n”);

printf(“地址分配成功后的状态:\n”);

print();

}

else

printf(“没有可以分配的地址空间\n”);

}

 

 

void main()

{   int k=0;

printf(“动态分区分配算法:”);

while(k!=5)

{  printf(“\n********************主菜单********************”);

  printf(“\n1、首次适应算法\n、”);

printf(“\n2、最坏适应算法\n3、最佳适应算法”);

printf(“\n4、退出\n”);

printf(“请选择算法:”);

scanf(“%d”,&k);

switch (k)

{  case 1:

printf(“\n 初始状态为:\n”);

print();

First();

continue;

case 2:

printf(“\n 初始状态为:\n”);

print();

CirFirst();

continue;

case 3:

printf(“\n 初始状态为:\n”);

print();

Worst();

continue;

case 4:

printf(“\n 初始状态为:\n”);

print();

Best();

continue;

case 5:

break;

default printf(“选择错误,请重新选择。\n”);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值