数据结构和算法 python(1)链表 list

本文介绍了如何使用Python实现链表和栈这两种基本的数据结构。通过定义Node类和List类,实现了链表的基本操作如push和pop,并展示了如何不依赖指针而使用递归的方式进行数据结构的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/duoduo369/archive/2012/08/31/2665662.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值