python使用输入构建堆栈

问题描述:

我试图使用输入(如使用raw_input())来创建堆栈。 输入: 输入的第一行包含堆栈操作的总数N, N≤100000。接下来的N行中的每一行都包含对堆栈操作的描述,其格式为PUSH AB(意为将B推入堆栈A), 或以POP A(意味着从堆栈A中弹出一个元素)的形式,其中A是 堆栈的数目(1≤A≤1000),并且B是整数(0≤B ≤109)。您可以假设,每个操作是正确的(即,在每个POP操作之前,相应的堆栈不是空的)。python使用输入构建堆栈

输出: 对于输入中描述的每个POP操作,输出POP操作从该堆栈的顶部获得的值,应用该值。数字 应根据输入中POP操作的顺序显示。 每个数字应该在一个单独的行中输出。

下面是一些示例输入和出放:

样品输入:

PUSH 1 100

PUSH 1 200

PUSH 2 300

PUSH 2 400

POP 2

POP 1

POP 2

样本输出:

由于

+2

什么问题? – 2015-02-24 01:07:18

+0

这听起来像是一个堆积的队列。如果是这样的话,如果你不想为了课堂或学习练习而这样做,Python已经有了一个实现。 https://docs.python.org/2/library/heapq.html – 2015-02-24 01:08:00

+0

我想要定义我自己的文件,可以包括类或只有方法。无法使用docs.python.org/2/library/heapq.html中的内建堆栈/队列。 – Nick 2015-02-24 01:18:12

你可以尝试写自己的堆栈类,但是你没有写

Stack类: 高清POP(): #BLA 推高清(值): #bla 高清初始化(): #BLA ...

标准列表中有流行的方法和append(追加像推的作品)。

你可以写:

栈1 = []

stack2中= []

和分析输入文件并调用适当的方法。

这是一个示例代码,让你开始。这使用列表来支持堆栈的推动&弹出操作。 注意:这不是一个健壮的代码。仅演示如何使用您的用例列表。

stacks = {} 


def push(s_id, data): 
    if s_id not in stacks: 
     stacks[s_id] = [] 
    stacks[s_id].append(data) 


def pop(s_id): 
    return stacks[s_id].pop() 


f = open("input") 
N = int(f.readline()) 
for i in range(N): 
    tokens = f.readline().split() 
    op = tokens[0] 
    if op == "PUSH": 
     push(tokens[1], tokens[2]) 
    if op == "POP": 
     print pop(tokens[1])