7-1 内存分区分配--首次适应算法 (100 分),2024年Java大厂面试

4

0

结尾无空行

输出样例1:

在这里给出相应的输出。例如:

1.初始化

2.分配

3.回收

4.显示

0.退出

请选择:

分区号 分区 起始地址 结束地址 大小 当前状态

1 void 0 1023 1024 空闲

结尾无空行

输入样例2:

在这里给出一组输入。例如:

1

1000 5

2

A 100

2

B 200

2

C 150

2

D 250

2

E 200

2

F 95

4

0

结尾无空行

输出样例2:

在这里给出相应的输出。例如:

1.初始化

2.分配

3.回收

4.显示

0.退出

请选择:

分配成功!

分配成功!

分配成功!

分配成功!

分配成功!

分配成功!

分区号 分区 起始地址 结束地址 大小 当前状态

1 A 0 99 100 已分配

2 B 100 299 200 已分配

3 C 300 449 150 已分配

4 D 450 699 250 已分配

5 E 700 899 200 已分配

6 F 900 999 100 已分配

结尾无空行

输入样例3:

在这里给出一组输入。例如:

1

1000 5

2

A 100

2

B 200

2

C 150

2

D 250

2

E 200

2

F 150

4

0

结尾无空行

输出样例3:

在这里给出相应的输出。例如:

1.初始化

2.分配

3.回收

4.显示

0.退出

请选择:

分配成功!

分配成功!

分配成功!

分配成功!

分配成功!

剩余空间不足,不予分配。

分区号 分区 起始地址 结束地址 大小 当前状态

1 A 0 99 100 已分配

2 B 100 299 200 已分配

3 C 300 449 150 已分配

4 D 450 699 250 已分配

5 E 700 899 200 已分配

6 void 900 999 100 空闲

结尾无空行

输入样例4:

在这里给出一组输入。例如:

1

1000 5

2

A 100

2

B 200

2

C 150

2

D 250

2

E 200

2

F 150

3

A

4

0

结尾无空行

输出样例4:

在这里给出相应的输出。例如:

1.初始化

2.分配

3.回收

4.显示

0.退出

请选择:

分配成功!

分配成功!

分配成功!

分配成功!

分配成功!

剩余空间不足,不予分配。

回收成功!

分区号 分区 起始地址 结束地址 大小 当前状态

1 void 0 99 100 空闲

2 B 100 299 200 已分配

3 C 300 449 150 已分配

4 D 450 699 250 已分配

5 E 700 899 200 已分配

6 void 900 999 100 空闲

结尾无空行

输入样例5:

在这里给出一组输入。例如:

1

1000 5

2

A 100

2

B 200

2

C 150

2

D 250

2

E 200

2

F 150

3

A

2

X 150

Y

4

0

结尾无空行

输出样例5:

在这里给出相应的输出。例如:

1.初始化

2.分配

3.回收

4.显示

0.退出

请选择:

分配成功!

分配成功!

分配成功!

分配成功!

分配成功!

剩余空间不足,不予分配。

回收成功!

是否通过紧凑技术,重新划分?(Y/N)

分配成功!

分区号 分区 起始地址 结束地址 大小 当前状态

1 B 0 199 200 已分配

2 C 200 349 150 已分配

3 D 350 599 250 已分配

4 E 600 799 200 已分配

5 X 800 949 150 已分配

6 void 950 999 50 空闲

二:思路

===================================================================

思路:

1.解释算法:动态分区分配-首次适应算法:

<1>:动态分区分配是根据进程的实际需要,动态的为之分配内存的空间,

<2>:那么首次适应算法首次适应算法,要求空闲分区链以地址递增的次序链接,

在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的

空闲分区为止,然后再按照作业的大小,

从该分区中划出一块内存空间分给请求者,余下的空闲分区仍停留在空闲链中。

2.写码思路:先将整个框架写好,然后挨个写功能

3.选择数据结构:因为每组数据有多个,所以我们选择结构体数组

4.输入的要求

<1>.初始化:输入内存的大小和阈值minsize,初始状态下空闲分区名字为“void”。

<2>.分配:输入申请进程的名字、大小。

