如何實現鍊錶?

2021-10-06 02:04:18 字數 3559 閱讀 3827

鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。

操作複雜。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而線性表和順序表相應的時間複雜度分別是o(logn)和o(1)。

單鏈表:它有乙個表頭,並且除了最後乙個結點外,所有結點都有其後繼節點

雙向鍊錶:它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。

迴圈鍊錶:在雙向鍊錶的基礎上做了優化,表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。

靜態鍊錶:用陣列來描述的鍊錶,這種描述方法便於在沒有指標型別的高階程式語言中使用鍊錶結構

注意邊界條件

1:鍊錶為空

2:超出鍊錶範圍

單鏈表的增刪改查

class

node

}

include

"node.php"

;class

linklist

//頭插法

public

function

addfirst

($value

)//尾插法

public

function

addlast

($value

)/**

* 通用插入方法 指定索引位置

* @param $index int

* @param $value mixed

* @throws exception

*/public

function

add(

$index

,$value

)$prev

=$this

->

head

;for($i

=0;$i

<

$index;$i

++)$prev

->

next

=new

node

($value

,$prev

->

next);

$this

->

size++;

}/**

* 判斷是否存在某個元素

* @param $value mixed

* @return bool

*/public

function

contain

($value

)$contain

=false

;while

($prev

->

next

!=null

)$prev

=$prev

->

next;}

return

$contain;}

/** * 刪除指定位置的值

* @param $index int

* @return

*/public

function

delete

($index

)$prev

=$this

->

head

;for($i

=0;$i

<=

$index;$i

++)$prev

=$prev

->

next;}

$this

->

size--;

}/**

* 修改指定位置的值

* @param $index int

* @param $value mixed

* @return

*/public

function

update

($index

,$value

)for($i

=0;$i

<=

$index;$i

++)$prev

=$prev

->

next;}

$prev

->

next

->

val=

$value;}

/** * 獲取指定位置的值

* @param $index int

* @param return

*/public

function

getvaluebyindex

($index)if

($index

>

$this

->

size-1

)$prev

=$prev

->

next

;for($i

=0;$i

<=

$index;$i

++)$prev

=$prev

->

next;}

return"";

}}

include

"./singellinklist.php"

;$linklist

=new

linklist()

;$linklist

->

addfirst

("aaa");

$linklist

->

addfirst

(111);

$linklist

->

addlast

("ccc");

var_dump

($linklist

->

contain

("aaa"))

."\n"

;var_dump

($linklist

->

contain

(13123))

."\n"

;$linklist

->

delete(10

);$linklist

->

delete(1

);$linklist

->

update(1

,"test");

echo

$linklist

->

getvaluebyindex(1

)."\n"

;echo

$linklist

->

getvaluebyindex(2

);print_r

($linklist

);

php mysql 鍊錶 php如何實現鍊錶?

php實現鍊錶的方法 首先定義乙個節點類,為 function construct val null 然後實現鍊錶的實現類,為 function construct this dummyhead new nod php實現鍊錶的方法 首先定義乙個節點類class node public val pu...

C 鍊錶 linux 如何實現

鍊錶是基本資料結構,一開始學習資料結構時,我一般這麼定義,對應實現從頭或尾插入的處理函式,struct int node old void old list insert struct int node old head,struct int node old new void old list i...

如何用鍊錶實現棧?

棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...