【数据结构】线性表:Python语言描述

1.线性表

Python的listtuple采用了顺序表的实现技术,具备顺序表的全部性质。函数

2.连接表

单向连接表 的结点是一个二元组。指针

其表元素域elem保存着做为表元素的数据项(或者数据项的关联信息),连接域next里保存着同一个表里的下一个结点的标识。code

首先定义一个简单的表结点类:对象

class LNode:
  def __init__(self,elem,next_=None):
    self.elem = elem
    self.next = next_

这个类里只有一个初始化方法,它给对象的两个域赋值。方法的第二个参数用名字next_,是为了不与Python标准函数next重名。这也是Python程序中命名的一个惯例。第二个参数还提供了默认值,只是为了使用方便。it

2.1 基本链表操做

建立空链表

只须要把相应的表头变量设置为空连接,在Python语言中将其设置为None。class

删除链表

应丢弃这个链表里的全部结点。这个操做的实现与具体的语言环境有关。在一些语言(如C语言)里,须要经过明确的操做释放一个个结点所用的存储。在Python中,这个操做很简单,只需简单地将表指针赋值为None,就抛弃了链表原有的全部结点。Python解释器的存储管理系统会自动回收不用的存储。变量

判断表是否为空

将表头变量的值与空连接比较。在Python语言中,就是检查相应变量的值是否为None。遍历

判断表是否满

通常而言链表不会满,除非程序用光了全部可用的存储空间。程序

加入元素

在链表里加入新元素时,并不须要移动已有的数据,只需为新元素安排一个新结点,而后根据操做要求,把新结点连在表中的正确元素。也就是说,插入新元素的操做是经过修改连接,接入新结点,从而改变表结构的方式实现的。方法

表首端加入

  1. 建立一个新结点并存入数据

  2. 把原数据首结点的连接存入新结点的连接域next,这一操做将原表的一串结点连接在刚建立的新结点以后

  3. 修改表头变量,使之指向新结点,这个操做使新结点实际成为表头变量所指的结点,即表的首结点

q = LNode(13)
q.next = head.next
head = q

注意,即便在插入前head指的是空表,上面三步也能正确完成工做。这个插入只是一次安排新存储和几回赋值,操做具备常量时间复杂度。

通常状况的元素插入

要想在单链表里的某位置插入一个新结点,必须先找到该位置以前的那个结点,由于新结点须要插入它的后面,须要修改它的next域

设变量pre已指向要插入元素位置的前一结点,操做也分为三步:

q = LNode(13)
q.next = pre.next
pre.next = q

删除元素

删除表首元素

通常状况的元素删除

扫描、定位和遍历

链表操做的复杂度

求表的操做

def length(head):
    p,n = head,0
    while p is not None:
        n += 1
        p = p.next
    return n

3.3.3 单链表类的实现

相关文章
相关标签/搜索