Python 資料結構之單鏈表的實現

2021-07-10 16:15:20 字數 3886 閱讀 1606

鍊錶的定義:

鍊錶(linked list)是由一組被稱為結點的資料元素組成的資料結構,每個結點都包含結點本身的資訊和指向下乙個結點的位址。由於每個結點都包含了可以鏈結起來的位址資訊,所以用乙個變數就能夠訪問整個結點序列。也就是說,結點包含兩部分資訊:一部分用於儲存資料元素的值,稱為資訊域;另一部分用於儲存下乙個資料元素位址的指標,稱為指標域。鍊錶中的第乙個結點的位址儲存在乙個單獨的結點中,稱為頭結點或首結點。鍊錶中的最後乙個結點沒有後繼元素,其指標域為空。

如下圖所示:

單鏈表的結構:

單鏈表的插入和刪除示意圖:

python實現**:

#

!/usr/bin/python

#-*- coding: utf-8 -*-

class

node(object):

def__init__(self,val,p=0):

self.data =val

self.next =p

class

linklist(object):

def__init__

(self):

self.head =0

def__getitem__

(self, key):

ifself.is_empty():

print

'linklist is empty.

'return

elif key <0 or key >self.getlength():

print

'the given key is error

'return

else

:

return

self.getitem(key)

def__setitem__

(self, key, value):

ifself.is_empty():

print

'linklist is empty.

'return

elif key <0 or key >self.getlength():

print

'the given key is error

'return

else

: self.delete(key)

return

self.insert(key)

definitlist(self,data):

self.head =node(data[0])

p =self.head

for i in data[1:]:

node =node(i)

p.next =node

p =p.next

defgetlength(self):

p =self.head

length =0

while p!=0:

length+=1p =p.next

return

length

defis_empty(self):

if self.getlength() ==0:

return

true

else

:

return

false

defclear(self):

self.head =0

def q =node(item)

if self.head ==0:

self.head =q

else

: p =self.head

while p.next!=0:

p =p.next

p.next =q

defgetitem(self,index):

ifself.is_empty():

print

'linklist is empty.

'return

j =0

p =self.head

while p.next!=0 and j

p =p.next

j+=1

if j ==index:

return

p.data

else

:

print

'target is not exist!

'def

insert(self,index,item):

if self.is_empty() or index<0 or index >self.getlength():

print

'linklist is empty.

'return

if index ==0:

q =node(item,self.head)

self.head =q

p =self.head

post =self.head

j =0

while p.next!=0 and j

post =p

p =p.next

j+=1

if index ==j:

q =node(item,p)

post.next =q

q.next =p

defdelete(self,index):

if self.is_empty() or index<0 or index >self.getlength():

print

'linklist is empty.

'return

if index ==0:

q =node(item,self.head)

self.head =q

p =self.head

post =self.head

j =0

while p.next!=0 and j

post =p

p =p.next

j+=1

if index ==j:

post.next =p.next

defindex(self,value):

ifself.is_empty():

print

'linklist is empty.

'return

p =self.head

i =0

while p.next!=0 and

not p.data ==value:

p =p.next

i+=1

if p.data ==value:

return

i

else

:

return -1l =linklist()

l.initlist([1,2,3,4,5])

print l.getitem(4)

print l.getitem(5)

l.insert(4,40)

print l.getitem(3)

print l.getitem(4)

print l.getitem(5)

l.delete(5)

print l.getitem(5)

l.index(5)

結果:564

4056

Python資料結構之單鏈表實現

鍊錶的定義 鍊錶 linked list 是由一組被稱為結點的資料元素組成的資料結構,每個結點都包含結點本身的資訊和指向下乙個結點的位址。由於每個結點都包含了可以鏈結起來的位址資訊,所以用乙個變數就能夠訪問整個結點序列。也就是說,結點包含兩部分資訊 一部分用於儲存資料元素的值,稱為資訊域 另一部分用...

資料結構之單鏈表

date 08 07 06 descript 單鏈表的實現與應用 public class linlist public node gethead 定位函式 public void index int i throws exception if i 1 current head.next int j...

資料結構之單鏈表

鍊錶 儲存結構的一種,包含兩個部分,資料域和指標域,相對於順序儲存結構來說,插入和刪除的演算法時間複雜度只為o 1 定義 定義 typedef struct node linklist linklist,指標指向每乙個元素 typedef struct nodenode 以下為簡單的c語言實現 in...