資料結構的基本概念及佇列與棧的基本實現

2021-09-25 15:15:18 字數 2608 閱讀 8346

一資料結構的基本概念

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 的原則。壓棧 棧的插入操作叫做進棧 壓棧 入棧,入資料在棧頂。出棧 棧的刪除操作叫做出棧。出...