链表+算法综合六
班级 姓名
1.【23.05临海新昌联考】程序运行时,以内存单元为根本单位对内存进行安排,假设干个连续的内存单元称为一个内存块,每个内存块的信息包含首地址和大小。编写Python程序模拟内存安排和释放的过程。
1)初始化空闲内存块,将信息存储在链表flink中。
2)安排大小为size的内存。先依次查链表flink 中是否存在不小于size的内存块。假设存在且等于size,那么将其从链表flink中删除;假设存在且大于size,那么修改该内存块的信息;假设不存在,那么对不连续的空闲内存块按挨次进行安排,假如空闲内存块之和仍小于size,那么安排失败。
它的作用是什么3)释放内存。将释放的内存块信息插入链表flink,链表flink各节点按首地址从小到大排列。假如释放的内存块与链表中的某个内存块相邻,那么将它们合并成一个更大的内存块。
mysql有安装包怎么安装
请答复以下问题:
(1)初始空闲内存块大小为16,进行两次安排和一次释放的过程如下图。假设连续安排大小为8的内存块,_________(填写:能/不能)胜利。
①初始化空闲内存块,大小为16
②第1次安排,大小为4,安排后空闲12
③第2次安排,大小为8,安排后空闲4
④释放第1次安排的内存,释放后空闲8(不连续)
(2)定义如下allocate(flink,head,size)函数,参数flink是空闲内存块链表,head是flink头指针,size为所需内存块大小。函数功能为安排size大小的空闲内存块,并返回安排的内存块
信息及头指针head。请在划线处填入适宜的代码。
def allocate(flink,head,size):
block=[]
pre=head
cur=head
while cur !=1:
if flink[cur][1]>=size:
break
pre=cur
① 指针的优先级
if cur!=1 and flink[cur][1]==size:
block.append([flink[cur][0],size])
if pre==cur:
head=flink[cur][2]
else:
②
elif cur!=1 and flink[cur][1]>size:
block.append([flink[cur][0],size])
flink[cur][0]=flink[cur][0]+size
flink[cur][1]=flink[cur][1]size
if len(block)==0:
#对不连续的空闲内存块按挨次进行安排,假如空闲内存块之和仍小于size,那么安排失败,代码省略
return block,head
(3)实现模拟过程及内存释放的局部Python程序如下,请在划线处填入适宜的代码。
def release(flink,head,block):
for i in range(len(block)):
if head==1:
flink.append([block[i][0],block[i][1],1])
head=len(flink)1
else:
pre=head
cur=head
while cur!=1 :
if flink[cur][0]>block[i][0]:
break
pre=cur
cur=flink[cur][2]
flink.append([block[i][0],block[i][1],cur])
if ① :
pre=len(flink)1
head=len(flink)1
else:
flink[pre][2]=len(flink)1
cur=flink[pre][2]
#合并相邻空闲块
while cur!=1:
if flink[pre][0]+flink[pre][1]==flink[cur][0]:
②
flink[pre][2]=flink[cur][2]
cur=flink[cur][2]
continue安卓11专用框架
pre=cur
cur=flink[cur][2]
return [[1,1,1]],head
flink=[[0,16,1]] #初始化空闲内存块链表,0:起始地址,16:长度
head=0
block1,head=allocate(flink,head,4)
block2,head=allocate(flink,head,8)
block1,head=release(flink,head,block1)
2.【23.05义乌统测】汽车整车安装流水线有n个工序(编号为0到n1),每个工序可以有假设干个前置工序,但最多只有一个未完成的后续工序。对于每个工序,只有完成其全部的前置工序,才能开头作业,完成每个工序需要费用。编写程序模拟该安装过程,输入每个工序的编号、后续工序及费用,计算编号为m的工序需要的费用。
请答复以下问题:
如以下图所示,完成工序5有两个前置工序(2和4),需要先完成两个流程:工序0→工序1→工序2,以及工序3→工序4,才能开头工序5的作业。总费用为(1+2+8)+(4+2)+3=20。完成工序7总费用是 。
(2)定义sort(info)函数,将输入的工序信息info排序。
def sort(info):
m=len(info)
for i in range(1,m):
for j in rang(0,mi):
if info[j][0]>info[j+1][0]:
info[j],info[j+1]=info[j+1],info[j]
假设输入的info=[[1,2,1],[0,1,3],[2,3,4],[3,1,2]],运行sort(info)后,info中的数据为
python教材下载(单项选择,填字母)。
A.[[3,1,2],[2,3,4],[1,2,1],[0,1,3]] B.[[0,1,3],[1,2,1],[2,3,4],[3,1,2]]
C.[[3,1,2],[0,1,3],[1,2,1],[2,3,4]] D.[[2,3,4],[1,2,1],[0,1,3],[3,1,2]]
(3)实现输入工序m,计算完成工序m所需费用的局部python程序如下,请在划线处填入适宜的代码。
def crt_Ink(): #创立工序链表,维护相关信息
for job in info:
①
lnk.append([job[0],job[1]])
for i in range(n):
if pre[i]==0:
cur=i
while cur!=1:
src[cur].append(i)
②
def cal_ans(obj): #计算完成工序obj的费用
flag=[0]*n
res=info[obj][2]
for i in src[obj]:
p=i
while p!=obj:
if flag[p]==0:
③
flag[p]=1
p=lnk[p][1]
return res
#读取数据到列表info,每个元素依次为工序编号、后续工序及该工序的费用,代码略
n=len(info)
pre=[0]*n #pre列表用于存储每个工序的前置工序的数量
lnk=[]
src=[[]for i in range(n)]
sort(info)
m=int(input())
crt_Ink()
print(cal_ans(m))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论