多種單鏈表 python實現

2021-09-25 09:39:46 字數 3911 閱讀 8783

本**參照裘宗燕老師的《資料結構與演算法: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實現

首先說下線性表,線性表是一種最基本,最簡單的資料結構,通俗點講就是一維的儲存資料的結構。順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素,稱為線性表的順序儲存結構或順序映像 鏈式表示指的是用一組任意的儲存單元儲存線性表中的資料元素,稱為線性表的鏈式儲存結構。而他既可以是連續的也可以不連...