python 建立單鏈表

2021-10-05 01:53:53 字數 4648 閱讀 4797

# -*- coding=utf-8 -*-

# software: 演算法學習

# datetime:2020/4/8 11:13 上午

class

node

(object):

def__init__

(self, data=

none

,next

=none):

self._value = data

self._next =

next

defget_value

(self)

:return self._value

defget_next

(self)

:return self._next

defset_value

(self, new_data)

: self._value = new_data

defset_next

(self, new_next)

: self._next = new_next

class

linklist

(object):

def__init__

(self)

: self._head = node(

) self._tail = self._head

self._length =

0def

head

(self)

:"""

鍊錶的第乙個元素(除去頭節點)

:return:

"""if self._head.get_next():

return self._head.get_next(

)else

:return node(

)def

tail

(self)

:"""

鍊錶的最後乙個元素

:return:

"""return self._tail

defis_empty

(self)

:"""

判斷鍊錶是否為空

:return:

"""return self._length ==

0def

size

(self)

:"""

鍊錶的大小

:return:

"""return self._length

defadd(self, value)

:"""

從頭部插入節點

:param value:

:return:

"""new_node = node(value)

new_node.set_next(self._head.get_next())

self._head.set_next(new_node)

self._length +=

1def

(self, value)

:"""

從尾部追加節點

:param value:

:return:

"""new_node = node(value)

if self.is_empty():

self._head.set_next(new_node)

else

: current = self._head

while current.get_next():

current = current.get_next(

) current.set_next(new_node)

self._tail = new_node

self._length +=

1def

search

(self, value)

:"""

查詢資料,返回-1或者節點索引

:param value:

:return:

"""current = self._head.get_next(

) count =

0while current.get_next():

if current.get_value(

)== value:

return count

current = current.get_next(

) count +=

1return-1

defremove

(self, value)

:"""

刪除 返回該資料或者-1

:param value:

:return:

"""current = self._head

pre =

none

while current.get_next():

if current.get_value(

)== value:

ifnot pre:

self._head = current.get_next(

)else

: pre.set_next(current.get_next())

self._length -=

1return current.get_value(

) pre = current

current = current.get_next(

)else

:return-1

definsert

(self, index, value)

:"""

插入資料節點

:param index:

:param value:

:return:

"""if index <=1:

self.add(value)

elif index > self.size():

else

: new_node = node(value)

count =

0 current = self._head

pre =

none

while count < index:

count +=

1 pre = current

current = current.get_next(

) pre.set_next(new_node)

new_node.set_next(current)

self._length +=

1if __name__ ==

'__main__'

: arr =[1

,4,2

,6,8

,4,9

]print

("陣列的長度: "

,len

(arr)

) link_list = linklist(

)print

("空鍊錶size: "

, link_list.size())

print

("空鍊錶是否為空:"

, link_list.is_empty())

print

("空鍊錶的第乙個資料:"

, link_list.head(

).get_value())

print

("空鍊錶的最後乙個資料:"

, link_list.tail(

).get_value())

for i in arr:

# 新增10)

link_list.add(10)

link_list.insert(1,

11)link_list.insert(3,

12)link_list.insert(7,

13)print

("刪除的元素:"

, link_list.remove(1)

)1) link_list.add(10)

current = link_list.head(

) l =

""while current.get_next():

l +=

str(current.get_value())

+" "

current = current.get_next(

) l +=

str(current.get_value())

print

("遍歷鍊錶的值"

, l)

print

("鍊錶的尺寸:"

, link_list.size())

print

("鍊錶的查詢:"

, link_list.search(8)

)print

("鍊錶的第乙個資料:"

, link_list.head(

).get_value())

print

("鍊錶的最後乙個資料:"

, link_list.tail(

).get_value(

))

建立單鏈表

一 單鏈表的建立 有了動態記憶體分配的基礎,要實現鍊錶就不難了。所謂鍊錶,就是用一組任意的儲存單元儲存線性表元素的一種資料結構。鍊錶又分為單鏈表 雙向鍊錶和迴圈鍊錶等。我們先講講單鏈表。所謂單鏈表,是指資料接點是單向排列的。乙個單鏈表結點,其結構型別分為兩部分 1 資料域 用來儲存本身資料 2 鏈域...

單鏈表 使用C Sharp建立單鏈表

單鏈表及其節點 鍊錶是一系列的儲存資料元素的單元通過指標串接起來形成的,因此每個單元至少有兩個域,乙個域用於資料元素的儲存,另乙個域是指向其他單元的指標。這裡具有乙個資料域和多個指標域的儲存單元通常稱為 結點 node 鍊錶的第乙個結點和最後乙個結點,分別稱為鍊錶的 首結點和 尾結點。尾結點的特徵是...

建立線性單鏈表,並將單鏈表翻轉

package 資料結構 public class lianbiao public lianbiao 首先建立單鏈表的結點類。package 資料結構 鍊錶反轉 class lianbiao2 extends lianbiao1 public lianbiao2 int n public void ...