使用列表在Python中堆栈数据结构

时间:2018-03-26 01:47:00

标签: python stack structure

对于下面的stack课程

class stack(list):
    def __init__(self):
        self.stack = []
        self.top = -1
    def isempty(self):
        return self.stack == []
    def push(self,x):
        S.top = S.top + 1
        return self.stack.append(x)

S = stack()
S.isempty() #True
S.push(5)  #[5]
S.push(100) #[5,100]
print(S) # Returns empty stack []

为什么不返回更新的[5,100]

1 个答案:

答案 0 :(得分:1)

您要问的问题是,您继承自list,即使您没有尝试像列表那样行事。所有这一切都在造成混乱。特别是,您让list超类定义了对象的显示方式,并且由于您从未执行self.append之类的任何操作,只有self.stack.append,这意味着它总是会显示为空列表。

修复后,您的对象将始终打印出以下内容:

<__main__.stack at 0x11d919dd8>

如果你想自定义它,你需要编写一个__repr__方法,并决定你想要它的样子。

class stack:
    def __init__(self):
        self.stack = []
        self.top = -1
    def __repr__(self):
        return f'<stack({self.stack})>'
    def isempty(self):
        return self.stack == []
    def push(self,x):
        S.top = S.top + 1
        return self.stack.append(x)

您的代码中还有其他错误 - 您仍然有一个方法可以改变全局S而不是self,并且您将返回list.append的结果,总是返回None,可能还有更多 - 但这两个变化将共同解决您所询问的具体问题。