本**參照裘宗燕老師的《資料結構與演算法:python語言描述》,看了幾章感覺不錯,講解十分清晰~話不多說直接上碼
# -*- coding: utf-8 -*-
"""created on thu jul 18 10:26:53 2019
@author: 糰子
"""import random
class lnode:
def __init__(self,elem,next_=none):
self.elem=elem
self.next=next_
class linkedlistunderflow(valueerror):
pass
# 普通單鏈表
class llist:
def __init__(self):
# 此句只是起到初始化的作用
self._head=none
def is_empty(self):
return self._head is none
def prepend(self,elem):
self._head=lnode(elem,self._head)
def pop(self):
if self._head is none:
raise linkedlistunderflow("in pop")
e=self._head.elem
self._head=self._head.next
return e
if self._head is none:
self._head=lnode(elem)
return
p=self._head
while p.next is not none:
p=p.next
p.next=lnode(elem)
def pop_last(self):
if self._head is none: #空表
raise linekedlistunderflow("in pop_last")
p=self._head
if p.next is none: #表中只有乙個元素
e=p.elem
self._head=none
return e
while p.next.next is not none:
p=p.next
e=p.next.elem #迴圈結束時p為倒數第二個結點
p.next=none
return e
def find(self,pred):
p=self._head
while p is not none:
if pred(p.elem):
return p.elem
p=p.next
def printall(self):
p=self._head
while p is not none:
print(p.elem,end='')
if p.next is not none:
print(',',end='')
p=p.next
print('')
mlist1=llist()
for i in range(10):
mlist1.prepend(i)
for i in range(11,20):
mlist1.printall()
# 可追蹤尾結點的單鏈表
class llist1(llist):
# 首先初始化資料域
#或許我需要再重新看一遍繼承以加深對物件導向程式設計的理解
def __init__(self):
llist.__init__(self)
self._rear=none
def prepend1(self,elem):
self._head=lnode(elem,self._head)
if self._rear is none: #是空表
self._rear=self._head
def prepend2(self,elem):
# 不同方法處理同一 事項上應保持一致
if self._head is none:
self._head=lnode(elem,self._head)
self._rear=self._head
else:
self._head=lnode(elem,self._head)
if self._head is none:
self._head=lnode(elem,self._head)
self._rear=self._head
else:
self._rear.next=lnode(elem)
self._rear=self._rear.next
def pop_last(self):
if self._head is none:
raise linkedlistunderflow("in pop_last")
p=self._head
if p.next is none:
e=p.elem
self._head=none
return e
while p.next.next is not none:
p=p.next
e=p.next.elem
p.next=none
self._rear=p
return e
mlist1=llist1()
mlist1.prepend(99)
for i in range(11,20):
for x in mlist1.filter(lambda y:y%2==0):
print(x)
# 迴圈單鏈表,即尾結點連線首結點
class lclist:
def __init__(self):
self._rear=none
def is_empty(self):
return self._rear is none
def prepend(self,elem): #首端插入
p=lnode(elem)
if self._rear is none:
p.next=p
self._rear.next=p
else:
p.next=self._rear.next
self._rear.next=p
self.prepend(elem)
self._rear=self._rear.next
def pop(self): #前端彈出
if self._rear is none:
raise linkedlistunderflow("in pop of cllist")
p=self._rear.next
if self._rear is p:
self._rear=none
else:
self._rear.next=p.next
return p.elem
def printall(self): #輸出表元素
if self.is_empty():
return
p=self._rear.next
while true:
print(p.elem)
if p is self._rear:
break
p=p.next
此段**實現了三種單鏈表,分別是普通單鏈表,追蹤尾結點的單鏈表和迴圈單鏈表。 python實現單鏈表
code python code coding utf 8 class node def init self,value self.data value self.next none class linklist def init self,data 0 self.head none self.in...
單鏈表 Python實現
class lnode self.elem 結點資料域 方法的第二個引數名是為了與python自帶函式next 區分 def init self,elem,next none self.elem elem self.next next 鍊錶類定義如下,其中包含了很多鍊錶操作方法,如向鍊錶中插入元素 ...
單鏈表的python實現
首先說下線性表,線性表是一種最基本,最簡單的資料結構,通俗點講就是一維的儲存資料的結構。順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素,稱為線性表的順序儲存結構或順序映像 鏈式表示指的是用一組任意的儲存單元儲存線性表中的資料元素,稱為線性表的鏈式儲存結構。而他既可以是連續的也可以不連...