若可以分配,显示“分配成功!”;

若剩余空间不足,显示不分配原因“剩余空间不足,不予分配。”;

若剩余的空间通过紧凑技术,可以再分配,提示“是否通过紧凑技术,

重新划分?(Y/N)”若选择“Y”,通过紧凑技术重新划分并分配,成功后,

显示“分配成功!”若选择“N”,则输出“没有合适的剩余空间,不予分配。”

<3>.回收:输入回收进程的名字,若有相邻空闲分区,需要合并,并输出“回收成功!”;

若输入错误,提示“查无此分区!”

<4>.显示:显示当前内存的分配状态。

<0>.退出

其他:输出“输入错误,请重新输入。”

5.注意如果输入的进程没有占满内存,需要将剩下的内存也得输出来 并表示为空闲状态;

三:演示流程

=====================================================================

在这里插入图片描述

四:debug(贴心杰的建议方式)

================================================================================

1:每实现一个功能就测试,不要等都写完了在去测试

2:整个码都码完了,那就挨个测试给出的示例,

3:如果上方还为未测试出你的bug,那么你就还是用给出的示例 但有一点,每当我们测试完一个用例后,不要退出,直接用功能 3 回收各个进程,然后再测试下一个用例

4:如果还没有,那就用PTA自带的测试用例,可以测你的格式是否正确,这道题最狗的还有是你输出的一定要跟样例一样,包括标点符号

五:上码(有些没用的注解 懒得删了 嘻嘻)

====================================================================================

/**

思路:

1.解释算法:动态分区分配-首次适应算法:

<1>:动态分区分配是根据进程的实际需要,动态的为之分配内存的空间,

<2>:那么首次适应算法首次适应算法,要求空闲分区链以地址递增的次序链接,

在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的

空闲分区为止,然后再按照作业的大小,

从该分区中划出一块内存空间分给请求者,余下的空闲分区仍停留在空闲链中。

2.写码思路:先将整个框架写好,然后挨个写功能

3.选择数据结构:因为每组数据有多个,所以我们选择结构体数组

4.输入的要求

<1>.初始化:输入内存的大小和阈值minsize,初始状态下空闲分区名字为“void”。

<2>.分配:输入申请进程的名字、大小。

若可以分配,显示“分配成功!”;

若剩余空间不足,显示不分配原因“剩余空间不足,不予分配。”;

若剩余的空间通过紧凑技术,可以再分配,提示“是否通过紧凑技术,

重新划分?(Y/N)”若选择“Y”,通过紧凑技术重新划分并分配,成功后,

显示“分配成功!”若选择“N”,则输出“没有合适的剩余空间,不予分配。”

<3>.回收:输入回收进程的名字,若有相邻空闲分区,需要合并,并输出“回收成功!”;

若输入错误,提示“查无此分区!”

<4>.显示:显示当前内存的分配状态。

<0>.退出

其他:输出“输入错误,请重新输入。”

5.注意如果输入的进程没有占满内存,需要将剩下的内存也得输出来 并表示为空闲状态;

**/

#include<bits/stdc++.h>

using namespace std;

struct Node{

int id;//id号

string partition = “void”;//分区

int start;//起始地址

int end; //结束地址

int size;//大小

string state = “空闲”;//当前的状态

}node[1000];

int cnt = 0;

int memory,minsize;//内存的大小和阙值

int sumSize = 0;//记录累计的容量

//1.初始化

void Initialize(){

cin >> memory >> minsize;

node[cnt].id = 1;

node[cnt].start = 0;

node[cnt].end = memory - 1;

node[cnt].size = memory;

}

//2.分配

//分区号 分区 起始地址 结束地址 大小 当前状态

//1 void 0 1023 1024 空闲

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

image

image

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-2M9LTsZ2-1710957483419)]
[外链图片转存中…(img-mrbYCmHY-1710957483420)]
[外链图片转存中…(img-2NZwc8S7-1710957483421)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-goR9bs6b-1710957483421)]

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

[外链图片转存中…(img-5YTEOQM4-1710957483422)]

[外链图片转存中…(img-QLj21vuf-1710957483422)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值