線性表的鏈式存儲又稱爲單鏈表,特色指通過一組任意存儲單元來存儲線性表種的數據元素,爲數據元素之間建立起線性關係。每個元素間邏輯上相鄰,物理位置不相鄰。
鏈式存儲優點在於插入刪除,缺點查找速度慢,以下是鏈式表的python實現:
#coding:utf-8
'''
author:xzfreewind
'''
class Node(object):
def __init__(self,val,p=0):
self.value = val
self.next = p
class linlList(object):
def __init__(self):
self.head = 0
#將數組初始化成鏈表
def initlist(self,list):
self.head = Node(list[0])
p = self.head
for i in list[1:]:
node = Node(i)
p.next = node
p = p.next
#獲取鏈表長度
def getLength(self):
length = 0
p = self.head
while p != 0:
length += 1
p = p.next
return length
#鏈表是否爲空
def isEmpty(self):
if self.getLength() == 0:
return True
else:
return False
#在鏈表尾部增加元素
def push(self,value):
if self.head == 0:
self.head = Node(value)
else:
p = self.head
while p.next != 0:
p = p.next
p.next = Node(value)
#刪除鏈表尾部元素
def pop(self):
p = self.head
q = p.next
while p.next != 0:
q = p
p = p.next
q.next = 0
#指定位置插入鏈表..
def insert(self,index,value):
if self.getLength() < index: #如果index大於鏈表長度,則返回IndexError
raise IndexError
elif self.getLength() == index: #如果index等於鏈表長度,則添加至表尾
self.push(value)
else:
p = self.head
length = 0
while length < index:
length += 1
q = p
p = p.next
node = Node(value)
q.next = node
node.next = p
#刪除鏈表指定位置元素
def delete(self,index):
if self.getLength() <= index:
raise IndexError
elif self.getLength() == index-1:
self.pop()
else:
p = self.head
length = 0
if index == 0:
self.head = p.next
else:
while length < index:
length += 1
q = p
p = p.next
q.next = p.next
#獲取指定位置鏈表
def getitem(self,index):
length = 0
if self.getLength() <= index: #如果index大於鏈表長度,則返回IndexError
raise IndexError
else:
p = self.head
while length < index:
length += 1
p = p.next
return p.value
#輸出鏈表
def outLinklist(self):
p = self.head
while p != 0:
print p.value
p = p.next
#清空鏈表
def clear(self):
self.head = 0