單鏈表的python實現

2021-09-23 08:09:01 字數 2181 閱讀 5454

首先說下線性表,線性表是一種最基本,最簡單的資料結構,通俗點講就是一維的儲存資料的結構。

順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素,稱為線性表的順序儲存結構或順序映像;

鏈式表示指的是用一組任意的儲存單元儲存線性表中的資料元素,稱為線性表的鏈式儲存結構。而他既可以是連續的也可以不連續,是通過乙個與後繼結點的連線資訊構建起來的。

*順序表(這個不是本次重點,簡單介紹一下)

順序表是用一段連續的儲存單元依次儲存資料元素,查詢元素是很方便的,但是如果要向其中新增刪除元素就不那麼簡單了。因為新增刪除元素要先找到那個位置,由於順序表內部是通過位址的連續才使他成為乙個表,當刪掉元素時,要把後面的元素全部向前移,填補上空出來的位址空間;新增元素也是一樣,需要先把該位置後面的元素向後移去,才能在這塊位址上新增元素。

以c語言為例:順序表可以通過乙個陣列來表示,每建立乙個陣列就對應給他分配一塊記憶體。當然除了靜態分配空間,還可以動態擴充套件。後續的操作要在這塊記憶體上進行,一般都需要移動陣列元素,複雜度會很高。

在python中,順序表還有兩種表示方式:

一體式結構

分離式結構

這裡的一體和分離是指表中的元素集合,和為實現正確操作而需記錄的資訊,這兩部分是在同一塊空間還是在旁邊的一塊新的空間中。

python中的tuple和list就是採用了順序表的實現技術,不過tuple是不可變的,不支援對內部的操作。而list是乙個元素個數可變的線性表,支援新增刪除等操作。list的思想其實是和c語言中一樣的,只是對其中的功能進行了一些封裝,也就是list的那些屬性。

*鏈式表

那麼,這裡需要指標和位址。python中的指標是什麼呢?下面先把這個放一下,先去理解一下python裡面變數標識的實質。

先看一下這個,為什麼a和b的id是一樣的呢?那我再問乙個問題:python中交換兩個變數的值時怎樣來實現的?

為什麼python可以這樣來賦值呢?下面我再畫一幅圖。

現在是否能理解了呢,變數本身就是儲存的乙個位址,交換他們的值就是把自己的指向更改一下。那麼現在知道了標識的含義,我們的指標域該怎麼寫呢,是不是直接用變數等於下乙個結點啊。這樣看來就不複雜了,接下來的內容就和一般的鍊錶一樣了。我在這裡說這些就是為了弄清楚python是怎麼建立鏈結的。

一、單鏈表

二、單向迴圈鍊錶和雙向鍊錶

單向迴圈鍊錶:在單鏈表的基礎上,再多乙個由尾節點指向首節點的鏈結,首節點是指鍊錶的第乙個存資料的結點,而頭結點是指指向第乙個存資料的結點的那個東西,僅有個鏈結域,而不是真正儲存內容的鍊錶結點。需要注意的是,迴圈鍊錶中,一些功能的建立是和單鏈表不一樣的,比如判空、判滿,它是迴圈的該怎麼判斷呢?這些內容可以在上面給出的單鏈表的實現中進行修改獲得,可以試一下。

雙向鍊錶:與單鏈表相比,這個新增的特性就是雙向。可以從前面向後面傳遞,也可以從後面向前面傳遞,這個前面和後面是我們自己定義的,認為從一端到另一端是正向,那麼倒過來則相反。這個雙向鍊錶的實現和單鏈表也是基本上一樣的。單向鍊錶是除了資料域再新增乙個鏈結域,來指向下乙個結點。那麼同樣的道理,雙向鍊錶就再新增乙個指向前乙個結點的鏈結不就好了。這個時候再建立鍊錶的時候就要把每個節點與前驅結點以及後繼結點的鏈結建立好。

今天本來只想說說前面那一點點內容的,寫的寫的,後面感覺不得不說一下,不過也沒有寫的比較完整。大家撿有用的東西來看。

單鏈表的Python實現

鍊錶是資料結構中最基本常用的,c 語言中單鏈表是利用指標操作實現的,python作為物件導向程式設計的,可以使用建立乙個node類來實現鍊錶,利用類的屬性引用來代替指標操作。下面我們建立了乙個節點類,然後編寫了幾個鍊錶操作,包括建立,插入,刪除,輸出等 class node 初始化 建構函式 def...

python實現單鏈表

code python code coding utf 8 class node def init self,value self.data value self.next none class linklist def init self,data 0 self.head none self.in...

單鏈表 Python實現

class lnode self.elem 結點資料域 方法的第二個引數名是為了與python自帶函式next 區分 def init self,elem,next none self.elem elem self.next next 鍊錶類定義如下,其中包含了很多鍊錶操作方法,如向鍊錶中插入元素 ...