<p>对于一些简单的数据结构(例如堆栈),您可以使用内置列表来完成工作。对于更复杂的结构(例如bloom过滤器),您必须使用语言支持的原语自己实现它们。在</p>
<p>你应该使用内置的,如果他们真的为你的目的,因为他们调试和优化了一大群人很长时间。你自己从头开始做可能会产生一个劣质的数据结构。无论你使用的是Python、C++、C语言、java,不管怎样,你都应该首先查看内置的数据结构。它们通常会使用与您必须自己使用的相同的系统原语来实现,但其优点是已经过尝试和测试。在</p>
<p>这些数据结构的组合(可能还有一些helper模块中的函数,比如<a href="http://docs.python.org/library/heapq.html?highlight=heapq#module-heapq" rel="nofollow">heapq</a>和{a2})通常足以实现实际编程中可能需要的最丰富的结构;然而,情况并非总是如此。在</p>
<p>只有当所提供的数据结构不允许您完成所需的工作,并且没有其他可靠的库可供使用时,您才应该考虑从头开始构建(或扩展所提供的内容)。在</p>
<p>假设您需要比丰富的python库提供的更多的东西,考虑这样一个事实:一个对象的属性(和集合中的项)本质上是指向其他对象的“指针”(没有指针算术),即python中的“可重设表引用”(reseatable references),就像在Java中一样。在Python中,通常在属性或项中使用^ {< CD1> }值来表示在爪哇中,^ { CD2}}将意味着C++或^ {CD3}}将意味着什么。在</p>
<p>例如,您可以通过以下方式实现二叉树:</p>
<pre><code>class Node(object):
__slots__ = 'data', 'left', 'right'
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
</code></pre>
<p>以及用于遍历和类似操作的方法或函数(<code>__slots__</code>类属性是可选的,主要用于内存优化,以避免每个<code>Node</code>实例携带自己的{<cd6>},这将大大大于所需的三个属性/引用)。在</p>
<p>其他可以用专用Python类而不是直接组合其他现有Python结构的示例包括<code>tries</code>(参见例如<a href="http://jtauber.com/2005/02/trie.py" rel="nofollow">here</a>)和{<cd8>}(参见例如<a href="http://code.google.com/p/python-graph/" rel="nofollow">here</a>)。在</p>