python链表怎么定义_链表初介绍以及python实现
一、鏈表定義
鏈表由表頭和節點組成,節點分為數據域和指針域,數據域中存貯數據元素,指針域存儲下個結點的地址。鏈表一般分為單鏈表和雙鏈表。
二、單鏈表的實現創建節點類Node和鏈表類Linklist,Linklist類中包含head屬性,head的值為0或Node對象,Node類中包含value屬性存儲數據,next屬性存儲下個節點的地址(Node對象)。
循環節點從head開始取next屬性,直到next=0為止,返回當前對象。
添加節點時調用循環方法返回最后一個節點對象,把返回節點的next改為當前Node對象,如當前沒有節點,則Linklist實例的head屬性修改為當前Node對象
刪除節點時把前一個節點的next屬性修改為后一個節點的Node對象,如果當前節點是最后一個對象
'''
__author__ Koala
__function__ 單鏈表
__time__ 2020.03.02
'''
class Node:
def __init__(self,vale,node=0):
self.value = value
self.next = node
class LinkList:
def def __init__(self,value=0,*args):
self.lenth = 0
#創建表頭head
self.head = 0 if value ==0 else Node(vale)
#如果初始化實例時傳入多個參數,循環加入鏈表
p = self.head
for i in [*args]:
node = Node(i)
p.next = node
p = p.next
def append(self,value):
if self.head == 0:
self.head == Node(value)
else:
self.iternodes().next = Node(value)
def iternodes(self):
p = self.head
while p:
print(p,value)
if not p.next:
return p
p = p.next
##首先定義節點類Node
class Node:
'''
data: 節點保存的數據
_next: 保存下一個節點對象
'''
def __init__(self,data,pnext=None):
self.data = data
self._next = pnext
def __repr__(self):
'''
用來定義Node的字符輸出
print 為輸出data
'''
return str(self.data)
##定義鏈表類
class ChainTable:
def __init__(self):
self.head = Node
self.length = 0
def isEmpty(self):
return (self.length == 0)
def append(self,dataOrNode):
item = None
if isinstance(dataOrNode,Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if not self.head:
self.head = item
self.length += 1
else:
node = self.head
while node._next:
node = node._next
node._next = item
self.length += 1
##首先定義節點類Node
class Node(object):
'''
data: 節點保存的數據
_next: 保存下一個節點對象
'''
def __init__(self,data,pnext=None):
self.data = data
self.next = pnext
##實例化對象
node1 = Node(1,None)
node2 = Node(2,node1)
node3 = Node(3,node2)
print(node2.next) ##輸出node1的地址
print(node1) ##輸出node1的地址
##首先定義節點類Node
class SingleNode(object):
#單鏈表結點
def __init__(self,item):
#item存放數據
self.item = item
self.next = None
#單鏈表實現
class SingleLinkList(object):
def __init__(self):
self._head = None
def is_empty(self):
return self._head == None
def length(self):
#cur初始時指向頭結點
cur = self._head
count = 0
#尾結點指向None
while cur != None:
count += 1
cur = cur.next
return count
def travel(self):
cur = self._head
while cur != None:
print(cur.item)
cur = cur.next
#頭部添加元素
def add(self,item):
#創建一個保存item值的節點
node = SingleNode(item)
#將新節點的鏈接域指向頭節點,
node.next = self._head
#將鏈表頭節點指向新節點
self._head = node
#尾部添加元素
def append(self,item):
node = SingleNode(item)
#先判斷鏈表是否為空,若為空鏈表,則將_head指向新節點
if self.is_empty():
self._head = node
#若不為空,則找到尾部,將尾部節點的next指向新節點
else:
cur = self._head
while cur.next != None:
cur = cur.next
cur.next = node
#指定位置添加元素
def insert(self,pos,item):
#若指定位置pos為第一個元素之前,則執行頭部插入
if pos <= 0:
self.add(item)
#若指定位置超出鏈表尾部,則執行尾部插入
elif pos > (self.length()-1):
self.append(item)
#找到指定位置
else:
node = SingleNode(item)
count = 0
#pre 用來指向指定位置pos的前一個位置pos-1,
pre = self._head
while count < (pos-1):
pre = pre.next
count += 1
#先將新節點node的next指向插入位置的節點
node.next = pre.next
#將插入位置的前一個節點的next指向新節點
pre.next = node
#刪除節點
def remove(self,item):
cur = self._head
pre = None
while cur != None:
#找到指定元素
if cur.item == item:
#如果第一個就是刪除節點
if not pre:
self._head = cur.next
else:
pre.next = cur.next
else:
pre = cur
cur = cur.next
#檢查節點是否存在
def search(self,item):
cur = self._head
while cur != None:
if cur.item == item:
return True
cur = cur.next
return False
#測試
if __name__ == '__main__':
l1 = SingleLinkList()
l1.add(1)
l1.add(2)
l1.append(3)
l1.append(3)
總結
以上是生活随笔為你收集整理的python链表怎么定义_链表初介绍以及python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杨鹏:17天搞定gre单词的方法
- 下一篇: websocket python爬虫_p