演算法——資料結構(單向連結串列的實現)
阿新 • • 發佈:2018-12-13
單向連結串列也叫單鏈表,是連結串列中最簡單的一種形式,它的每個節點包含兩個域,一個資訊域(元素域)和一個連結域。這個連結指向連結串列中的下一個節點,而最後一個節點的連結域則指向一個空值。
- 表元素域elem用來存放具體的資料。
- 連結域next用來存放下一個節點的位置(python中的標識)
- 變數p指向連結串列的頭節點(首節點)的位置,從p出發能找到表中的任意節點。
節點實現
class SingleNode(object):
def __init__(self,item):
self.item = item # 存放資料元素
self.next = None
功能實現
class SingleLinkList(object):
def __init__(self):
self._head = None
def is_empty(self):
"""判斷連結串列是否為空"""
return self._head == None
def length(self):
"""連結串列長度"""
cur = self._head
count = 0
while cur != None:
count += 1
cur = cur.next
return count
def travel(self):
"""遍歷連結串列"""
cur = self._head
while cur != None:
print cur.item,
cur = cur.next
print ""
def add(self, item):
"""頭部新增元素"""
node = SingleNode(item)
if self.is_empty():
self._head = node
else:
cur = self._head
while cur.next != None:
cur = cur.next
cur.next = node
def insert(self, pos, item):
if pos <= 0:
self.add(item)
elif pos > (self.length() - 1):
self.append(item)
else:
node = SingNode(item)
count = 0
pre = self._head
while count < (pos-1):
count += 1
pre = pre.next
node.next = pre.next
def remove(self, item):
"""刪除節點"""
cur = self._head
pre = None
while cur != Node:
if cur.item == item:
if not pre:
self._head = cur.next
else:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
def search(self, item):
cur = self._head
while cur != None:
if cur.item == item:
return True
cur = cur.next
return False
操作測試
if __name__ == "__main__":
ll = SingleLinkList()
ll.add(1)
ll.add(2)
ll.append(3)
ll.insert(2, 4)
print "length:",ll.length()
ll.travel()
print ll.search(3)
print ll.search(5)
ll.remove(1)
print "length:",ll.length()
ll.travel()