鍊錶的定義:
鍊錶(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():
'linklist is empty.
'return
elif key <0 or key >self.getlength():
'the given key is error
'return
else
:
return
self.getitem(key)
def__setitem__
(self, key, value):
ifself.is_empty():
'linklist is empty.
'return
elif key <0 or key >self.getlength():
'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():
'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
:
'target is not exist!
'def
insert(self,index,item):
if self.is_empty() or index<0 or index >self.getlength():
'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():
'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():
'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)
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...