用python实现链表_用python实现链表结构
# 定義鏈表類
# 鏈表要包括:
# 屬性:
# 鏈表頭:head
# 鏈表長度:length
class ChainTable(object):
def __init__(self):
# 初始化鏈表
self.head = None
self.length = 0
def isEmpty(self):
return self.length == 0
# 增加一個(gè)節(jié)點(diǎn)(在鏈表尾添加): append()
def append(self, dataOrNode):
item = None
if isinstance(dataOrNode, Node):
item = dataOrNode # 節(jié)點(diǎn)類的實(shí)例
else:
item = Node(dataOrNode) # 節(jié)點(diǎn)類的實(shí)例
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
# 增加一個(gè)節(jié)點(diǎn)(在鏈表頭添加): add()
def add(self, dataOrNode):
item = None
if isinstance(dataOrNode, Node):
item = dataOrNode # 節(jié)點(diǎn)類的實(shí)例
else:
item = Node(dataOrNode) # 節(jié)點(diǎn)類的實(shí)例
if not self.head:
self.head = item
self.length += 1
else:
nextnode = self.head
self.head = item
item._next = nextnode
self.length += 1
# 刪除一個(gè)節(jié)點(diǎn):delete()
def delete(self, index):
if self.isEmpty():
print("this chain table is empty.")
return
if index < 0 or index >= self.length:
print('error: out of index')
return
# 要注意刪除第一個(gè)節(jié)點(diǎn)的情況
# 如果有空的頭節(jié)點(diǎn)就不用這樣
# 但是我不喜歡弄頭節(jié)點(diǎn)
if index == 0:
self.head = self.head._next
self.length -= 1
return
# prev為保存前導(dǎo)節(jié)點(diǎn)
# node為保存當(dāng)前節(jié)點(diǎn)
# 當(dāng)j與index相等時(shí)就
# 相當(dāng)于找到要?jiǎng)h除的節(jié)點(diǎn)
j = 0
node = self.head
prev = self.head
while j < index:
prev = node
node = node._next
j += 1
if j == index:
prev._next = node._next
self.length -= 1
# 修改一個(gè)節(jié)點(diǎn):update()
def update(self, index, data):
if self.isEmpty() or index < 0 or index >= self.length:
print('error: out of index')
return
j = 0
node = self.head
while j < index:
node = node._next
j += 1
if j == index:
node.data = data
# 查找一個(gè)節(jié)點(diǎn): getItem()
def getItem(self, index):
if self.isEmpty() or index < 0 or index >= self.length:
print('error: out of index')
return
j = 0
node = self.head
while j < index:
node = node._next
j += 1
if j == index:
return node.data
# 查找一個(gè)節(jié)點(diǎn)的索引: getIndex()
def getIndex(self, data):
if self.isEmpty():
print('error: out of index')
return
j = 0
node = self.head
while node:
if node.data == data:
return j
node = node._next
j += 1
if j == self.length:
print("%s is not found" % str(data))
return
# 插入一個(gè)節(jié)點(diǎn): insert()
def insert(self, index, dataOrNode):
if self.isEmpty():
print('this chain table is empty.')
return
if index < 0 or index >= self.length:
print("error: out of index")
return
item = None
if isinstance(dataOrNode, Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if index == 0:
item._next = self.head
self.head = item
self.length += 1
return
j = 0
node = self.head
prev = self.head
while j < index:
prev = node
node = node._next
j += 1
if j == index:
prev._next = item
item._next = node
self.length += 1
# 清空鏈表
def clear(self):
self.head = None
self.length = 0
# 展示鏈表
def show(self):
n = 0
if self.isEmpty():
print("this chain table is empty.")
return
node = self.head
while n < self.length:
print("node %d: %s" % (n, node.data))
node = node._next
n += 1
chainTable = ChainTable()
for i in range(10):
chainTable.append(i)
chainTable.show()
print(chainTable.getIndex(5))
print(chainTable.getItem(5))
print(chainTable.update(1, 99))
print(chainTable.delete(4))
print(chainTable.insert(5, 100))
chainTable.show()
總結(jié)
以上是生活随笔為你收集整理的用python实现链表_用python实现链表结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装系统时遇到的常见问题汇总
- 下一篇: 人工智能发展之路还很长