Python的list
和tuple
采用了顺序表的实现技术,具备顺序表的全部性质。函数
单向连接表 的结点是一个二元组。指针
其表元素域elem保存着做为表元素的数据项(或者数据项的关联信息),连接域next里保存着同一个表里的下一个结点的标识。code
首先定义一个简单的表结点类:对象
class LNode: def __init__(self,elem,next_=None): self.elem = elem self.next = next_
这个类里只有一个初始化方法,它给对象的两个域赋值。方法的第二个参数用名字next_,是为了不与Python标准函数next重名。这也是Python程序中命名的一个惯例。第二个参数还提供了默认值,只是为了使用方便。it
只须要把相应的表头变量设置为空连接,在Python语言中将其设置为None。class
应丢弃这个链表里的全部结点。这个操做的实现与具体的语言环境有关。在一些语言(如C语言)里,须要经过明确的操做释放一个个结点所用的存储。在Python中,这个操做很简单,只需简单地将表指针赋值为None,就抛弃了链表原有的全部结点。Python解释器的存储管理系统会自动回收不用的存储。变量
将表头变量的值与空连接比较。在Python语言中,就是检查相应变量的值是否为None。遍历
通常而言链表不会满,除非程序用光了全部可用的存储空间。程序
在链表里加入新元素时,并不须要移动已有的数据,只需为新元素安排一个新结点,而后根据操做要求,把新结点连在表中的正确元素。也就是说,插入新元素的操做是经过修改连接,接入新结点,从而改变表结构的方式实现的。方法
建立一个新结点并存入数据
把原数据首结点的连接存入新结点的连接域next,这一操做将原表的一串结点连接在刚建立的新结点以后
修改表头变量,使之指向新结点,这个操做使新结点实际成为表头变量所指的结点,即表的首结点
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