之前學(xué)C時(shí)學(xué)到可以通過(guò)指針指向某一節(jié)點(diǎn)實(shí)現(xiàn)空間上不連貫的單位邏輯上連貫,也就是所謂的鏈表,Python中不存在指針的概念,可以通過(guò)定義類來(lái)實(shí)現(xiàn)類似鏈表的效果。
寫下來(lái)做個(gè)總結(jié)
定義節(jié)點(diǎn)
class node(object):
def __init__(self,item):
self.item = item
self.next = None
item代表存儲(chǔ)的內(nèi)容,next用來(lái)模擬指針。
創(chuàng)建單鏈表類
- length:鏈表長(zhǎng)度
- head:鏈表頭節(jié)點(diǎn)
- count:現(xiàn)有節(jié)點(diǎn)數(shù)
class singlechainlist(object):
def __init__(self,length:int):
self.length = length
self.head = node(None)
self.count = 0
def __num_node(self,x:int):
self.count += x
def search(self,x:node): # search for the node and return the precvious node
if self.head.next == x:
return self.head
else:
temp = self.head.next
while temp.next != x:
temp = temp.next
return temp
def add_node(self,node:node): # add at the end of chain
if self.count == self.length:
print('cannot exceed max length')
else:
self.find_tail().next = node
self.__num_node(1)
def find_tail(self,x=None): # find the last node
if x is None:
x = self.head
if x.next is None:
return x
else:
temp = x.next
if temp.next is None:
return temp
else:
return self.find_tail(temp)
def del_node(self,x=None):
if self.head.next is None:
print('no node any more!')
else:
if x is None:
self.search(self.find_tail()).next=None
self.__num_node(-1)
else:
self.search(x).next = x.next
x = None
self.__num_node(-1)
def insert_node(self,x:node,y:node):
if self.count == self.length:
print('cannot exceed max length')
else:
if self.head.next is None:
self.head.next = y
self.__num_node(1)
else:
self.search(x).next = y
y.next = x
self.__num_node(1)
def get_chain(self):
chain = [self.head]
while chain[-1].next != None:
chain.append(chain[-1].next)
return chain
現(xiàn)在實(shí)現(xiàn)的功能:
- 在末尾加節(jié)點(diǎn)
- 在鏈表中插入節(jié)點(diǎn)
- 查找節(jié)點(diǎn)
- 刪除節(jié)點(diǎn)
- 獲取完整鏈表