首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >堆栈的实现

堆栈的实现
EN

Stack Overflow用户
提问于 2018-06-06 23:44:16
回答 1查看 0关注 0票数 0

我对此感到困惑Stack执行(ADT)。主要通过添加和删除选项,也可以使用空字典,而不是空列表。

我的问题是:

通过使用空列表,删除和添加实现是可以理解的:

class Stack:

    def __init__(self):
        self.elements = []

    def add(self, item):
        self.elements.append(item)

    def remove(self):
        self.elements.pop()

然而,我把这样的实现混淆为一个空字典:

class D:

    def __init__(self):
        self.elements = {}
        self.index = 0 # since only adding one element per add method
        # better to use indexing for key1, then key2

    def add(self, item):
        # For dictionary better to use
        # self.elements[item] = new_item
        # but in stack we adding one element

        self.elements[item] = self.index
        self.index = item

    def remove(self):
        self.elements.pop(self.index)

对于这段代码,我想在添加两个元素之后创建新字典:

例如,我们add(7)add(8)我们得到{7:8}。但是,相反,在添加了更多的元素之后,比如add(9)add(10),我有{7:8}{8:9}{9:10}

我该怎么处理呢?我的删除方法很好,但是添加似乎不太好。

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 09:27:41

问题在于你设置索引的方式。添加新项时,将字典键设置为新值,而字典值设置为前一个值。所以你才会有这个结果。这将不像预期的那样工作,也不会让添加相同的值,因为字典键是唯一的。

字典并不是实现堆栈的真正合适的数据结构,除非您想要使键被递增为数值索引。但在这种情况下,使用列表更容易。

这里有可能(虽然不是很实际)实现:

class D:

    def __init__(self):
        self.elements = {}
        self.index = 0

    def add(self, item):
        self.elements[self.index] = item
        self.index += 1

    def remove(self):
        if not self.index:
            raise Exception('Stack is empty')

        del self.elements[self.index - 1]
        self.index -= 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档