日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5 栈和队列

發布時間:2024/4/17 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5 栈和队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第五章? 棧和隊列

在常用的數據結構中,有一批結構被稱為容器。一個容器結構里總包含一組其他類型的數據對象,稱為元素,容器支持對這些元素的存儲、管理和使用。一組容器具有相同性質,支持同一組操作,可以被定義為一個抽象數據類型。

線性表就是一類容器,該類數據對象除了可以保存元素,支持元素訪問和刪除外,還記錄了元素之間的一種順序關系。

另外兩類最常用的容器是棧(stack)和隊列(queue),它們都是使用最廣泛的基本數據結構。

?

5.1 概述

棧和隊列主要用于在計算過程中保存臨時數據,這些數據是計算中發現或產生的,在后續的計算中可能需要使用它們。如果可能生成的數據項數在編程時就可確定,問題比較簡單,可以設置幾個變量作為臨時存儲。但如果需要存儲的數據項數不能事先確定,就必須采用更復雜的機制存儲和管理,這種機制被稱為緩沖存儲或緩存。棧和隊列就是使用最多的緩沖存儲結構

5.1.1 棧、隊列和數據使用順序

在計算中,中間數據對象的生成有早有晚,存在時間上的先后順序。在后續使用這些元素時,也可能需要考慮它們生成的時間順序。最典型的兩種順序是:先進先出和后進先出。

從實現的角度看,應該考慮最簡單而且自然的技術。由于計算機存儲器的特點,要實現棧或隊列,最自然的技術就是用元素存儲的順序表示它們的時間順序。也就是說,應該使用線性表作為棧和隊列的實現結構。

5.1.2 應用環境

可直接使用list實現棧的功能。python標準庫提供了一種支持隊列用途的結構deque。

?

5.2 棧:概念和實現

存入棧中的元素之間沒有任何具體關系,只有到來的時間先后順序。棧的基本性質保證了,在任何時刻可以訪問、刪除的元素都是在此之前最后存入的那個元素,因此,棧確定了一種默認元素訪問順序。

5.2.1 棧抽象數據類型

棧的基本操作是一個封閉的集合(與線性表的情況不同)。下面是一個棧的抽象數據類型描述,其中定義的操作包括:棧的創建、判斷棧是否為空、入棧、出棧、訪問最后入棧元素(不刪除)。最后兩個操作都遵循LIFO原則。另外,對這兩個操作,棧為空時操作無定義。

棧的線性表實現

棧可以實現為在一端插入/刪除的線性表。在表實現中,執行插入/刪除操作的一端被稱為棧頂,另一端被稱為棧底。訪問和彈出的都是棧頂元素。

用線性表實現棧時,操作只在表的一端進行,不涉及另一端,更不涉及表的中間部分。由于這種情況,自然應該選擇實現最方便并且保證兩個主要操作效率最高的那一端作為棧頂。

  1)對于順序表,尾端插入和刪除是O(1)操作,應該用這一端作為棧頂。

  2)對于鏈接表,首端插入和刪除是O(1)操作,應該用這一端作為棧頂。

在實際中,棧都采用這兩種技術實現。

5.2.2 棧的順序表實現

實現棧之前,先考慮為操作失敗的處理定義一個異常類。由于操作時棧不滿足需要(如空棧彈出)可以看作參數值錯誤,因此自定義異常類可以繼承ValueError。

1 class StackUnderflow(ValueError): 2 pass # 不提供ValueError之外的新功能,只是與其他ValueError異常有所區分。必要時可以定義專門的異常處理操作。

采用順序表技術實現棧,首先會遇到實現順序表時提出的各類問題,如:是采用簡單順序表,還是動態順序表?如果采用簡單順序表就可能出現棧滿的情況,繼續壓入元素就會溢出,應該檢查和處理。而如果采用動態順序表,棧的存儲區滿時可以替換一個更大的存儲區,這種情況又會出現存儲區的置換策略問題,以及分期付款式的O(1)時間復雜度問題。

list及其操作實際上提供了與棧的使用方式有關的功能,可以直接作為棧來使用。

由于list類型采用的是動態順序表技術,入棧操作具有分期付款式的O(1)時間復雜度,其他操作都是O(1)時間復雜度。

把list當作棧使用,完全可以滿足應用的需要。但是,這樣建立的對象還是list,提供了list類型的所有操作,特別是提供了一大批棧結構原本不應該支持的操作,威脅到棧的使用安全性(例如棧要求未經彈出的元素應該存在,但表允許任意刪除)。另外,這樣的“棧”不是一個獨立類型,因此沒有獨立類型的所有重要性質。

可以自定義一個棧類,把list隱藏在這個類的內部,作為其實現基礎。

基于list實現的棧,(沿用list的擴容方式)

1 class SStack(): 2 def __init__(self): 3 self._elems = [] 4 5 def is_empty(self): 6 return self._elems == [] 7 8 def top(self): 9 if self.is_empty(): 10 raise StackUnderflow("in SStack.top()") 11 return self._elems[-1] 12 13 def push(self, elem): 14 self._elems.append(elem) 15 16 def pop(self): 17 # if self._elems == []: 18 if self.is_empty(): 19 raise StackUnderflow("in SStack.top()") 20 return self._elems.pop()

初始創建對象時建立一個空棧;top和pop操作都需要先檢查棧的情況,在棧空時引發異常。

屬性_elems是只在內部使用的屬性,這里采用下劃線開頭。

1 st1 = SStack() 2 st1.push(3) 3 st1.push(5) 4 while not st1.is_empty(): 5 print(st1.pop())

5.2.3 棧的鏈表實現

基于順序表實現的棧可以滿足絕大部分的實際需要。考慮基于鏈表的棧,主要是因為順序表的兩個特點所帶來的問題:擴大存儲需要做一次高代價操作(替換存儲區);順序表需要完整的大塊存儲區。采用鏈表技術,在這兩個問題上都有優勢,鏈表的缺點是更多依賴于解釋器的存儲管理,每個結點的鏈接開銷,以及鏈接結點在實際計算機內存中任意散布可能帶來的操作開銷。

由于棧操作都在線性表一端進行,采用鏈表技術,自然應該把表頭一端作為棧頂,表尾作為棧底。

1 class LStack(): 2 def __init__(self): 3 self._top = None 4 5 def is_empty(self): 6 return self._top == None 7 8 def top(self): 9 if self.is_empty(): 10 raise LinkedListUnderflow('in pop') 11 return self._top.elem 12 13 def push(self, elem): 14 # 鏈表首端添加 15 self._top = LNode(elem, self._top) 16 17 def pop(self): 18 if self.is_empty(): 19 raise LinkedListUnderflow('in pop') 20 e = self._top.elem 21 self._top = self._top.next 22 return e

?

5.3 棧的應用

基本用途基于兩個方面:

順序反轉,只需把所有元素按原來的順序全部入棧,再順序出棧,就能得到反序后的序列。整個操作需要O(n)時間。

1 l1 = [1, 3, 5, 7, 9] 2 l2 = [] 3 ls1 = LStack() 4 for i in l1: 5 ls1.push(i) 6 7 while not ls1.is_empty(): 8 l2.append(ls1.pop()) 9 print(l2) # [9, 7, 5, 3, 1]

如果入棧和出棧操作任意交錯,可以得到不同的元素序列。

5.3.1 簡單應用:括號匹配問題

