鍊錶由乙個乙個的作為節點的物件構成的,每乙個節點都有指向下乙個節點的指標,最後乙個節點的指標域指向空。每個節點可以儲存任何資料型別。
對單鏈表我們常見的操作有如下:
- insert
- insertbefore
- insertafter
- insertatfirst
- search
- deletefirst
- deletelast
- delete
- reverse
- getnthnode
- …首先我們根據定義實現乙個listnode類。
class
listnode
public
function
__get
($var)
public
function
__set
($var, $val)
}
再來看鍊錶類,首先需要2個私有屬性,分別是頭節點和長度。
class
linkedlist
下面我們長話短說,直接看如何實現第乙個即常用的插入,這是是乙個平均時間複雜度為o(n)的操作。
/**
* 插入乙個節點
* @param string|null $data
* @return bool
* complexity o(n)
*/public function insert(string
$data
=null)
else
$currentnode
->next =
$newnode;
}$this
->length++;
return
true;
}
再來看搜尋,同樣是乙個平均時間複雜度為o(n)的操作。
/**
* 搜尋乙個節點
* @param string $data
* @return bool|listnode
* complexity o(n)
*/public function search(string
$data)
$currentnode
=$currentnode
->next;}}
return
false;
}
反轉單鏈表
public function reverse()
$this
->head =
$reveredlist;}}
}
單鏈表其他操作的詳細實現可以參考 這裡。
單鏈表是鍊錶這種鏈式訪問資料結構中基礎的部分,同樣屬於鍊錶結構的還有雙鏈表,環形鍊錶和多鍊錶。
專題系列
資料結構基礎之單鏈表
資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...
資料結構基礎之單鏈表
資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...
基礎資料結構之單鏈表倒置
1.遞迴方法 簡單來說就是除了空鍊錶和乙個結點的鍊錶之外,當結點的下一跳不為空時就繼續讓下一跳執行倒置。當結點下一跳 為空時,返回該結點給倒數第二個結點,倒數第二個結點將最後一次遞迴返回的最後乙個結點的指標指向自己,然後自己的指標置空,然後返回。依此類推。描述起來有點麻煩,比較簡介,如下 list ...