數據結構指數據對象中數據元素之間的關系
Python 給我們提供了很多現成的數據結構類型,這些系統自己定義好的,不需要我們自己去定義的數據結構叫做 Python 的內置數據結構,比如列表、元組、字典。而有些數據組織方式,Python 系統里面沒有直接定義,需要我們自己去定義實現這些數據的組織方式,這些數據組織方式稱之為 Python 的擴展數據結構,比如棧,隊列等.
線性表:一組序列元素的組織形式,我們可以將其抽象為線性表。一個線性表是某類元素的一個集合,還記錄着元素之間的一種順序關系。線性表是最基本的數據結構之一。
根據線性表的實際存儲方式,分為兩種實現模型:順序表和鏈表。Python 中的 list 和 tuple 兩種類型采用了順序表的實現技術。
順序表的構建需要預先知道數據大小來申請連續的存儲空間,而在進行擴充時又需要進行數據的搬遷,所以使用起來並不是很靈活
鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理,常見的有單向鏈表和雙向鏈表。
在 Python 的官方實現中,list 實現采用了如下的策略:在建立空表(或者很小的表)時,系統分配一塊能容納 8 個元素的存儲區;在執行插入操作(insert 或 append)時,如果元素存儲區滿就換一塊 4 倍大的存儲區。但如果此時的表已經很大(目前的閥值為 50000),則改變策略,采用加一倍的方法。引入這種改變策略的方式,是為了避免出現過多空閑的存儲位置。
單鏈表:
class Node():
'''單鏈表節點類'''
def __init__(self,elem):
self.elem = elem
self.next = None
class SLink():
def __init__(self,node=None):
if node is None:
self.__head = node
else:
self.__head = Node(node)
def is_empty(self):
return self.__head==None
def length(self):
count = 0
curNode = self.__head
while curNode != None:
count+=1
# self.__head = curNode.next
curNode = curNode.next
return count
#遍歷
def travel(self):
curNode = self.__head
while curNode !=None:
print(curNode.elem,end='\t')
curNode= curNode.next
print()
#查找
def find(self,item):
node = Node(item)
curNode = self.__head
while curNode !=None:
if curNode.elem == node.elem:
return True
self.__head = curNode.next
curNode = curNode.next
return False
#頭部添加
def add(self,item):
node = Node(item)
if self.__head == None:
self.__head=node
else:
curNode = self.__head
self.__head = node
node.next = curNode
#尾部插入
def append(self,item):
node = Node(item)
if self.__head == None:
self.__head = node
else:
curNode = self.__head
while curNode.next is not None:
curNode = curNode.next
curNode.next = node
#指定位置插入
def insert(self,num,item):