括號配對原則:在掃描正文過程中,遇到的閉括號應該與此前最近遇到且尚未獲得匹配的開括號配對。如果最近的未匹配開括號與當前閉括號不配對,或者找不到這樣的開括號,就是匹配失敗,說明這段正文里的括號不配對。

由于存在多種不同的括號對,每種括號都可能出現任意多次,而且還可能嵌套。為了檢查是否匹配,掃描中必須保存遇到的開括號。由于編程時無法預知要處理的正文里會有多少括號需要保存,因此不能用固定數目的變量保存,必須使用緩存結構

由于括號的出現可能嵌套,需要逐對匹配:當前閉括號應該與前面最近的尚未配對的開括號匹配,下一個閉括號應該與前面次近的開括號匹配。這說明,需要存儲的開括號的使用原則是后進先出的。

進而,如果一個開括號已配對,就應該刪除這個括號,為隨后的匹配做好準備。

上面這些情況說明,用保存遇到的開括號可以正確支持匹配工作。

思路:

  1)順序掃描被檢查正文(一個字符串)里的一個個字符。

  2)檢查中跳過無關字符(非括號字符都是無關字符)。

  3)遇到開括號將其入棧。

  4)遇到閉括號時彈出棧頂元素與之匹配,如果匹配成功則繼續,否則以失敗結束。

書中的示例是錯的:

1 def check_parens(text): 2 parens = '()[]{}' 3 open_parens = '([{' 4 opposite = {')': '(', ']': '[', '}': '{'} 5 6 ls = LStack() 7 for i in text: 8 if i not in parens: 9 continue 10 if i in open_parens: 11 ls.push(i) 12 continue 13 14 try: 15 s = ls.pop() 16 except: # 當出現一個閉括號,但是沒有與之相對的開括號時 17 print('匹配失敗') 18 return False 19 if opposite[i] != s: 20 print('匹配失敗') 21 return False 22 23 if ls.is_empty(): 24 print('匹配成功') 25 return True 26 else: 27 print('匹配失敗') 28 return False 29 30 31 def check_parens2(text): 32 parens = '()[]{}' 33 open_parens = '([{' 34 opposite = {')': '(', ']': '[', '}': '{'} 35 36 def parentheses(text): 37 i, text_len = 0, len(text) 38 while True: 39 while i < text_len and text[i] not in parens: 40 i += 1 41 if i >= text_len: 42 return 43 yield text[i], i 44 i += 1 45 46 ls = LStack() 47 for pr, i in parentheses(text): 48 if pr in open_parens: 49 ls.push(pr) 50 elif ls.pop() != opposite[pr]: 51 print('匹配失敗') 52 return False 53 print('匹配成功') 54 return True 55 56 57 text = '((((' 58 check_parens(text) 59 check_parens2(text)

5.3.2 表達式的表示、計算和交換

中綴表示很難統一地貫徹。首先是一元和多元運算符都難以中綴形式表示。其次是不足以表示所有可能的運算順序,需要通過輔助符號、約定和 /或輔助描述機制。

后綴表達式特別適合計算機處理。

前綴表達式和后綴表達式都不需要引進括號,也不需要任何有關優先級或結合性的規定。對于前綴表示,每個運算符的運算對象,就是它后面出現的幾個完整表達式,表達式個數由運算符元數確定。對于后綴表示,情況類似但位置相反。

中綴表達式的表達能力最弱,而給中綴表達式增加了括號后,幾種表達式具有同等表達能力。

。。。

?

5.3.3 棧與遞歸

如果在一個定義中引用了被定義的對象本身,這種定義被稱為遞歸定義。類似地,如果在一種數據結構中的某個或某幾個部分具有與整體同樣的結構,這也是一種遞歸結構。

在遞歸定義或結構中,遞歸部分必須比原來的整體簡單,這樣才有可能達到某種終結點(即遞歸定義的出口),這種終結點必須是非遞歸的。例如,單鏈表中,結點鏈的空鏈接就是遞歸的終點。

階乘函數的遞歸運算

以fact(6)為例,

這種后進先出的使用方式和數據項數的無明確限制,就說明需要用一個來支持遞歸函數的實際運行,這個棧被稱為程序運行棧(算法圖解上叫調用棧)。

棧與遞歸/函數調用

對遞歸定義的函數,實現方式就是用一個運行棧,對函數的每個調用都在這個棧上為之開辟一塊區域,其中保存這個調用的相關信息,這個區域稱為一個函數幀

一般的函數調用和退出的方式也與此類似。例如函數f里調用函數g,函數g里調用函數h,函數h里調用函數r,其執行流程與遞歸完全一樣。

遞歸和非遞歸

對遞歸定義的函數,每個實際調用時執行的都是該函數體的那段代碼,只是需要在一個內部運行棧里保存各次調用的局部信息。這種情況說明,完全有可能修改函數定義,把一個遞歸定義的函數改造為一個非遞歸的函數。在函數里自己完成上面這些工作,用一個棧保存計算中的臨時信息,完成同樣的計算工作。

1 def norec_fact(n): 2 res = 1 3 ls = LStack() 4 while n > 0: 5 ls.push(n) 6 n -= 1 7 while not ls.is_empty(): 8 res *= ls.pop() 9 return res

實際上,任何一個遞歸定義的函數,都可以通過引入一個棧保存中間結果的方式,翻譯為一個非遞歸的過程。

棧的應用:簡單背包問題

。。。

?

5.4 隊列

5.4.1 隊列抽象數據類型

隊列的基本操作也是一個封閉集合,通常包括創建新隊列對象、判斷隊列是否為空、入隊、出隊、檢查隊列當前元素。

隊列操作與棧操作一一對應,但通常采用另一套習慣的操作名:

5.4.2 隊列的鏈接表實現

采用線性表技術實現隊列,就是利用元素位置的順序表示入隊時間的先后關系。隊列操作要求先進先出,這就要求在表的兩端進行操作,所以實現起來也稍微麻煩一些。

由于需要在鏈接表的兩端操作,在一端插入元素,在另一端刪除。最簡單的單鏈表只支持首端高效操作,在另一端操作需要O(n)時間,不適合作為隊列的實現基礎。

帶表尾指針的單鏈表,支持O(1)時間的尾端插入操作,再加上表首端的高效訪問和刪除,可作為隊列的實現基礎。

5.4.3 隊列的順序表實現

基于順序表實現隊列的困難

另一種可能是隊首元素出隊后表中元素不前移,但記住新隊首位置。從操作效率上看,每個操作都是O(1)時間,但表中隊列卻好像隨著操作向表尾方向”移動“,表前端留下越來越多的空位。

這樣經過反復的入隊和出隊操作,一定會在某次入隊時出現隊尾溢出的情況,而此時隊首卻有大量空位,所以這是一種假性溢出,并不是真的用完了整個元素區。假如元素存儲區能自動增長,隨著操作進行,表首端就會留下越來越大的空區,而且這片空區永遠也不會用到。顯然不應該允許程序中出現這種情況。

從圖5.7可以看到:在反復入隊和出隊操作中,隊尾最終會到達存儲區末端。但與此同時,存儲區首端可能有些空位可以利用。這樣就得到了一種順理成章的設計:如果入隊時隊尾已滿,應該考慮轉到存儲區開始的位置去入隊新元素。

