之前学数据结构的时候用的是C/C++,一直用的是指针,用python之后很好奇怎么来实现这些数据结构,看了 Python Algorithms - Mastering Basic Algorithms in the Python Language 之后,原来是酱紫啊,实现一下。
链表
先是Node
class Node(object): def __init__(self, value, next=None): self.value = value self.next = next
酱紫就可以实现链表了
没有指针的时候,原来是递归的声明啊。。。
list类,只写了两个push和pop,后进先出,成栈了stack。
class ListException(Exception): pass class List(object): def __init__(self): self.head = None self.tail = None def push(self, value): if self.head is None: self.head = Node(value) self.tail = self.head else: self.tail.next = Node(value) self.tail = self.tail.next def pop(self): if self.head is None: raise ListException value = self.tail.value head = self.head if head.next is None: self.head = None return value while head.next is not self.tail: head = head.next self.tail = head self.tail.next = None return value
一个测试用的函数
def test(): l = List() import random array = random.sample(xrange(10), 10) for i in array: l.push(i) print l print l.head.value print l.tail.value print array print l.tail.value h = l.head while h is not None: print h.value, h = h.next while l.head is not None: print l.pop()
测试结果,做算法的话,用cProfile来瞅瞅函数调用次数和运行时间。