`

转 Python 学习:单链表的实现

 
阅读更多

要定义一个单链表,首先定义链表元素:Element.它包含3个字段:
list:标识自己属于哪一个list
datum:改元素的value
next:下一个节点的位置

class LinkedList(object):
   
    class Element(object):
       
        def __init__(self,list,datum,next):
            self._list = list
            self._datum = datum
            self._next = next

        def getDatum(self):
            return self._datum

        datum = property(
            fget = lambda self: self.getDatum())

        def getNext(self):
            return self._next

        next = property(
            fget = lambda self: self.getNext())

Element的构造函数很简单,只是用参数初始化新的节点.

接下来,我们定义LinkedList的初始化函数:

    def __init__(self):

        self._head = None
        self._tail = None

这个函数初始化列表的头和尾元素.
另,我们也定义一个链表清空函数,用于将链表初始化为空链表:

    def purge(self):
        self._head = None
        self._tail = None

我们为链表类定义3个属性:head,tail和isEmpty

,分别表示链表的头,尾和判断链表是否为空.

    def getHead(self):
        return self._head
    head = property(
        fget = lambda self: self.getHead())
    def getTail(self):
        return self._tail
    tail = property(
        fget = lambda self: self.getTail())
    def IsEmpty(self):
        return self._head == None
    isEmpty = property(
        fget = lambda self: self.IsEmpty())

我们为链表类再定义两个属性,first和last, 用于获得链表的头和尾元素的值.当链表为空时,抛出ContainerEmpty异常:

    def getFirst(self):
        if self._head is None:
            raise ContainerEmpty
        return self._head._datum
    first = property(
        fget = lambda self: self.getFirst())

    def getLast(self):
        if self._tail is None:
            raise ContainerEmpty
        return self._tail._datum
    last = property(
        fget = lambda self: self.getLast ())

prepend函数用于将元素插入链表头,这样,插入后的元素变成新的链表头:

    def prepend(self,item):
        tmp = self.Element (self,item,self._head)
        if self._head is None:
            self._tail = tmp
        self._head = tmp

append函数用于给链表末尾添加元素.当链表为空时,添加的元素成为链表的头元素,然后,将元素添加到链表的尾部.

    def append(self,item):
        tmp = Element(self,item,None)
        if self._head is None:
            self._head = tmp
        else:
            self._tail._next = tmp
        self._tail = tmp

给链表定义copy函数,它是 一个浅拷贝函数,首先建立一个空链表,然后逐个添加元素:

    def __copy__(self):
        lst = LinkedList()
        ptr = self._head
        while ptr is not None:
            lst.append(ptr._datum)
            ptr = ptr._next
        return lst

定义链表的删除函数extract,用于删除链表中的特定元素.首先查找该元素的位置,如果不存在,提示KeyError异常.当元素是头元素时,将其下一个节点变为头元素;当其节点是尾元素时,将上一个节点变成尾元素.然后删除它.

    def extract(self,item):
        prePtr = ptr = self._head
        while ptr is not None and ptr._datum is not item:
            prePtr = ptr
            ptr = ptr._next
        if ptr is None:
            raise KeyError
        if ptr == self._head:
            self._head = ptr._next
        else:
            prePtr._next = ptr._next
        if ptr == self._tail:
            self._tail = prePtr

find函数用于查找指定的元素,当没有找到时,返回None:

    def find(self,item):
        ptr = self._head
        while ptr is not None and ptr._datum is not item:
            ptr = ptr._next
        return ptr

至此,一个简单的单链表就已经实现了,可以继续扩展它的功能.
分享到:
评论

相关推荐

    python实现的单链表

    在Python编程语言中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个...在实际开发中,单链表数据结构常用于实现各种算法,如排序、搜索等,是数据结构学习的重要组成部分。

    SingleLinkList_python数据结构单链表函数_

    在这个"SingleLinkList_python数据结构单链表函数_"主题中,我们将深入探讨如何在Python中实现单链表及其核心操作。 首先,我们有两个文件:LList.py和LNode.py。LNode.py通常会定义链表的节点类,而LList.py将包含...

    Python结构:面向程序员的结构化PythonPython Structures: Structured Python for the Principled Programmer

    此外,书中还探讨了在Python中实现替代的链表结构,如单链表、双链表和循环链表,这些高级数据结构为处理特定类型的问题提供了更多的灵活性。 在面向对象编程方面,书籍重点讲解了数据抽象和封装的概念,以及如何...

    数据结构与算法:Python实现单链表及其应用

    内容概要:本文详细介绍了单链表的 Python 实现方法,包括基本操作如 append(在链表末尾添加元素)、prepend(在链表头部添加元素)、delete(删除指定值的节点)、search(搜索指定值的节点)、display(打印链表...

    Python实现数据结构线性链表(单链表)算法示例

    这个示例提供了一个完整的单链表实现,涵盖了数据结构和算法的基础概念,对于学习Python数据结构和算法的初学者来说非常有用。通过理解和实践这些代码,你可以更好地掌握链表操作,为更复杂的算法和数据结构打下坚实...

    Python单链表实现详解及其基本操作(包含详细的完整的程序和数据)

    本文深入探讨了单链表这种线性数据结构的概念与特性,并提供了一套详尽易懂的 Python 实现方案。从理论出发到代码层面进行剖析讲解,涉及链表的关键组成部分以及如何利用 Python 来构建支持基本操作(如插入、删除和...

    python版本单链表实现代码

    在本文中,我们将探讨如何在Python中实现单链表。单链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的引用(在Python中通常称为指针)。在Python中,由于没有原生的指针概念,...

    python如何实现单链表的反转

    这篇文章主要介绍了python如何实现单链表的反转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 # coding=utf-8 class Node: def __init__(self, ...

    SinglyLinkedList:单链表(OOP和数据结构研究)

    这个简单的Python实现展示了如何用OOP来构建一个单链表。 总之,单链表是数据结构学习的基础,理解其工作原理和操作方法对于提升编程能力至关重要。通过实践和深入研究,我们可以更好地利用单链表解决各种问题。在...

    单链表实现从小到大排序

    本主题将深入探讨如何使用单链表实现从小到大排序。 首先,我们需要定义一个节点类(Node Class)。这个类通常包含两个部分:数据域(data field)用于存储元素值,和指针域(next field)用于链接到下一个节点。...

    数据结构:拆分单链表代码

    在本文中,我们将深入理解单链表的结构,学习如何创建、遍历以及拆分单链表。 首先,我们来理解单链表的基本概念。单链表由一系列节点组成,每个节点包含两部分:数据域,用于存储数据;指针域,用于存储指向下一个...

    单链表的基本操作及实现

    单链表是一种基础的数据结构,它在...总的来说,理解和掌握单链表的基本操作对于学习数据结构和算法至关重要,它是许多高级数据结构如双链表、哈希表等的基础。通过熟悉这些操作,能够为编写高效的程序打下坚实的基础。

    50个必会的数据结构及算法实现源码

    数组 问题:实现一个支持动态扩容的数组 问题:实现一个大小固定的有序数组,支持动态增删改操作 问题:实现两个有序数组合并为一个有序数组 ...资源中包括常用语言:c、java、python、go等实现源码,方便参考学习。

    实验三 单链表的插入

    在进行这个实验时,学生可能需要编写代码来实现这些步骤,例如使用C++、Java或Python等编程语言。代码通常会包含一个链表类,其中定义了插入方法。这个方法会接受插入位置和数据作为参数,然后按照上述步骤操作。...

    一个简单的单链表作业

    总的来说,理解和熟练掌握单链表的这些基本操作是学习数据结构和算法的基础,对于提升编程能力非常有帮助。在实际编程中,单链表经常与其他数据结构结合使用,如栈、队列等,以解决更复杂的问题。所以,这个作业是一...

    学习数据结构路线.docx

    学习数据结构是一个逐步的过程,通常包括理解基本的数据结构概念、实现这些结构以及掌握相关的算法。下面是一个建议的学习路线,可以帮助你系统地学习数据结构: 1. 基础准备 编程语言基础:选择一种编程语言(如 ...

    单链表双链表python示例.rar

    本资源“单链表双链表python示例.rar”包含了关于链表的Python实现,特别是单链表和双链表。 单链表是一种每个节点包含数据和指向下一个节点的引用的数据结构。在Python中,我们可以使用类来表示链表的节点,如下所...

    数据结构与算法 python语言

    - **Python实现**: 使用Python实现链接表的具体方法。 #### 三、线性表变形和应用 - **循环单链表**: 概念及其实现方法。 - **双链表**: 双链表的概念和一个实现案例。 - **单链表排序**: 单链表元素的排序算法,...

    大一大作业:C和C++和单链表实现图书管理系统.zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同...

Global site tag (gtag.js) - Google Analytics