磁盘管理

提交数: 148, 通过率: 57.43%, 平均分: 58.32

题目描述:

1710641403669966979.png

1710641455522280823.png

输入格式:

输入一个新文件的大小。

输出格式:

输出共两行。

1.打印出所有空闲盘块号。

2.输出整个文件分配表。

数据范围:

文件分配表长度 <= 1000。

样例输入:

5

样例输出:

4 5 6 10 14 15 16 17 18 19
3,7,13,9,5,6,10,8,-1,-1,14,1,0,11,-1,0xff,0xff,0xff,0xff,0xff

提示:

请完善下面的程序:

def mgf( allot ): #mgf的功能是从头到尾扫描文件分配表,创建空白盘区链
    fhead = -1;   flst = []
    n = len(allot);   i = 0
    while i < n:
        if allot[i] == 0xff:
            j = i+1
            while _____________________________:     #填空1
                j = j+1
            flst. append([i, j-i,-1])    # append的作用,在列表末尾添加元素
            if fhead == -1:
                fhead = ____________________     #填空2
                cur = fhead
            else:
                flst[cur][2] = len(flst)-1
                cur = flst[cur][2]
            ____________   #填空3
        else:
            i += 1
    return fhead, flst
allot = [ 3, 7, 13,9, 0xff, 0xff, 0xff,8,-1,-1, 0xff, 1, 0, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]
head , flst = _____________________       #填空4
p = head
while p != -1 :        #打印出所有空闲盘块号
    for i in range( flst[p][1] ):
        print( flst[p][0] + i, end=' ' )
    p = flst[p][2]
print()
wd = int( input() );   p = head
while p !=-1:
    if wd != 0:
        for i in range( flst[p][1] ):
            if flst[p][0] + i != flst[p][0] + flst[p][1]-1:
                allot[ flst[p][0] + i ] = ___________________     #填空5
            else:
                allot[ flst[p][0] + i ] =  ____________________   #填空6
            wd -= 1
            if wd == 0:
                allot[ flst[p][0] + i ] = -1
                break
    _______________   #填空7
for i in range( len( allot )-1 ) :
    if allot[i] != 255 :
        print( allot[i], end=',')
    else:
        print( '0xff' , end=',' )
if allot[-1] != 255 :
    print( allot[-1] )
else:
    print( '0xff'  )
时间限制: 1000ms
空间限制: 256MB

来源: 2023学年第二学期浙南名校