循環順序表

  1)在隊列使用中,順序表的開始位置并未改變。變量q.elems始終指向表元素區開始。

  2)隊頭變量q.head記錄當前隊列里第一個元素的位置;隊尾變量q.rear記錄當前隊列里最后元素之后的第一個空位

  3)隊列元素保存在順序表的一段連續單元里,python的寫法是[q.head, q.rear],左閉右開區間。

上面這幾條也是這種隊列的操作必須維護的性質。初始時隊列為空,應該讓q.hear和q.rear取相同的值,表示順序表里一個空段。具體取值無關緊要。不變操作都不改變有關變量的值,不會破壞上述性質;變動操作可能修改有關變量的值,因此要特別注意維護上面的性質。

出隊和入隊操作分別需要更新變量q.head和q.rear。

1 q.head = (q.head+1) % q.len # 出隊 # 通過求余控制循環 2 q.rear = (q.rear+1) % q.len # 入隊

判斷隊列狀態。q.head == q.rear表示隊空。

從圖5.8的隊列狀態出發做幾次入隊操作,可以到達圖5.9所示的狀態,這時隊列里已有7個元素。如果再加入一個元素順序表就滿了,但又會出現q.head == q.rear的情況,這個狀態與隊列空的判斷無法區分。

一種解決辦法是直接把圖5.9“看作”隊列已滿,即把隊滿條件定義為

1 (q.rear+1) % q.len == q.head # 隊尾攆上隊首了

采用這種方法,將在表里留下一個不用的空位。基于循環順序表,存在多種隊列實現方式。

5.4.4 隊列的 list 實現

最直截了當的實現方法將得到一個O(1)時間的enqueue操作和O(n)時間的dequeue操作。

現在考慮定義一個可以自動擴充存儲的隊列類。這里很難直接利用list的自動存儲擴充機制,兩個原因:首先是隊列元素的存儲方式與list元素的默認存儲方式不一致。list元素總在其存儲區的最前面一段,而隊列元素可能是其中的任意一段,有時還分為頭尾兩端(圖5.9就是這樣,但隊列本身仍然是連續的)。如果list自動擴充,其中的隊列元素就有可能失控。另一方面,list沒提供檢查元素存儲區容量的機制,隊列操作中無法判斷系統何時擴容。由于沒有很好的辦法處理這些困難,下面考慮自己管理存儲。

基本設計

首先,隊列可能為空而無法dequeue,為此自定義一個異常:

1 class QueueUnderflow(ValueError): 2 pass

基本設計:

  1)在SQueue對象里用一個list類型的成分_elems存放隊列元素。

  2)_head記錄隊列首元素所在位置的下標。

  3)_num記錄表中元素個數。

  4)_len記錄當前表的長度,必要時替換存儲區。

數據不變式

變動操作可能會改變一些對象屬性的取值,如果操作的實現有錯誤,可能會破壞對象的狀態。實現一種數據結構里的操作時,最基本的問題就是這些操作需要維護對象屬性之間的正確關系,這樣一套關系被稱為這種數據結構的數據不變式。(1)對象的初始狀態應該滿足數據不變式。(2)每個對象操作都應該保證不破壞數據不變式。有了這兩條,這類對象在使用中就能始終處于良好狀態。

下面是隊列實現中考慮的數據不變式:

  1)_elems屬性引用著隊列的元素存儲區,它是一個list對象,_len屬性記錄存儲區的有效容量(python無法獲知list對象的實際大小)。

  2)_head是隊首元素的下標,_num始終記錄著隊列中元素的個數。

  3)隊列里的元素總保存在_elems里從_head開始的連續位置中,新入隊元素存入_head+_num算出的位置,但如果需要把元素存入下標_len的位置時,改為在下標0位置存入該元素(前提是隊列未滿,0位置處有空位,否則擴容)。

  4)在_num == _len時(隊滿時)出現入隊操作,就擴大存儲區。

  總之,需要時刻注意_elems、_len、_head、_num四個變量的狀態

隊列類的實現

根據前面的設計,隊列的首元素在self._elems[self._head],peek和dequeue操作應該取這里的元素;下一個空位在self._elems[(self._head+self._num) % self._len],入隊的新元素應該存入這里。

另外,隊列空就是self._num == 0,當前隊列滿就是self._num = self._len,這時應該替換存儲區。

完整實例:

1 #!coding:utf8 2 3 class QueueUnderflow(ValueError): 4 pass 5 6 class SQueue(): 7 def __init__(self, init_len=8): 8 self._len = init_len 9 self._elems = [0]*init_len # 感覺用None比較好 10 self._head = 0 11 self._num = 0 12 13 def is_empty(self): 14 return self._num == 0 15 16 def peek(self): 17 if self.is_empty(): 18 raise QueueUnderflow('none') 19 return self._elems[self._head] 20 21 # 時刻注意四個變量的狀態 22 # 不能直接使用pop,pop隊首的時間為O(n) 23 def dequeue(self): 24 if self.is_empty(): 25 raise QueueUnderflow('none') 26 e = self._elems[self._head] 27 self._head = (self._head + 1) % self._len 28 self._num -= 1 29 return e 30 31 # 不能直接使用append 32     # 可能出現擴容操作 33 def enqueue(self, e): 34 if self._num == self._len: 35 self.__extend() # 擴容 36 37 self._elems[(self._head + self._num) % self._len] = e 38 self._num += 1 39 40 # 擴容(2倍) 41 def __extend(self): 42 old_len = self._len 43 self._len *= 2 44 new_elems = [0]*self._len # 這個一直沒有理解?? 45 for i in range(old_len): 46 new_elems[i] = self._elems[(self._head + i) % self._len] 47 self._elems, self._head = new_elems, 0

特別提醒:peek和dequeue操作都需要事先判斷隊列是否為空。

基于循環順序表實現的隊列,加入和取出操作都是O(1)操作。循環順序表實際上是為了解決假性溢出問題。

小結:基于鏈表的隊列,鏈表是指帶尾端指針的鏈表;基于順序表的隊列,順序表是指循環順序表

?

5.5 迷宮求解和狀態空間搜索

5.5.1 迷宮求解:分析和設計

迷宮問題

搜索從入口到出口的路徑,具有遞歸性質:

  1)從迷宮的入口開始檢查,這是初始的當前位置。

  2)如果當前位置就是出口,已經找到出口,問題解決。

  3)如果從當前位置已無路可走,當前正在進行的探查失敗,需要按一定方式另行繼續搜索。

  4)從可行方向中取一個,向前進一步,從那里繼續探索通往出口的路徑。

先考慮一種簡單形式的迷宮。如圖5.10左圖,

其形式是一組位置構成的矩形陣列,空白格子表示可通行,陰影格子表示不可通行。這種迷宮是平面的,形式比較規范,每個空白位置的上/下/左/右四個方向有可能也是空白位置,每次允許在某個方向上移動一步。這種迷宮可以直接映射到二維的0/1矩陣,因此很容易在計算機里表示。

迷宮問題分析

問題的目標是找到從入口到出口的一條路徑,而不是所有的可行路徑。

由于不存在其他指導信息,這里的工作方式只能是試探并設法排除無效的探索方向。這顯然需要緩存一些信息:如果當前位置有多個可能的繼續探查方向,由于下一步只能探查一種可能,因此必須記錄不能立即考慮的其他可能方向。不記錄而丟掉了重要信息,就可能出現實際有解但不能找到的情況。

