货物存储

提交数: 214, 通过率: 21.96%, 平均分: 25.47

题目描述:

某工厂有若干种货物存储在仓库,仓库有m(编号为0~m-1)个货柜,每个货柜存放一件货物。管理员可以入库、出库等操作,每次操作对象有货物名称和数量,入库时从0号到m-1号找到空的货柜放人仓库,出库时一样按序取出。

如仓库有m=10个货柜,依次进行以下3次操作:

入库:[[‘A’,3],[‘B',1],表示把货物A入库3件,货物B入库1件;

出库:[[‘A’,1]],表示把货物A出库1件;

入库:[[‘C’,2],[‘A’,1]],表示把货物C入库2件,货物A入库1件

操作结束后,仓库的存储模拟视图如第15-1图所示:

0 1 2 3 4 5 6 7 8 9
C A A B C A        

 

输入格式:

输入若干行,表示多次操作。

每次操作第一行一个数字,1表示入库 ,2表示出库,3表示查询, 4表示存储现状图 ,5表示退出

对于操作1,2,3,接下来一行字符串表示操作的描述。

参考样例输入。

输出格式:

输出若干行,对于不同操作输出对应信息。

样例输入:

1
A,3,B,1
2
A,1
1
C,2,A,1
4
3
B
5

样例输出:

[['A', 3], ['B', 1]]
提示:该货物已出库1件
[['C', 2], ['A', 1]]
[4, 2, 5, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2]
存在柜货号(从0开始):4

提示:

知识点:

链表数组:
索引机制:
队列头尾指针:

请完善下列程序:

def findc():
    j = 0
    while ___________________:  #填空1
        j += 1
    if j == m:
        return -1
    c[ j ] = -1
    return j
def putin():
    for i in range(len(a)):
        p = findc()
        if p == -1:
            #仓库已满 
            return
        if a[ i ][ 0 ] not in info: #当前货物没有出现过
            info[ a[ i ][ 0 ] ] = [ p , p ]
        else:
            c[info[ a[ i ][ 0 ] ][ 1 ] ] = p
        for j in range(a[ i ][ 1 ] - 1):
            __________________ # #填空2
            p = c[ p ]
        info[ a[ i ][ 0]][ 1 ] = p
def getout():
    for i in range( len(a) ):
        if a[ i ][ 0 ] not in info:
            print("提示:该货物已无存量")
            continue
        p = info[ a[ i ][ 0 ] ][ 0 ] ; r = 0
        while p != -1 and r < a[ i ][ 1 ]:
            t = c[ p ]; c[ p ] = -2; p = t
            __________________ #填空3
        if p == -1:
            info.pop(a[ i ][ 0 ]) #删除字典中指定的键值对
        else:
            __________________ #填空4
            print("提示:该货物已出库"+str(r)+"件")

m = 20#货柜个数
c = [ -2 ] * m; info = {} #c[i]=-2,表示i号货柜为空
while True:
    #print("仓库管理系统操作菜单:1、入库 2、出库 3、查询 4、存储现状图 5、退出")
    t = int(input()) # "请输入步骤:(1-5)"
    if t==5:
        break
    elif t==1:
        b = input().split(",")
        a = []
        for i in range(0,len(b),2):
            a.append([b[i],int(b[i+1])])
        print(a)
        putin()
    elif t==2:
        b = input().split(",")
        a = []
        for i in range(0,len(b),2):
            a.append([b[i],int(b[i+1])])
        getout()
    elif t==4:
        print(c)
    elif t==3:
        a = input()  #"请输入查询货物:"
        head = ___________ #填空5
        p = head
        while p != -1:
            print("存在柜货号(从0开始):"+str(p+1))
            p = c[p]
时间限制: 1000ms
空间限制: 256MB