鏈表作爲數據結構的基礎,二叉樹,隊列和棧都可以用它實現,相比數組其優勢是可以快捷方便的增改刪插,但是缺點是查詢不方便,爲便於理解寫可以對其進行包裝測試。
from Node import Node
class LinkList(object):
def __init__(self): #初始實例化的鏈表類,默認表頭爲空
self.head = None
def init_list(self, data):
self.head = Node(None)
p = self.head
for i in data: #遍歷所有的data,以data中元素的數量生產
p.next = Node(i)
p = p.next
def show(self):
p = self.head.next
while p is not None:
print(p.val)
p = p.next
print()
def append(self, item): #尾端插入數據
p = self.head
while p.next is not None:
p = p.next
p.next = Node(item)
def add(self, item): #在表頭插入數據
new_head = Node(item)
p = self.head.next
new_head.next = p
self.head.next = new_head
def alter(self, index, value): #改變鏈表中索引數的具體值
p = self.head
current_index = 0 #當前索引爲0,0索引值即爲指向表頭
while p.next is not None and current_index < index:
p = p.next
current_index += 1
if p.next == None and current_index is not index:
raise IndexError("index out of range")
else:
p.val = value
def get_length(self):
p = self.head
length = 0
while p.next is not None:
p = p.next
length += 1
return length
def clear(self): # 鏈表清空
p = self.head
p.next = None
def insert(self, index, item):
p = self.head
current_index = 0
insert_node = Node(item)
while p.next is not None and current_index < index -1:
p = p.next
current_index += 1
if p.next == None and current_index is not index - 1:
raise IndexError("index out of range")
else:
temp = p.next
p.next = insert_node
insert_node.next = temp
def delete(self, index):
p = self.head
current_index = 0
while p.next is not None and current_index < index - 1:
p = p.next
current_index += 1
if p.next == None:
raise IndexError("index out of range")
else:
p.next = p.next.next
class Node(object):
def __init__(self, val, next = None):#節點的類對象,初始化中第一個參數是數據,默認next爲空
self.val = val #數據保存
self.next = next
from LinkList import LinkList
link = LinkList()
list = [13,53,21,32,4,1,3,5,2,1,2,3,1]
link.init_list(list)
link.insert(2,1323)
print(link.get_length())