存在不同的搜索方式,可以比較冒進,也可以穩扎穩打。如果搜索到當前位置還沒找到出口,可以繼續向前走,直到無路可走才考慮后退,換一條沒走過的路繼續。也可以在每一步都從最早記錄的有選擇位置向前進,找到下一個可達位置并記錄它。

顯然這里需要保存已經發現但尚未探索的分支方向信息。由于無法確定需要保存的數據項數,只能用某種緩存結構,首先應該考慮使用棧或隊列。搜索過程只要求找到目標,對如何找到沒有任何約束,因此這兩種結構都有可能使用。采用不同的緩存結構,會對所實現的搜索過程有重要影響:

  1)按棧的方式保存和使用信息,實現的探索過程是每步選擇一種可能方向一直向前,直到無法前進才退回到此前最后選擇點,換路徑繼續該過程。

  2)按隊列方式保存和使用信息,就是總從最早遇到的搜索點不斷拓展。這種方式倒不好理解。。。

問題表示和輔助結構

要解決上述迷宮問題,首先要設計一種問題表示形式。用計算機解決問題,第一步就是選擇合適的數據表示。python里可以用二維數組表示。迷宮入口和出口可以各用一對下標表示。

有一個情況需要注意:搜索過程有可能在某些局部路徑中兜圈子,這樣即使存在到出口的路徑,程序也可能無休止地運行卻永遠也找不到解。為防止出現這種情況,程序運行中必須采用某種方法記錄已經探查過的位置,方法是把對應矩陣元素標記為2。計算中發現元素值為2就不再去探索。(0表示可通行,1表示不可通行,2表示已探查)

還需要找到一種確定當前位置可行方向的技術。在到達某個位置后,搜索過程需要選一個方向前進。如果再次退回到這里就需要改走另一方向,直到所有方向都已探查為止,如果還沒找到出口就應該退一步。

這里需要記錄方向信息。顯然,每個格子有四個相鄰位置,為正確方便地處理這幾個可能方向,需要確定一種系統檢查方法。對于單元(i, j),其四個相鄰位置的數組元素下標如圖所示:(i 表示上下,j 表示左右)

為了方便地計算相鄰位置,需要定義一個二元組列表,其元素是從位置(i, j)得到其四鄰位置應該加的數對:dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)]

為了使算法的描述更加方便,先定義兩個簡單的輔助函數。其中參數pos都是形式為(i, j)的二元序對。

1 def mark(maze, pos): # 給迷宮maze的pos位置標2,表示“到過了” 2 maze[pos[0]][pos[1]] = 2 3 4 def passable(maze, pos): # 檢查迷宮maze的位置pos是否可行 5 return maze[pos[0]][pos[1]] == 0

5.5.2 求解迷宮的算法

迷宮的遞歸求解

示例,

1 def mark(maze, pos): # 給迷宮maze的pos位置標2,表示“到過了” 2 maze[pos[0]][pos[1]] = 2 3 4 def passable(maze, pos): # 檢查迷宮maze的位置pos是否可行 5 return maze[pos[0]][pos[1]] == 0 6 7 def find_path(maze, pos, end): 8 mark(maze, pos) 9 if pos == end: 10 print(pos, end=' ') 11 return True 12 13 for i in range(4): 14 nextP = (pos[0]+dirs[i][0], pos[1]+dirs[i][1]) 15 if passable(maze, nextP): 16 if find_path(maze, nextP, end): 17 print(pos, end=' ') 18 return True 19 return False 20 21 maze = [ 22 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 23 [1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1], 24 [1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], 25 [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1], 26 [1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1], 27 [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], 28 [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1], 29 [1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1], 30 [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1], 31 [1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1], 32 [1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1], 33 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 34 ] 35 pos = (1, 1) 36 end = (10, 12) 37 dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] 38 print(find_path(maze, pos, end))

棧和回溯法

迷宮的回溯法求解

1 def mark(maze, pos): # 給迷宮maze的pos位置標2,表示“到過了” 2 maze[pos[0]][pos[1]] = 2 3 4 def passable(maze, pos): # 檢查迷宮maze的位置pos是否可行 5 return maze[pos[0]][pos[1]] == 0 6
# 自己翻譯的, 7 def find_path(maze, start, end): 8 if start == end: 9 print(start) 10 return 11 ls = LStack() 12 ls.push(start) 13 while not ls.is_empty(): 14 pos = ls.pop() 15 for dir in dirs: 16 nextp = pos[0]+dir[0], pos[1]+dir[1] 17 if nextp == end: 18 print(nextp) 19 while not ls.is_empty(): 20 print(ls.pop()) 21 return 22 if passable(maze, nextp): 23 ls.push(pos) 24 ls.push(nextp) 25 break 26 mark(maze, pos) 27
# 書上的,在棧中保存的是(位置序對, 探索方向)序對。 28 def find_path2(maze, start, end): 29 if start == end: 30 print(start) 31 return 32 ls = LStack() 33 mark(maze, start) 34 ls.push((start, 0)) 35 while not ls.is_empty(): 36 pos, nxt = ls.pop() 37 for i in range(nxt, 4): 38 nextp = pos[0]+dirs[i][0], pos[1]+dirs[i][1] 39 if nextp == end: 40 print(nextp) 41 while not ls.is_empty(): 42 print(ls.pop()) 43 return 44 if passable(maze, nextp): 45 ls.push((pos, i+1)) 46 mark(maze, nextp) 47 ls.push((nextp, 0)) 48 break 49 print('not found') 50 51 maze = [ 52 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 53 [1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1], 54 [1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], 55 [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1], 56 [1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1], 57 [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], 58 [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1], 59 [1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1], 60 [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1], 61 [1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1], 62 [1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1], 63 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 64 ] 65 pos = (1, 1) 66 end = (10, 12) 67 dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] 68 find_path(maze, pos, end)

兩種方法的區別在于標記的時機不同:方法1是標記當前位置,方法2是標記可達位置。兩種方法的關鍵點相同:一是棧中所存元素相同,一次操作入棧的都是當前位置和可達位置。二是到達出口后打印路徑的方式相同(書中沒給)。

5.5.3 迷宮問題和搜索

狀態空間搜索:棧和隊列

基于棧和隊列的搜索過程

?*深度和寬度優先搜索的性質

5.6.1 幾種與棧或隊列相關的結構

雙端隊列

python的deque類

5.6.2 幾個問題的討論

?

轉載于:https://www.cnblogs.com/yangxiaoling/p/9924474.html

總結

以上是生活随笔為你收集整理的5 栈和队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

