我已经在许多语言中看到基本上实现堆栈,他们借助其他数据结构。例如:如果我们需要在python中实现堆栈,我们无法利用列表。一个非常简单的例子
class Stack(object):
def __init__(self):
self.stack = []
def isEmpty(self):
return self.stack == []
def push(self, element):
self.stack.append(element)
def pop(self):
return self.stack.pop()
def peek(self):
return self.stack[len(self.stack) - 1]
def size(self):
return len(self.stack)
点是这样做甚至有意义吗?如果是的话怎么样?
答案 0 :(得分:0)
在python中,除非你真的想练习,否则实现自己的堆栈没有任何意义。您可以使用列表,即使没有包装类,也可以使用集合中的deque类。 Deque是堆栈和队列的通用数据结构:
答案 1 :(得分:0)
与任何其他ADT一样,实现数据结构(例如堆栈)的要点是:
有时你从中获得的第二个后果是结构更容易使用;确定没有人愿意每次必须访问时手动管理基于数组的二进制堆的元素,但这不是提供该类型的主要点。在堆栈的情况下,实现起来非常简单,因此从这个意义上说,你不会赢得任何东西。那你得到了什么?
提供包含众所周知的操作的简单API
我认为这仍然不是最重要的方面,但如果你想使用堆栈,那么使用堆栈操作(push,pop)比列表操作更清晰。具体来说,有一个有限的接口,不允许您调用禁止的操作,和/或提供比更通用的方法更好的错误和角落行为。
隐藏结构的实施细节
这是关键点。最重要的是,您不需要(也不能)了解数据结构的实现方式,以便稍后更改实施。假设您现在希望将堆栈保留到磁盘;每次推或弹时都需要添加文件读写操作。现在假设您希望此存储在多台计算机之间分配。假设您要记录每次访问。假设您希望它驻留在GPU上以进行一些加速计算。所有这些可能性都应该支持基本的堆栈操作,但可能并非所有这些操作都支持每个列表操作(或者您可能不希望为每个列表操作实现所有这些操作)。只要您保持相同的原始界面,您只需要对实现进行必要的最小更改,其余代码应该完全相同。
在像Python这样高级,动态类型且具有全面标准库的语言中,这些好处最初并不那么明显,但它们仍然适用于所有相同的。