# -*- 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 ...