之前学数据结构的时候用的是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来瞅瞅函数调用次数和运行时间。

posted on 2012-08-31 16:59  duoduo3_69  阅读(1146)  评论(0编辑  收藏  举报