福利视频一二区 | 久久久久一区 | 99久久久久国产精品免费 | 欧亚日韩精品一区二区在线 | 国产免费影院 | 97在线精品 | 国产成人一区二区三区久久精品 | 国产精品一区二区av日韩在线 | 亚洲欧美视频一区二区三区 | 国产精品久久久久久久午夜 | 精品美女国产在线 | 狠狠的操狠狠的干 | 久久免费看片 | 国产精品初高中精品久久 | 免费a级黄色毛片 | 国产免费三级在线观看 | 国产成人精品一区二区三区福利 | 2018精品视频 | 免费人成在线观看网站 | 91大片网站 | 夜色资源站国产www在线视频 | 99在线观看免费视频精品观看 | 九九激情视频 | 免费色网站 | 久久精品专区 | 狠狠的日日 | 日韩亚洲国产中文字幕 | 久久久综合香蕉尹人综合网 | 国产视频在线免费观看 | 91久久精品一区 | 中文字幕免费在线看 | av福利在线 | 2019av在线视频 | 91视频在线国产 | 成人香蕉视频 | 成人毛片网 | 久久久99国产精品免费 | 婷婷综合亚洲 | 国产免费中文字幕 | www国产在线| 色午夜影院 | 天天插日日插 | 国产69久久精品成人看 | 久久久人人爽 | 一区二区三区在线免费播放 | 五月婷久 | 亚洲精品视频在线观看视频 | 欧美精品久久久久久久久久久 | 国产精品久久嫩一区二区免费 | 天天天色综合a | 国产午夜影院 | 亚洲乱码在线 | 色香蕉在线 | 中文资源在线观看 | 免费观看91| 91精品久久久久久 | 香蕉视频在线视频 | 中文国产字幕 | 欧美一区二区三区在线看 | 日韩精品中文字幕在线播放 | 亚洲精品天天 | 99久久久成人国产精品 | 国产精品美女久久久久久 | 麻豆视频在线免费看 | 国产免费嫩草影院 | 人人讲 | 中文字幕视频网站 | 欧洲一区二区三区精品 | 亚洲精品久久久蜜臀下载官网 | 久久99这里只有精品 | 中文字幕乱偷在线 | 麻豆观看| 激情六月婷婷久久 | 色天天中文 | 中文字幕 国产视频 | 精精国产xxxx视频在线播放 | 国产手机在线观看 | 国产伦理久久精品久久久久_ | 91大神免费视频 | 久久中国精品 | 蜜臀av性久久久久av蜜臀妖精 | 91在线网址 | 日韩videos高潮hd | 久久高清免费视频 | 久精品在线观看 | 99在线精品视频在线观看 | 激情 婷婷 | 国产亚洲精品久久久久动 | 亚洲日本韩国一区二区 | 亚洲精品久久久久中文字幕二区 | 久久久久成人免费 | 日韩av在线小说 | 国产精品视频永久免费播放 | 在线视频在线观看 | 亚洲激情网站免费观看 | 天天爱天天操天天爽 | 亚洲欧洲精品视频 | 手机成人av在线 | ww亚洲ww亚在线观看 | 亚洲午夜大片 | 亚洲精品午夜久久久 | av丝袜在线| 欧美91精品| 中文字幕一区二区在线观看 | 久青草视频 | 蜜桃视频日本 | 在线视频第一页 | 色爱成人网 | 久久久精品欧美一区二区免费 | 美腿丝袜av| 日韩理论片中文字幕 | 亚洲国产日本 | 国产精品一区二区三区久久久 | 婷婷激情久久 | 91九色老| 日韩毛片在线一区二区毛片 | 蜜桃av久久久亚洲精品 | 992tv在线 | 国产在线视频在线观看 | 在线探花| 国产精品一区免费在线观看 | 4438全国亚洲精品在线观看视频 | 日韩高清二区 | 综合五月婷婷 | 国产97视频在线 | 久久精品综合视频 | 成人影视免费看 | 91精品秘密在线观看 | 日韩精品高清视频 | 久久久www成人免费毛片 | 激情五月婷婷综合 | 麻花豆传媒mv在线观看网站 | 亚洲国产精品一区二区尤物区 | 国产精品激情在线观看 | 欧美一级视频免费看 | av中文在线播放 | 99精品热视频 | 黄色av在 | 最新中文字幕在线观看视频 | 久久99久久精品国产 | 综合天堂av久久久久久久 | 午夜丁香网 | 国内丰满少妇猛烈精品播 | 精品美女在线视频 | 亚洲乱码精品久久久 | av丝袜在线 | 亚洲精品国久久99热 | 日b视频国产 | 91在线视频免费观看 | 69久久久 | 亚洲美女在线国产 | av一级片| 久久99久久精品 | 成年人在线免费视频观看 | 日韩一级电影在线观看 | 免费在线黄网 | 国产黄色一级片在线 | 黄色av成人在线观看 | 久久久网页 | 国产美女被啪进深处喷白浆视频 | avv天堂| 在线综合 亚洲 欧美在线视频 | 1024手机看片国产 | 欧美一级在线观看视频 | 成人免费观看电影 | 久久99久久99| 天天做天天射 | 黄色国产高清 | 91日韩在线 | 精品一区精品二区高清 | 久久久午夜电影 | 国产精品黄色 | 国产视频 亚洲视频 | 日韩乱码中文字幕 | 久久综合九色欧美综合狠狠 | 四虎影视成人精品国库在线观看 | 波多野结衣综合网 | 国产精品一区二区久久 | 91国内在线视频 | 成人a级黄色片 | av在线超碰 | 午夜精品视频一区二区三区在线看 | 免费亚洲精品 | 国产在线视频在线观看 | 一区二区三区四区免费视频 | 国产免费观看av | 综合色婷婷 | 亚洲国产精品一区二区久久,亚洲午夜 | 97视频免费看 | 亚洲少妇天堂 | 日韩三级精品 | 在线观看av片 | 久久桃花网 | 国产这里只有精品 | 欧洲精品亚洲精品 | 麻豆久久一区二区 | 在线观看一区二区精品 | 视频在线99re| 91色偷偷 | 久久99久国产精品黄毛片入口 | 亚洲黄色小说网址 | 婷婷六月天丁香 | 欧美日本一二三 | 日韩精品久久久久 | 国产高清在线永久 | 久久影视一区二区 | 亚洲激精日韩激精欧美精品 | 欧美久久久久久久久中文字幕 | 日本黄色a级大片 | 中文在线免费一区三区 | 日日射av| 五月婷婷深开心 | 超碰免费观看 | av成人免费在线看 | 91探花在线| 国产资源免费在线观看 | 激情综合五月天 | 曰本免费av | 亚洲 欧洲av | 成 人 黄 色 视频 免费观看 | 玖玖色在线观看 | 国产精品99精品久久免费 | 丁香av在线 | 日本三级吹潮在线 | 色偷偷av男人天堂 | 成年人在线观看免费视频 | 国产一级一片免费播放放 | 久久国语露脸国产精品电影 | www.天天射| 99久久99久久精品免费 | 99人成在线观看视频 | 日本久久免费电影 | 久久成年人 | 亚洲人成在线电影 | 777视频在线观看 | 伊人午夜视频 | 亚洲欧洲精品在线 | 久久99精品波多结衣一区 | 国产永久免费 | 国产亲近乱来精品 | 亚洲精品成人免费 | 久草手机视频 | 成人国产一区二区 | 色七七亚洲影院 | 精品亚洲成a人在线观看 | 在线免费黄 | 五月天亚洲精品 | 91在线影院 | 香蕉视频在线视频 | 午夜美女视频 | 国产男女爽爽爽免费视频 | 美女网站视频免费都是黄 | 91九色视频在线 | 午夜在线免费观看视频 | 五月天视频网站 | 五月开心网 | 黄色大片网 | 国产亚洲精品久久网站 | 国产成人精品一区二区在线观看 | 91精品在线麻豆 | 久草视频手机在线 | 亚洲国产操| 福利网址在线观看 | 亚洲日韩精品欧美一区二区 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 精品亚洲成a人在线观看 | 日日夜夜婷婷 | 丁香在线视频 | 日韩极品视频在线观看 | 久久久午夜剧场 | 婷婷中文字幕 | 国产高清不卡 | 五月天久久精品 | 99超碰在线播放 | 欧洲精品码一区二区三区免费看 | 国产视频在线免费 | 麻豆免费视频观看 | 久久综合免费 | 国产在线视频一区 | 久久成人一区二区 | 欧美不卡视频在线 | 91亚洲精品久久久 | 一区二区三区免费在线观看视频 | 999日韩 | 国产精品久久久久永久免费 | 日本久久中文字幕 | 亚洲午夜精品在线观看 | av在线观| 中文字幕国产一区 | 96av视频 | 蜜桃传媒一区二区 | 欧洲精品在线视频 | 国产精品久久久久高潮 | 国产美女永久免费 | 国产一区二区精 | 天天色天天色天天色 | 在线观看国产日韩欧美 | 欧美高清成人 | 久久久久久蜜桃一区二区 | 国产一区视频导航 | 精品国产乱码一区二区三区在线 | 成 人 黄 色 视频 免费观看 | 黄色网在线免费观看 | 亚洲另类在线视频 | 久久免费看视频 | 97超在线视频 | 日本黄色免费网站 | 日韩专区一区二区 | 国内精品久久久精品电影院 | 最新色视频 | 久久国产电影 | 日韩专区av | 免费看毛片在线 | 国产在线91在线电影 | 久久久久久久综合色一本 | 色欲综合视频天天天 | 国产精品不卡在线 | 国产日本亚洲 | 婷婷色网址 | 免费在线成人av电影 | 久久久久电影网站 | 久久久久久久久久久久久久av | 97视频在线观看免费 | 在线观看国产v片 | 成人三级网站在线观看 | 国产精品永久久久久久久www | 天天射天天操天天色 | 欧美激情精品久久久久 | 亚洲精品影视 | 欧美日韩综合在线观看 | 国内精品久久影院 | 日韩性片 | 黄色av免费看 | 日韩欧美综合在线视频 | 麻豆视频国产精品 | 久久国产精品99久久人人澡 | 色网影音先锋 | 91福利区一区二区三区 | 久久久久免费精品国产 | 天天射天| 久久超级碰 | 在线免费色视频 | 免费看国产曰批40分钟 | 天天操夜夜干 | 亚洲高清av在线 | 天天操操操操操操 | 国产精品久久久久久五月尺 | 在线看片一区 | 国产亚洲精品久久19p | 国内精品在线一区 | www一起操| 中文字幕乱偷在线 | 91高清视频在线 | 探花视频在线观看+在线播放 | 国内精品久久久久久久久久清纯 | 欧美在线久久 | 久久www免费视频 | av成人在线观看 | 精品免费在线视频 | 日韩一二三区不卡 | 国产五月 | 久久99免费观看 | 日韩在线免费不卡 | 日本特黄特色aaa大片免费 | 在线观看www. | 黄色最新网址 | 成人性生交大片免费观看网站 | 国产高清视频在线免费观看 | 天天天综合网 | 亚洲精品美女视频 | 日韩动态视频 | 成人在线播放免费观看 | 中文字幕在线观看你懂的 | 黄色精品视频 | 黄色亚洲| 又紧又大又爽精品一区二区 | 成人国产在线 | 欧美激精品 | 国产精品18久久久久久久久久久久 | 91麻豆精品国产91久久久无限制版 | 国产日韩欧美在线播放 | 久久综合九色综合久久久精品综合 | 国产精品18久久久 | 成年人免费在线观看网站 | 日韩av片无码一区二区不卡电影 | 日韩久久精品一区二区 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 视频在线观看一区 | 青青草视频精品 | 国产精品 日韩 欧美 | 亚洲干视频在线观看 | 最近中文字幕完整高清 | 欧美性生交大片免网 | 91久久偷偷做嫩草影院 | 99 视频 高清 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品国产三级国产专区53 | 狠狠干 狠狠操 | 91免费网 | 国产99久久久精品视频 | 深爱婷婷激情 | 日韩丝袜 | 精品久久久久久久久久久久久久久久 | 亚洲成人av片 | 久久五月情影视 | 国产精品久久久久久久久久ktv | 国产精品一区二区美女视频免费看 | av黄色影院 | 亚洲视频久久久久 | 99视频精品免费观看, | 久久少妇 | 亚洲专区在线视频 | 中文字幕丝袜美腿 | 天天草网站 | 亚洲国产成人精品久久 | 婷婷中文字幕在线观看 | 亚洲va欧美| 99re6热在线精品视频 | 五月天激情综合 | 在线免费黄色av | 国产人成在线视频 | 国产精品婷婷午夜在线观看 | 人人超碰人人 | 黄av在线| 中文字幕在线影院 | 中文字幕在线精品 | 婷婷激情5月天 | 日韩激情免费视频 | 久久精品美女视频网站 | 久久久国产一区二区三区 | 日韩av在线影视 | 久久婷婷色 | 一级免费黄视频 | 狠狠操狠狠干天天操 | 精品综合久久久 | 国产精品久久久久久久久久白浆 | 亚洲成免费 | 国产a视频免费观看 | 日韩在线三区 | 国产精品视频观看 | 日韩中文字幕在线不卡 | 在线视频免费观看 | 91精品视频播放 | 成人免费在线观看入口 | 中文字幕在线免费观看 | 精品国产欧美一区二区三区不卡 | 国产午夜麻豆影院在线观看 | 国产精品一区二区精品视频免费看 | 国产免费观看高清完整版 | 国产专区在线 | 五月婷婷一级片 | 久久久久成人精品免费播放动漫 | 亚洲精品黄色片 | 九九九九色 | 成人蜜桃 | 国产精品久久久777 成人手机在线视频 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 亚洲在线激情 | 91在线视频一区 | 色五月色开心色婷婷色丁香 | 国产超碰在线 | 天天摸天天舔 | 国产性天天综合网 | 99精品国产免费久久 | av在线播放免费 | 亚洲精品videossex少妇 | 日韩欧美综合 | 精品视频久久久久久 | 91最新在线 | 国产美女精品 | www国产一区 | 欧美午夜精品久久久久久浪潮 | 久久久久久久久久久久久久免费看 | 久久www免费人成看片高清 | 在线免费观看国产视频 | 亚洲高清视频在线播放 | 美女福利视频 | 国产成人三级一区二区在线观看一 | 久久99精品久久久久久 | 午夜久久久久久久 | 日批视频在线 | 中文字幕亚洲欧美日韩2019 | 久久午夜精品视频 | 激情网站| 丁香六月天婷婷 | 亚洲一二三久久 | 中文久草| 四虎影视精品成人 | 在线观看理论 | 国产在线观看你懂得 | 欧美乱码精品一区 | 国产小视频免费在线网址 | 国产成人精品久久久久蜜臀 | 免费观看一区二区 | 日韩欧美一区二区三区在线 | 免费看黄的视频 | 黄色毛片网站在线观看 | 久久久久久久久久久久久久免费看 | 免费人做人爱www的视 | 91影视成人 | 激情六月婷婷久久 | 国产男男gay做爰 | 日韩欧美黄色网址 | 日本不卡久久 | 久草在线视频在线观看 | 一区二区三区高清不卡 | 91大神精品视频在线观看 | 色婷婷国产精品一区在线观看 | 久精品视频 | 亚洲精品视频在线 | 亚洲激情在线观看 | 久久精品亚洲一区二区三区观看模式 | 久久99国产精品久久 | av网站在线免费观看 | 国产一级二级在线播放 | 欧美成年性 | 亚洲永久精品视频 | 欧美日韩亚洲在线观看 | 欧美日韩国产一区二区三区在线观看 | 亚洲精品白浆高清久久久久久 | 在线观看视频一区二区 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 亚洲精品视频免费在线观看 | 成人一区二区在线观看 | av噜噜噜在线播放 | 国产亚洲视频在线 | 久久国产影视 | 国产精品一区二区免费在线观看 | 98精品国产自产在线观看 | 国产韩国日本高清视频 | 亚洲黄色高清 | 国产精品99久久久久久小说 | 韩日精品在线 | av黄色在线| 国产精品二区在线观看 | 免费在线观看日韩欧美 | 久久久久久久久久久免费 | 色婷婷97 | 久久日本视频 | 香蕉视频导航 | 久久综合九色99 | 久久99国产精品久久99 | 久久九九网站 | 最近中文字幕高清字幕在线视频 | www.色婷婷 | 五月天亚洲激情 | 国产剧情一区在线 | 午夜久久影视 | 中文字幕 国产精品 | 超级碰99 | 91九色蝌蚪视频在线 | 国产糖心vlog在线观看 | 在线 影视 一区 | 狠狠干成人综合网 | 国产高清视频免费 | 国产91粉嫩白浆在线观看 | 免费观看的黄色片 | 丰满少妇高潮在线观看 | 夜夜澡人模人人添人人看 | 97人人添人澡人人爽超碰动图 | 五月婷婷在线视频观看 | 久久精品www人人爽人人 | 欧美精品乱码99久久影院 | 亚洲精品在线观 | 精品国内自产拍在线观看视频 | 成人免费精品 | 五月天综合网站 | 在线v片免费观看视频 | 精品国产亚洲在线 | 日韩免费电影网 | 日韩中文在线电影 | 日批视频在线播放 | 久久久久久久网 | 麻豆传媒视频在线播放 | 五月综合网 | 午夜精品一区二区三区在线 | 91九色成人蝌蚪首页 | 国产精品久久久久高潮 | 丝袜制服综合网 | 国产字幕在线播放 | 免费91麻豆精品国产自产在线观看 | 日韩激情小视频 | 日韩久久视频 | www.888av| 免费av高清 | 在线 日韩 av | 国产精品美女视频 | 久久精品久久精品 | 97麻豆视频 | 天天看天天干 | 激情文学综合丁香 | 亚洲成a人片在线观看网站口工 | 麻豆一级视频 | 亚洲码国产日韩欧美高潮在线播放 | 精品黄色片| 黄色app网站在线观看 | 三级黄色a | 久草网视频在线观看 | 天天色天天干天天 | 免费在线成人av电影 | 久久精品久久久久电影 | 成人在线免费观看网站 | 国产91对白在线 | 天堂在线成人 | 97色婷婷成人综合在线观看 | 99精品视频在线观看 | 91精品伦理 | 国产资源av| 久久国产免费看 | 中文一区在线 | 亚洲激情中文 | 在线观看视频在线 | 日韩丝袜在线观看 | 欧美成人在线免费观看 | 岛国精品一区二区 | 久久色中文字幕 | 成人精品视频久久久久 | 最新一区二区三区 | 欧美日韩国产一区 | 免费三级黄色 | av看片在线观看 | 国产日本亚洲 | 亚洲精品视频在线观看视频 | 在线亚洲成人 | 国产破处视频在线播放 | 91探花国产综合在线精品 | 日韩毛片在线播放 | 欧美男同视频网站 | 久久综合九色综合久99 | 国产又粗又猛又色 | 国产精品a久久 | 欧美福利视频 | 美女视频黄免费的久久 | 国产麻豆精品久久一二三 | 天天干,天天射,天天操,天天摸 | 久久久久激情视频 | 国产精品com | 国产视频 亚洲精品 | 在线黄色免费av | 国产黄色免费 | 免费无遮挡动漫网站 | 国产精品久久久久久久久久久免费看 | 免费在线观看av不卡 | 黄色免费大全 | 精品久久九九 | 久久免费高清视频 | 久久久久久久久电影 | 久久久片 | 国产视频一级 | www.日本色 | 69av网| 五月天久久综合网 | 国产一区二区久久精品 | 狠狠干五月天 | 亚洲小视频在线 | 国产视频一区精品 | 国产精品免费人成网站 | 中文字幕日本特黄aa毛片 | 高清有码中文字幕 | 性色大片在线观看 | 日本黄色免费观看 | 日韩在线精品 | 久久综合九色综合97_ 久久久 | 成人免费视频在线观看 | 手机在线观看国产精品 | 成人蜜桃网 | 久草在线手机视频 | 2023国产精品自产拍在线观看 | 精品中文字幕在线 | 人人藻人人澡人人爽 | 丁香五月亚洲综合在线 | 深爱激情亚洲 | 少妇搡bbbb搡bbb搡忠贞 | 九九色在线| 国产精品久久久久久久av电影 | 久久婷婷色| 亚洲精品美女在线观看 | 一级黄视频 | 日韩毛片一区 | 精品国产免费人成在线观看 | 在线观看爱爱视频 | 国产成人a亚洲精品v | 天天爱天天操天天射 | 日韩激情视频在线观看 | 久久看免费视频 | 最新av电影网站 | 国产又粗又长的视频 | 91你懂的 | av在线网站观看 | www黄色com | 天天色天天射天天综合网 | 99av在线视频 | www激情com | 久久伦理电影 | 又黄又刺激的视频 | 日韩在线免费观看视频 | 国产精品成 | 成人一级片免费看 | 日本一区二区三区视频在线播放 | 亚洲资源在线网 | 精品久久久久一区二区国产 | 欧美成人精品欧美一级乱 | 久久久精品久久 | 黄色1级毛片| 看全黄大色黄大片 | 欧美伦理电影一区二区 | 日韩午夜在线观看 | 国产一区二区在线精品 | 色婷婷成人网 | 黄色一级大片在线免费看产 | 欧美最猛性xxxx | 中文字幕 国产视频 | 中文字幕免费高清 | 精品久久久久久久 | av中文字幕剧情 | 韩国精品一区二区三区六区色诱 | 国产免费久久久久 | 欧美人人 | 亚洲综合色激情五月 | 欧产日产国产69 | 91麻豆精品国产自产在线游戏 | 中文字幕一区二区在线播放 | 国产高清第一页 | 日韩精品中文字幕在线 | 在线观看亚洲国产 | 亚洲综合欧美精品电影 | 日韩久久久久久久久久 | 国产精品不卡视频 | 日本久久电影 | 一区二区三区四区在线免费观看 | 91精品免费 | 日韩理论片中文字幕 | av在线影视| 黄色精品国产 | 久久久wwww| 中文在线a在线 | 国产无套精品久久久久久 | 中文字幕二区在线观看 | 日韩美一区二区三区 | 日韩久久久久久 | 亚洲精品天天 | 天天色天天操天天爽 | 午夜aaaa| 人人爽人人爽人人片av | 欧美另类tv | 天天射天天射天天 | 深夜免费小视频 | 91完整版观看| 国产精品乱码一区二区视频 | 天天操天天草 | 在线成人看片 | 亚欧日韩成人h片 | 国产一区二区视频在线播放 | 91久久精 | 中国一区二区视频 | 视频在线观看入口黄最新永久免费国产 | 69精品 | 成人黄大片视频在线观看 | 天天操天天操天天操天天 | a精品视频 | 亚洲国产三级在线观看 | 国产精选在线观看 | 91精品免费看 | 欧美另类交在线观看 | 综合国产在线 | 日韩视频免费看 | 日操干| 国产视频精选 | 亚洲国产美女久久久久 | 欧美日韩在线播放一区 | 一区二区三区日韩视频在线观看 | 亚洲欧美视频在线观看 | 五月婷婷综合久久 | 99久久精品国产网站 | 美女视频黄是免费的 | 伊人在线视频 | 超碰97人人射妻 | 一本大道久久精品懂色aⅴ 五月婷社区 | 色综合欧洲 | 在线观看小视频 | a视频在线播放 | 午夜av在线电影 | 中文字幕在线免费97 | 久草在线综合 | 亚洲精品女人 | 国产精品黑丝在线观看 | 国产精品免费在线播放 | 天天色天天射天天干 | 一区二区高清在线 | 免费日韩一区二区三区 | 成人片在线播放 | 免费网站在线 | 在线观看国产一区二区 | av中文字幕在线看 | 日本资源中文字幕在线 | 久久超碰99| 精品国产aⅴ一区二区三区 在线直播av | 日本久久久久久久久久 | 天无日天天操天天干 | 亚洲少妇激情 | 丁香花中文在线免费观看 | 日本黄色免费大片 | 天天干,天天射,天天操,天天摸 | 久久理论影院 | 亚洲国产天堂av | www操操| 久久久久久久久综合 | 国产成人99av超碰超爽 | 伊人激情网| 国产免费不卡 | 啪嗒啪嗒免费观看完整版 | 亚洲v欧美v国产v在线观看 | 亚洲视屏 | 日韩专区视频 | 免费看91的网站 | av免费试看| 日韩城人在线 | 欧美午夜精品久久久久久孕妇 | 日日夜夜天天操 | 亚洲国产精品久久久 | 四虎视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 成人试看120秒 | 日韩精品一区在线播放 | 免费在线播放黄色 | 久久经典国产 | 精品一区在线看 | 国产手机在线观看视频 | 亚洲第一av在线播放 | 97高清免费视频 | 婷婷网五月天 | 日韩精品一区二区免费视频 | 色五月情 | 夜夜操网站| 99色免费视频 | 91av视频观看| 亚洲a成人v| 国产 欧美 日产久久 | 国产成人精品综合久久久久99 | 色婷婷亚洲 | 久久人视频 | 国产午夜精品一区二区三区在线观看 | 中午字幕在线 | 国产精品视频你懂的 | 99免费看片 | 国内小视频在线观看 | 最近中文字幕免费av | 日本在线观看一区 | 九九精品久久久 | 在线看v片 | 久久伊人八月婷婷综合激情 | 精品国产乱码一区二 | 日日骑 | www.夜夜 | 国内小视频 | 亚洲成人二区 | 日本中文字幕在线播放 | 婷婷综合在线 | 狠狠亚洲| 精品国产亚洲一区二区麻豆 | av黄色影院 | 日韩精品第一区 | 人人插人人爱 | 亚州精品成人 | 精品一区av | 亚洲精品 在线视频 | 欧美一区二区在线看 | 国产乱码精品一区二区蜜臀 | 噜噜色官网| 日韩一区二区免费视频 | 亚洲国产成人av网 | 国产手机视频在线播放 | 欧美精品亚洲精品 | 国产精华国产精品 | 国产不卡一二三区 | 黄色a级片在线观看 | 人人爽人人澡人人添人人人人 | 日韩免费不卡视频 | 国产999在线 | av在线8| www.久草视频| 日本性高潮视频 | 玖玖精品视频 | 久久精品电影网 | 天天玩天天干 | 丰满少妇久久久 | 久 久久影院 | 色婷婷狠狠 | 久久国产精品99精国产 | 国产精品高清免费在线观看 | 国产在线毛片 | 欧美日韩国产一区二区三区 | 国产精品成久久久久三级 | 久久不射电影院 | 欧美一级特黄aaaaaa大片在线观看 | 超碰99在线| 丁香色天天 | 亚洲精品中文字幕在线 | 伊人天天| 亚洲精品短视频 | 成人久久久精品国产乱码一区二区 | 日韩在线视频一区二区三区 | 国产亚洲精品久久久久久无几年桃 | 亚洲激精日韩激精欧美精品 | 天天操人人干 | 欧美网址在线观看 | 久久在线一区 | 黄色网在线免费观看 | 岛国片在线 | 日韩在线网址 | 日本一区二区三区视频在线播放 | 色综合久久88色综合天天人守婷 | 国产资源在线播放 | 99久久日韩精品免费热麻豆美女 | 麻豆综合网 | 国产精品久久久久永久免费观看 | 国产久视频| 欧美一区二区在线看 | 福利电影久久 | 五月天高清欧美mv | 日日爽夜夜爽 | 成人av影视| 免费视频a | 在线免费精品视频 | 91麻豆精品国产91久久久久久久久 | 日韩av电影手机在线观看 | 国产区久久 | 日日插日日干 | 人人爽人人插 | 91看片成人 | 午夜国产福利在线 | 亚洲综合欧美精品电影 | 亚洲欧美日韩国产一区二区三区 | 五月综合| 91在线蜜桃臀 | 国产色 在线 | 久久不卡日韩美女 | 久久黄色成人 | 日本韩国精品在线 | 日日干夜夜骑 | 在线观看日韩专区 | 国产精品久久精品国产 | 一区二区三区在线免费观看视频 | 午夜av电影院 | 久久视频免费观看 | 国产精品自在线 | 高清av在线 | 欧美日韩国产在线 | 亚洲美女免费精品视频在线观看 | www黄在线| 夜添久久精品亚洲国产精品 | 99r在线| 久草久热 | 国产精品1区2区3区 久久免费视频7 | 99性视频 | 黄色大片视频网站 | 天堂资源在线观看视频 | 国产午夜精品久久 | 久久久不卡影院 | 少妇18xxxx性xxxx片 | 麻豆成人在线观看 | 一区二区免费不卡在线 | 伊人超碰在线 | 国产久视频| 伊人婷婷综合 | 看黄色91 | 国产日韩欧美在线观看视频 | 成年人在线免费看片 | 欧美日性视频 | 天天天天射 | 国产剧情av在线播放 | 国产精品久久久久久久久久久免费看 | 99热这里精品 | 欧美在线观看视频一区二区 | 国产不卡精品 | 国产精品男女 | 又黄又爽又湿又无遮挡的在线视频 | 国产精品久久嫩一区二区免费 | 在线a人片免费观看视频 | 日韩一区二区三区免费视频 | 最新av观看 | 五月色婷 | 欧美激情第十页 | 青青草国产成人99久久 | 精选久久 | 91精品啪在线观看国产81旧版 | 久久久久欠精品国产毛片国产毛生 | 婷婷av网 | 国产中文字幕在线 | 久草免费资源 | 日韩欧美高清视频在线观看 | 亚洲精品动漫成人3d无尽在线 | 国产一区二区精品 | 在线亚洲人成电影网站色www | av免费观看网站 | 一区二区三区www | 国产精品一区欧美 | 国产亚洲日 |