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