【數據結構】線性表: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 單鏈表類的實現

相關文章
相關標籤/搜索