一資料結構的基本概念
1 hash表
①dict底層結構使用的雜湊表
◆為了支援快速查詢使用了雜湊表作為底層結構,雜湊表的實現原理,底層其實就是乙個陣列
◆雜湊表平均查詢時間複雜度o(1)
◆cpython直譯器使用二次探查解決雜湊衝突問題
②list與tuple的區別
◆都是線性結構,支援下標訪問
◆list沒法作為字典的key, tuple可以(可變物件不可hash)
③python dict/set底層都是雜湊表
◆雜湊表的實現原理,底層其實就是乙個陣列
◆根據雜湊函式快速定位乙個元素,平均查詢o(1),非常快
◆不斷加入元素會引起雜湊表重新開闢空間,拷貝之前元素到新陣列
雜湊衝突如何解決:鏈結法、開放定址法(即探查法,包括線性探查、二次探查)
2.二叉樹[涉及到遞迴和指標操作,常結合遞迴考察。常考題:二叉樹的映象(對左右子樹進行遞迴);如何岑旭便利二叉樹(廣度優先)]
二叉排序樹,又稱為二叉查詢樹或者二叉搜尋樹。
性質:可以是空樹,也可以是具有下列性質的二叉樹。 1)
若左子樹不空,則左子樹上的所有節點的值均小於它的根節點的值; 2)
若右子樹不空,則右子樹上的所有節點的值均大於或等於它的根節點的值; 3)
左右子樹也分別為二叉排序樹。
一鍊錶
二 棧:後進先出
class stack(object):
def __init__(self):
self.__list=
#新增乙個新元素到棧頂
def push(self,item):
#彈出棧頂元素
def pop(self):
return self.__list.pop()
# 返回棧頂元素
def peek(self):
if self.__list:
return self.__list[-1]
else:
return none
def is_empty(self):
return self.__list==
def size(self):
return len(self.__list)
if __name__=='__main__':
s=stack()
s.push(1)
s.push(2)
s.push(3)
print(s.pop())
三 佇列:先進先出
class queue(object):
def __init__(self):
self.__list=
# 往佇列新增元素 兩者方式的時間複雜度不一,
def enqueue(self,item):
# self.__list.insert(0,item) #o(n)
# 從佇列頭部刪除元素
def dequeue(self):
return self.__list.pop(0) #先進先出 o(n)
# self.__list.pop() #o(1)
def is_empty(self):
return self.__list==
def size(self):
return len(self.__list)
if __name__=="__main__":
q=queue()
q.enqueue(1)
q.enqueue(3)
q.enqueue(5)
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
class double_queue(object):
def __init__(self):
self.__list=
# 往佇列頭部新增元素 兩者方式的時間複雜度不一,
def add_front(self,item):
self.__list.insert(0,item) #o(n)
# 往佇列尾部新增元素
def add_rear(self,item):
# 從佇列頭部刪除元素
def pop_front(self):
return self.__list.pop(0) #先進先出 o(n)
# self.__list.pop() #o(1)
# 從佇列尾部刪除元素
def pop_rear(self):
return self.__list.pop()
# self.__list.pop() #o(1)
def is_empty(self):
return self.__list==
def size(self):
return len(self.__list)
資料結構之棧與佇列(一)基本概念
線性表是 所有元素排成一行 的資料結構。線性表有順序儲存和鏈式儲存兩種實現方式。而棧與佇列是兩種特殊的常用的線性表。1 棧棧是後進後出 lilo 的線性表 只能從棧頂插入或取出。棧有6種基本操作 1 清空clear 2 判空isempty 3 求棧的長度length 4 取棧頂元素peek 5 壓棧...
資料結構之棧的基本概念
棧是允許在一端進行插入或者刪除操作的線性表。它是一種線性表,但是限定這種線性表只能在某一端進行插入和刪除操作。棧頂 top 線性表允許進行插入刪除的那一端。棧底 botton 固定的,不允許進行插入和刪除的另一端。空棧 不含任何元素的空表。假設某個棧s 如圖,a1為棧底元素,a5為棧頂元素。由於棧只...
資料結構 棧的概念及實現
棧的概念及結構 棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo last in first out 的原則。壓棧 棧的插入操作叫做進棧 壓棧 入棧,入資料在棧頂。出棧 棧的刪除操作叫做出棧。出...