#!usr/bin/env python
#-*- coding:utf-8 _*
"""
@author: yaotianlong
@file: linklist.py
@time: 2019/10/22
"""class
listnode
:"""單鏈表結點"""
def__init__
(self, data,
next
=none):
self.data = data
self.
next
=next
class
linklist
:"""
單鏈表基本操作:
- 建立鍊錶
- 列印鍊錶
- 鍊錶總長度
- 判斷鍊錶是否為空
- 在鍊錶末尾追加元素item
- 在index位置前插入元素item
- 刪除index位置上的元素
"""def__init__
(self)
: self.head =
none
# self.head為頭結點
defcreate
(self, data)
:"""
建立鍊錶
:param data: list, 如:[1,2,3]
:return:
"""ifnot
isinstance
(data,
list)or
len(data)==0
:# 特殊判斷:不是列表或者列表為空,退出程式
return
self.head = listnode(data[0]
)# 建立頭結點
p = self.head # 指標p指向頭結點,p的型別為none
for i in data[1:
]:# 在頭結點後邊依次插入列表剩餘結點
p.next
= listnode(i)
p = p.
next
defprint
(self)
:"""
列印鍊錶,以空格分隔,末尾換行
:return:
"""p = self.head
while p:
# 遍歷鍊錶,列印結點值
print
(p.data, end=
" ")
p = p.
next
print()
deflen
(self)
:"""
鍊錶長度
:return: len
"""p = self.head
len=0
while p:
# 遍歷鍊錶,統計結點個數
len+=
1 p = p.
next
return
lendef
is_empty
(self)
:"""
判斷鍊錶是否為空
:return: true or false
"""return
true
if self.
len()==
0else
false
def(self, item)
:"""
:param item: 追加元素的值
:return:
"""p = self.head
while p.
next
: p = p.
next
# 找到末尾位置
p.next
= listnode(item)
# 插入元素
definsert
(self, index, item)
:"""
在鍊錶index位置之前插入元素item, 如:[1,2,3] =>insert(1,4)=> [1,4,2,3]
:param index: 索引,從0開始
:param item: 元素的值
:return:
"""if index > self.
len(
)or index <0:
# 特殊判斷,不在列表範圍,退出程式
return
if index ==0:
# 在第乙個位置插入
self.head = listnode(item, self.head)
return
p = self.head
n =0while n <
(index-1)
: p = p.
next
n +=
1# 找到插入位置
if index == self.
len():
p.next
= listnode(item)
# 在最後乙個位置插入
else
: p.
next
= listnode(item, p.
next
)# 在中間位置插入
defdelete
(self, index)
:"""
刪除鍊錶index位置上的元素, 如:[1,2,3] =>delete(1)=> [1,3]
:param index: 索引,從0開始
:return:
"""if index > self.
len(
)or index <0:
# 特殊判斷,不在列表範圍,退出程式
return
if index ==0:
# 在第乙個位置插入
self.head = self.head.
next
# 跳過,刪除元素
else
: p = self.head
n =0while n <
(index-1)
: p = p.
next
n +=
1# 找到刪除位置
p.next
= p.
next
.next
# 刪除元素
if __name__ ==
"__main__"
: a = linklist(
) a.create([1
,2,4
,3,8
,9])
a.print()
print
("len:"
, a.
len())
print
("head data:"
, a.head.data)
print
("linklist not none"
ifnot a.is_empty(
)else
"linklist is none")20
) a.
print()
a.insert(0,
30)a.
print()
a.delete(a.
len()-
1)a.
print
()
輸出結果:
c:\software\anaconda3\envs\tf_gpu\python.exe d:
/pycharmprojects/datastruct/linklist.py12
4389
len:
6head data:
1linklist not none12
4389
203012
4389
203012
38920
process finished with exit code 0
python用單鏈表實現棧
class lnode 節點的類 def init self,x self.data x self.next none class mystack 用鍊錶實現棧 def init self self.data none self.next none 判斷棧是否為空 def isempty self ...
單鏈表的基本實現
按照自己的喜好和風格總結了下,ps.到底是節點還是結點呢,好糾結 1.節點類 templatestruct node 2.鍊錶的建立 templatenode createlist 用這種方式呼叫createlist 意外收穫 pcurr phead phead phead next delete ...
用單鏈表實現佇列
規則 先進先出,後進後出 第一步 先初始化單鏈表結構。宣告兩個指標,乙個head指標指向頭部結點,乙個last指標指向尾部結點。初始化單鏈表時,頭部head指標和尾部last指標是重合的。用單鏈表實現佇列 author ouyangjun public class singlechaintableq...