7天解決python資料結構 Python資料結構

2021-10-18 03:41:06 字數 3130 閱讀 8764

一.列表:在其他語言中成為陣列,是一種基本的資料結構型別

1.列表中的元素如何儲存

2.列表提供了哪些基本操作

3.這些操作的複雜度是多少

1.列表在記憶體中以一塊連續的空間存放,列表中存放的是每個元素的引用

2.刪除:remove,pop

修改:根據索引修改

遍歷,查詢

3.remove o(n),pop o(1)

修改 o(1)

遍歷 o(n)

查詢 o(n)

二.棧:棧是一種資料集合,可以理解為只在一端進行插入或刪除操作的列表

特點:後進先出

基本操作:

進棧:push

出棧:pop

取棧頂元素:gettop

在python中只需要用列表就可以實現棧,建立列表li=

出棧:pop

取棧頂元素:li[-1]

棧的應用:

括號匹配問題,給乙個字串中,其中包含(,[, √,() √,( x,[(]) x

思路:迴圈字串,建立乙個空棧,如果字串中游匹配的字元,放入棧中,如果找到相匹配的括號,將這對括號出棧

defcheck_kuohao(s):

stack=for char ins:#判斷字串中如果有括號則放入棧中

if char in :

elif char == ')':if len(stack) > 0 and stack[-1] == '(':

stack.pop()else:returnfalseelif char == ']':if len(stack) > 0 and stack[-1] == '[':

stack.pop()else:returnfalseelif char == '}':if len(stack) > 0 and stack[-1] == ',假設雜湊函式h(k)使得h(1) = 0,h(6)=2,h(7)=4,h(9)=5,那麼雜湊表被儲存為[1,none,6,none,7,9],當我們查詢元素6所在的位置

時,通過雜湊函式獲得該元素所在的下標,因此在2的位置可以找到該元素

python中的字典

例如 a=

使用雜湊表儲存字典,通過雜湊函式將字典的key對映為下標.假設h('name') = 3,h('age') = 1,h('gender')=4,則雜湊表儲存為[none,18,none,'alex','male']

在字典鍵值對數量不多的情況下,基本上不會發生雜湊衝突,此時查詢乙個元素的複雜度是o(1)

雜湊衝突:

由於雜湊表的下標範圍是有限的,而元素的關鍵字的值是無限的,可能會出現h(23)=56,h(1990)=56的情況,此時兩個元素對映到同乙個下標處,這種情況

稱為雜湊衝突

解決雜湊衝突的方法

1.拉鍊法:將所有衝突的元素用鍊錶連線

2.開發定址法:通過雜湊衝突函式得到新的位址

練習給乙個二維列表,表示迷宮,(0,通,1,阻) 給出演算法,求出走出迷宮的路徑

方法1:使用棧

方法:建立乙個棧,首先將入口的位置進棧,當棧不空時候迴圈,獲取棧頂元素,尋找下乙個可走的相鄰方塊,如果找不到可走的相鄰方塊,說明當前是死路,

進行回溯(將當前的點出棧,檢視前面的點是否還有其他出路),體現深度優先的思想

1 maze=[2 [1,1,1,1,1,1,1,1,1,1],3 [1,0,0,1,0,0,0,1,0,1],4 [1,0,0,1,0,0,0,1,0,1],5 [1,0,0,0,0,1,1,0,0,1],6 [1,0,1,1,1,0,0,0,0,1],7 [1,0,0,0,1,0,0,0,0,1],8 [1,0,1,0,0,0,1,0,0,1],9 [1,0,1,1,1,0,1,1,0,1],10 [1,1,0,0,0,0,0,0,0,1],11 [1,1,1,1,1,1,1,1,1,1],12 ]13

14 #方向 上右下左

15 dirs = [lambda x,y:(x+1,y),16 lambda x,y:(x-1,y),17 lambda x,y:(x,y-1),18 lambda x,y:(x,y+1)]19

26 if curnode[0] == x2 and curnode[1] ==y2:27 for p instack:28 print(p)29 returntrue30 for dir indirs:31 nextnode = dir(*curnode)32 #此路通的

36 maze[nextnode[0]][nextnode[1]] = -1

37 break

38 else:39 maze[nextnode[0]][nextnode[1]] = -1

40 stack.pop()41 returnfalse42

43 mpath(1,1,8,8)

view code

方法2:使用佇列

思路:從乙個節點開始尋找,尋找下面能繼續走的點,繼續尋找直到能找出出口

方法:建立乙個空佇列,將起點位置入隊,在佇列不空時迴圈,出隊一次,如果相鄰的位置為出口,則結束.否則找出4個相鄰方塊中可走的方塊,全部入隊

體現廣度優先的思想

1 from collections importdeque2

3 maze=[4 [1,1,1,1,1,1,1,1,1,1],5 [1,0,0,1,0,0,0,1,0,1],6 [1,0,0,1,0,0,0,1,0,1],7 [1,0,0,0,0,1,1,0,0,1],8 [1,0,1,1,1,0,0,0,0,1],9 [1,0,0,0,1,0,0,0,0,1],10 [1,0,1,0,0,0,1,0,0,1],11 [1,0,1,1,1,0,1,1,0,1],12 [1,1,0,0,0,0,0,0,0,1],13 [1,1,1,1,1,1,1,1,1,1],14 ]15

16 #方向 上右下左

17 dirs = [lambda x,y:(x+1,y),18 lambda x,y:(x-1,y),19 lambda x,y:(x,y-1),20 lambda x,y:(x,y+1)]21

38 returnfalse39

50 mpath(1,1,8,8)

view code

第7天 Python 資料結構 序列

by 潮汐 python 中的資料結構是通過某種方式組織在一起的資料元素的集合,這些資料元素可以是數字 字元 甚至可以是其他資料結構 在 python 中,最基本的資料結構是序列 列表和元組 序列中的每個元素都有乙個序號 元素的具體位置 這個序號叫索引,索引下標從 0 開始,以此類推.本文著重介紹 ...

python資料結構第4天

棧的python實現 class stack def init self self.items def is empty self return self.items def push self,item def pop self self.items.pop def peek self retur...

資料結構作業 7

題目 編寫遞迴演算法,計算二叉樹中葉子結點的數目。1 需求分析 使用遞迴的方法,實現二叉樹中葉子節點數量的計算。輸入 一顆樹的前序遍歷,用 代替結束符。例如,前序遍歷 ab c d 輸出 二叉樹的葉子節點個數。功能 計算輸入的二叉樹的葉子節點個數。2 概要設計 二叉樹定義 資料 左孩子 或為空,或為...