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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法基础之数据结构

發(fā)布時間:2023/12/20 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法基础之数据结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

what's the 數(shù)據(jù)結(jié)構(gòu)

  數(shù)據(jù)結(jié)構(gòu)是指相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關(guān)系組成。 簡單來說,數(shù)據(jù)結(jié)構(gòu)就是設(shè)計(jì)數(shù)據(jù)以何種方式組織并存儲在計(jì)算機(jī)中。 比如:列表、集合與字典等都是一種數(shù)據(jù)結(jié)構(gòu)。?

  通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運(yùn)行或者存儲效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關(guān)。

  數(shù)據(jù)結(jié)構(gòu)按照其邏輯結(jié)構(gòu)可分為線性結(jié)構(gòu)、樹結(jié)構(gòu)、圖結(jié)構(gòu):

  • 線性結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對一的相互關(guān)系
  • 樹結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對多的相互關(guān)系
  • 圖結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在多對多的相互關(guān)系

  棧(Stack)是一個數(shù)據(jù)集合,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。可以將棧理解為只能在一端進(jìn)行插入或刪除操作的列表。

  棧的特點(diǎn):后進(jìn)先出、先進(jìn)后出(類似于往箱子里放東西,要拿的時候只能拿最上面的而最上面的是最后進(jìn)的)

  棧操作:進(jìn)棧push、出棧pop、取棧頂gettop

在Python中,不用自定義棧,直接用列表就行,進(jìn)棧函數(shù):append 出棧函數(shù):pop 查看棧頂函數(shù):li[-1]

棧的應(yīng)用

括號匹配問題:給一個字符串,其中包含小括號、中括號、大括號,求該字符串中的括號是否匹配。

基本思路:按順序遍歷字符串是左括號則進(jìn)棧,來的是右括號則將棧頂左括號pop,若來的右括號與棧頂左括號不匹配或空棧情況下來了右括號則返回錯誤信息

def brace_match(s):stack = []d = {'(':')', '[':']', '{':'}'}for ch in s:if ch in {'(', '[', '{'}:stack.append(ch)elif len(stack) == 0:print('多了右括號%s' % ch)return Falseelif d[stack[-1]] == ch:stack.pop()else:print('括號%s處不匹配' % ch)return Falseif len(stack) == 0:return Trueelse:print("剩余左括號未匹配")return Falseprint(brace_match('[]{{}[]{()})}'))

用兩個棧實(shí)現(xiàn)隊(duì)列

class QueueStack(object):def __init__(self):self.l1 = []self.l2 = []def push(self,a):self.l1.append(a)def pop(self):if not self.l2:for i in range(len(self.l1)):a = self.l1.pop()self.l2.append(a)if self.l2:return self.l2.pop()else:return False

隊(duì)列

隊(duì)列(Queue)是一個數(shù)據(jù)集合,僅允許在列表的一端進(jìn)行插入,另一端進(jìn)行刪除。

進(jìn)行插入的一端稱為隊(duì)尾(rear),插入動作稱為進(jìn)隊(duì)或入隊(duì);

進(jìn)行刪除的一端稱為隊(duì)頭(front),刪除動作稱為出隊(duì)。和棧一樣,隊(duì)列是一種操作受限制的線性表。

隊(duì)列的性質(zhì):先進(jìn)先出(可以將隊(duì)列理解為排隊(duì)買東西)

特殊情況——雙向隊(duì)列:隊(duì)列的兩端都允許進(jìn)行進(jìn)隊(duì)和出隊(duì)操作。

如何用列表實(shí)現(xiàn)隊(duì)列:

  • 初步設(shè)想:列表+兩個下標(biāo)指針
  • 創(chuàng)建一個列表和兩個變量,front變量指向隊(duì)首,rear變量指向隊(duì)尾。初始時,front和rear都為0。
  • 進(jìn)隊(duì)操作:元素寫到li[rear]的位置,rear自增1。
  • 出隊(duì)操作:返回li[front]的元素,front自減1。
  • 以上就是隊(duì)列實(shí)現(xiàn)的基本思路,但是隊(duì)列出隊(duì)之后,前面的空間被浪費(fèi)了,所以實(shí)際情況中隊(duì)列的實(shí)現(xiàn)原理是一個環(huán)形隊(duì)列

    環(huán)形隊(duì)列:當(dāng)隊(duì)尾指針front == Maxsize + 1時,再前進(jìn)一個位置就自動到0。

    • 實(shí)現(xiàn)方式:求余數(shù)運(yùn)算
    • 隊(duì)首指針前進(jìn)1:front = (front + 1) % MaxSize
    • 隊(duì)尾指針前進(jìn)1:rear = (rear + 1) % MaxSize
    • 隊(duì)空條件:rear == front
    • 隊(duì)滿條件:(rear + 1) % MaxSize == front

    ?

    在Python中,有一個內(nèi)置模塊可以幫我們快速建立起一個隊(duì)列——deque模塊

    使用方法:from collections import deque
    創(chuàng)建隊(duì)列:queue = deque(li)
    進(jìn)隊(duì):append()
    出隊(duì):popleft()
    雙向隊(duì)列隊(duì)首進(jìn)隊(duì):appendleft()
    雙向隊(duì)列隊(duì)尾進(jìn)隊(duì):pop()

    棧和隊(duì)列的應(yīng)用

    求走出迷宮的路徑

    用棧解決迷宮問題

    基本思路:在一個迷宮節(jié)點(diǎn)(x,y)上,可以進(jìn)行四個方向的探查:maze[x-1][y](表示上), maze[x+1][y](下), maze[x][y-1](左), maze[x][y+1](右)

    思路:思路:從一個節(jié)點(diǎn)開始,任意找下一個能走的點(diǎn),當(dāng)找不到能走的點(diǎn)時,退回上一個點(diǎn)尋找是否有其他方向的點(diǎn)

    方法:創(chuàng)建一個空棧,首先將入口位置進(jìn)棧。當(dāng)棧不空時循環(huán):獲取棧頂元素,尋找下一個可走的相鄰方塊,如果找不到可走的相鄰方塊,說明當(dāng)前位置是死胡同,進(jìn)行回溯(就是講當(dāng)前位置出棧,看前面的點(diǎn)是否還有別的出路)

    maze = [[1,1,1,1,1,1,1,1,1,1],[1,0,0,1,0,0,0,1,0,1],[1,0,0,1,0,0,0,1,0,1],[1,0,0,0,0,1,1,0,0,1],[1,0,1,1,1,0,0,0,0,1],[1,0,0,0,1,0,0,0,0,1],[1,0,1,0,0,0,1,0,0,1],[1,0,1,1,1,0,1,1,0,1],[1,1,0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,1,1,1] ]dirs = [lambda x,y:(x-1,y), #上lambda x,y:(x,y+1), #右lambda x,y:(x+1,y), #下lambda x,y:(x,y-1), #左 ]def stack_solve_maze(x1, y1, x2, y2):""":param x1: 起點(diǎn)x坐標(biāo):param y1: 起點(diǎn)y坐標(biāo):param x2: 終點(diǎn)x坐標(biāo):param y2: 終點(diǎn)y坐標(biāo):return:"""stack = []stack.append((x1,y1)) # 起點(diǎn)maze[x1][y1] = 2 # 2表示已經(jīng)走過的點(diǎn),我們要將已經(jīng)走過的點(diǎn)進(jìn)行標(biāo)識,免得走重復(fù)的路while len(stack) > 0: # 當(dāng)棧不空循環(huán)cur_node = stack[-1] # 棧頂,即目前所在位置if cur_node == (x2,y2): # 到達(dá)終點(diǎn)for p in stack:print('==>',p,end='') # 依次輸出棧內(nèi)坐標(biāo)return True# 沒到終點(diǎn)時,在任意位置都要試探上下左右是否走得通for dir in dirs:next_node = dir(*cur_node)if maze[next_node[0]][next_node[1]] == 0: # 0是通道,說明找到一個能走的方向stack.append(next_node)maze[next_node[0]][next_node[1]] = 2 # 2表示已經(jīng)走過的點(diǎn)breakelse: # 如果一個方向也找不到,說明到死胡同了stack.pop()else:print("無路可走")return Falsestack_solve_maze(1,1,8,8) # ==> (1, 1)==> (1, 2)==> (2, 2)==> (3, 2)==> (3, 1)==> (4, 1)==> (5, 1)==> (5, 2)==> (5, 3)==> (6, 3)==> (6, 4)==>(6, 5)==> (5, 5)==> (4, 5)==> (4, 6)==> (4, 7)==> (3, 7)==> (3, 8)==> (4, 8)==> (5, 8)==> (6, 8)==> (7, 8)==> (8, 8)

    用隊(duì)列解決迷宮問題

    思路:從一個節(jié)點(diǎn)開始,尋找所有下面能繼續(xù)走的點(diǎn)。繼續(xù)尋找,直到找到出口。

    方法:創(chuàng)建一個空隊(duì)列,將起點(diǎn)位置進(jìn)隊(duì)。在隊(duì)列不為空時循環(huán):出隊(duì)一次。如果當(dāng)前位置為出口,則結(jié)束算法;否則找出當(dāng)前方塊的4個相鄰方塊中可走的方塊,全部進(jìn)隊(duì)。

    ?

    from collections import dequemaze = [[1,1,1,1,1,1,1,1,1,1],[1,0,0,1,0,0,0,1,0,1],[1,0,0,1,0,0,0,1,0,1],[1,0,0,0,0,1,1,0,0,1],[1,0,1,1,1,0,0,0,0,1],[1,0,0,0,1,0,0,0,0,1],[1,0,1,0,0,0,1,0,0,1],[1,0,1,1,1,0,1,1,0,1],[1,1,0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,1,1,1] ]dirs = [lambda x,y:(x-1,y), #上lambda x,y:(x,y+1), #右lambda x,y:(x+1,y), #下lambda x,y:(x,y-1), #左 ]def deque_solve_maze(x1,y1,x2,y2):queue = deque()# 創(chuàng)建隊(duì)列path = [] # 記錄出隊(duì)之后的節(jié)點(diǎn)queue.append((x1,y1,-1))maze[x1][y1] = 2 # 2表示應(yīng)經(jīng)走過的點(diǎn)while len(queue) > 0:cur_node = queue.popleft()path.append(cur_node)if cur_node[0] == x2 and cur_node[1] == y2: # 到終點(diǎn)real_path = []x,y,i = path[-1]real_path.append((x,y)) # 將終點(diǎn)坐標(biāo)append到real_path中while i >= 0:node = path[i] # node是一個元祖(x坐標(biāo),y坐標(biāo),該點(diǎn)的leader)real_path.append(node[0:2]) # 只要坐標(biāo)i = node[2]real_path.reverse() # 反轉(zhuǎn)后順序才為從起點(diǎn)到終點(diǎn)for p in real_path:print('==>',p,end='')return Truefor dir in dirs:next_node = dir(cur_node[0], cur_node[1])if maze[next_node[0]][next_node[1]] == 0:queue.append((next_node[0], next_node[1], len(path)-1))maze[next_node[0]][next_node[1]] = 2 # 標(biāo)記為已經(jīng)走過else:print("無路可走")return Falsedeque_solve_maze(1,1,8,8) #==> (1, 1)==> (2, 1)==> (3, 1)==> (4, 1)==> (5, 1)==> (5, 2)==> (5, 3)==> (6, 3)==> (6, 4)==> (6, 5)==> (7, 5)==> (8, 5)==> (8, 6)==> (8, 7)==> (8, 8)

    總結(jié):

    • 隊(duì)列解決迷宮問題找到的出路肯定是最短路徑,但是相對而言用隊(duì)列會比較占用內(nèi)存
    • 隊(duì)列對應(yīng)的思想是廣度優(yōu)先,棧對應(yīng)的是深度優(yōu)先

    鏈表

    鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時動態(tài)生成。

    每個結(jié)點(diǎn)包括兩個部分:一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結(jié)點(diǎn)地址的指針域。 相比于線性表順序結(jié)構(gòu),操作復(fù)雜。由于不必須按順序存儲,鏈表在插入的時候可以達(dá)到O(1)的復(fù)雜度,比另一種線性表順序表快得多,但是查找一個節(jié)點(diǎn)或者訪問特定編號的節(jié)點(diǎn)則需要O(n)的時間,而線性表和順序表相應(yīng)的時間復(fù)雜度分別是O(logn)和O(1)。

    使用鏈表結(jié)構(gòu)可以克服數(shù)組鏈表需要預(yù)先知道數(shù)據(jù)大小的缺點(diǎn),鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動態(tài)管理。但是鏈表失去了數(shù)組隨機(jī)讀取的優(yōu)點(diǎn),同時鏈表由于增加了結(jié)點(diǎn)的指針域,空間開銷比較大。鏈表最明顯的好處就是,常規(guī)數(shù)組排列關(guān)聯(lián)項(xiàng)目的方式可能不同于這些數(shù)據(jù)項(xiàng)目在記憶體或磁盤上順序,數(shù)據(jù)的存取往往要在不同的排列順序中轉(zhuǎn)換。鏈表允許插入和移除表上任意位置上的節(jié)點(diǎn),但是不允許隨機(jī)存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環(huán)鏈表。鏈表可以在多種編程語言中實(shí)現(xiàn)。像Lisp和Scheme這樣的語言的內(nèi)建數(shù)據(jù)類型中就包含了鏈表的存取和操作。程序語言或面向?qū)ο笳Z言,如C,C++和Java依靠易變工具來生成鏈表。

    鏈表中每一個元素都是一個對象,每個對象稱為一個節(jié)點(diǎn),包含有數(shù)據(jù)域key和指向下一個節(jié)點(diǎn)的指針next。通過各個節(jié)點(diǎn)之間的相互連接,最終串聯(lián)成一個鏈表。

    # 結(jié)點(diǎn)的定義,單向 class Node(object):def __init__(self, item):self.item = itemself.next = None

    建立鏈表的方式有頭插法和尾插法兩種

    • 頭插法:在一個結(jié)點(diǎn)的前面插入元素,head的指針由指向原來的結(jié)點(diǎn)變?yōu)橹赶蛐略?#xff0c;新元素的指針指向原來的結(jié)點(diǎn)
    • 尾插法:在一個元素后面插入一個元素,原來結(jié)點(diǎn)的指針指向新元素

    建立列表實(shí)現(xiàn)代碼如下:

    # a = Node(1) # 頭結(jié)點(diǎn),是節(jié)點(diǎn) # b = Node(2) # c = Node(3) # a.next = b # b.next = c # head = a# 帶空頭結(jié)點(diǎn)的鏈表 # head = Node() # 頭結(jié)點(diǎn) # a = Node(1) # b = Node(2) # c = Node(3) # head.next = a # a.next = b # b.next = c # print(a.next.data)class Node:def __init__(self, data=None):self.data = dataself.next = Noneclass LinkList:def __init__(self, li, method='tail'):self.head = Noneself.tail = Noneif method == 'tail':self.create_linklist_tail(li)elif method == 'head':self.create_linklist_head(li)else:raise ValueError("Unsupport value %s" % method)def create_linklist_head(self, li):self.head = Node(0)for v in li:n = Node(v)n.next = self.head.nextself.head.next = nself.head.data += 1def create_linklist_tail(self, li):self.head = Node(0)self.tail = self.headfor v in li:p = Node(v)self.tail.next = pself.tail = pself.head.data += 1def traverse(self):p = self.head.nextwhile p:yield p.datap = p.nextdef __len__(self):return self.head.datall = LinkList([1,2,3,4,5], method='tail') print(len(ll))

    鏈表結(jié)點(diǎn)的插入

    鏈表插入結(jié)點(diǎn)的操作的重點(diǎn)是指針的變換,首先我們有兩個結(jié)點(diǎn)A指向B,這時要在AB中間插入C,我們需要將C的指針指向B,然后將A的指針指向C,在刪除AB之間的指針,就完成了C的插入,由AB變?yōu)榱薃CB

    # curNode為A結(jié)點(diǎn) c.next = curNode.next curNode.next = c

    鏈表結(jié)點(diǎn)的刪除

    在鏈表中,要刪除一個結(jié)點(diǎn)不能直接刪掉就萬事大吉,我們需要將指向該結(jié)點(diǎn)的結(jié)點(diǎn)的指針指向該結(jié)點(diǎn)指針指向的結(jié)點(diǎn)(A指向B指向C,B為要刪除的該結(jié)點(diǎn),將A的指針指向C),然后才能刪除該節(jié)點(diǎn)(B)

    ?

    # p為要刪除的結(jié)點(diǎn) curNode.next = curNode.next.next # 即p.next del p

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點(diǎn)中都有兩個指針,分別指向直接后繼(后面結(jié)點(diǎn))和直接前驅(qū)(前面結(jié)點(diǎn))。所以,從雙向鏈表中的任意一個結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(gòu)造雙向循環(huán)鏈表。?

    雙向鏈表的節(jié)點(diǎn)定義

    class Node(object):def __init__(self, item=None):self.item = itemself.next = Noneself.prior = None

    雙向鏈表結(jié)點(diǎn)的插入

    與鏈表相同,雙向鏈表插入結(jié)點(diǎn)也需要將指針進(jìn)行變換。同樣是AB之間要插入C,我們需要先將C的指針指向B、B的指針由指向A轉(zhuǎn)變?yōu)橹赶駼,然后C的另一個指針指向A,A結(jié)點(diǎn)的指針由指向B轉(zhuǎn)變?yōu)橹赶駼。

    # p為新插入的元素 p.next = curNode.next curNode.next.prior = p p.prior = curNode curNode.next = p

    雙向鏈表結(jié)點(diǎn)的刪除

    刪除雙向鏈表的結(jié)點(diǎn)前需要建立起該結(jié)點(diǎn)前后兩個結(jié)點(diǎn)的指針關(guān)系,然后才能刪除結(jié)點(diǎn)

    # p為要刪除的結(jié)點(diǎn) p = curNode.next curNode.next = p.next p.next.prior = curNode del p

    鏈表的復(fù)雜度分析

    • 按元素值查找——O(n),因?yàn)闆]有下標(biāo)所以沒法做二分
    • 按下標(biāo)查找——O(n),因?yàn)闆]有下標(biāo)
    • 在某元素后插入——O(1)
    • 刪除某元素——O(1)

    總結(jié)

    • 鏈表在插入和刪除的操作上明顯快于順序表
    • 鏈表的內(nèi)存可以更靈活的分配。試?yán)面湵碇匦聦?shí)現(xiàn)棧和隊(duì)列
    • 鏈表這種鏈?zhǔn)酱鎯Φ臄?shù)據(jù)結(jié)構(gòu)對樹和圖的結(jié)構(gòu)有很大的啟發(fā)性

    鏈表的題

    檢查給定的鏈表是否包含循環(huán),包含循環(huán)返回1,不包含循環(huán)則返回0。同時說明所實(shí)現(xiàn)的時間和空間復(fù)雜度是多少。

    # 快慢指針法:一個指針每次移動一個單位,一個指針每次移動兩個單位,如果重合,說明有環(huán) def find_loop(list):p1 = p2 = listwhile p2 and p2.pnext:p1 = p1.pnextp2 = p2.pnext.pnextif p1 == p2:return 1return 0 # 時間復(fù)雜度O(n), 空間復(fù)雜度O(1).

    哈希表

    哈希表的簡單概述

    哈希表一個通過哈希函數(shù)來計(jì)算數(shù)據(jù)存儲位置的數(shù)據(jù)結(jié)構(gòu),通常支持如下操作 (高效的操作):python中的字典是通過哈希表實(shí)現(xiàn)的

    • insert(key, value):插入鍵值對(key,value)
    • get(key):如果存在鍵為key的鍵值對則返回其value,否則返回空值
    • delete(key):刪除鍵為key的鍵值對

    ?直接尋址表

    當(dāng)關(guān)鍵字的key 的?全域U(關(guān)鍵字可能出現(xiàn)的范圍)比較小時,直接尋址是一種簡單而有效的方法

    • 存儲 : 如上圖將數(shù)組的下標(biāo)作為key,將數(shù)值存儲在對應(yīng)的下表位置? ? ??key為k的元素放到k位置上
    • 刪除 : 當(dāng)要刪除某個元素時,將對應(yīng)的下標(biāo)的位置值置為空

    直接尋址技術(shù)缺點(diǎn):

    • 當(dāng)域U很大時,需要消耗大量內(nèi)存,很不實(shí)際
    • 如果域U很大而實(shí)際出現(xiàn)的key很少,則大量空間被浪費(fèi)
    • 無法處理關(guān)鍵字不是數(shù)字的情況,因?yàn)閗ey可以是其他的數(shù)據(jù)類型

    哈希與哈希表

    改進(jìn)直接尋址表:?哈希

    • 構(gòu)建大小為m的尋址表T
    • key為k的元素放到h(k)位置上
    • h(k)是一個函數(shù),其將域U映射到表T[0,1,...,m-1]

    哈希表

    • 哈希表(Hash Table,又稱為散列表),是一種線性表的存儲結(jié)構(gòu)。哈希表由一個直接尋址表和一個哈希函數(shù)組成。
    • 哈希函數(shù)h(k)將元素關(guān)鍵字k作為自變量,返回元素的存儲下標(biāo)。

    簡單的hash函數(shù)

    • 除法哈希:h(k) = k mod m
    • 乘法哈希:h(k) = floor(m(kA mod 1)) 0<A<1

    存儲機(jī)制

    以除法哈希為例討論下存儲機(jī)制以及存在的問題

    假設(shè)有一個長度為7的數(shù)組,哈希函數(shù)h(k)=k mod 7,元素集合{14,22,3,5}的存儲方式如下圖。

    ?

    解釋:

    • 存儲 : key對數(shù)組長度取余,余數(shù)作為數(shù)組的下標(biāo),將值存儲在此處
    • 存在的問題 :比如:h(k)=k mod 7, h(0)=h(7)=h(14)=...?

    ?

    哈希沖突

    由于哈希表的大小是有限的,而要存儲的值的總數(shù)量是無限的,因此對于任何哈希函數(shù),都會出現(xiàn)兩個不同元素映射到同一個位置上的情況,這種情況叫做哈希沖突。

    比如上圖中的哈希表就存在這哈希沖突——h(k)=k%7, h(0)=h(7)=h(14)=...

    解決哈希沖突方法

    方法一:開放尋址法——如果哈希函數(shù)返回的位置已經(jīng)有值,則可以向后探查新的位置來存儲這個值。

    • 線性探查:如果位置i被占用,則探查i+1, i+2,……
    • 二次探查:如果位置i被占用,則探查i+12,i-12,i+22,i-22,……
    • 二度哈希:有n個哈希函數(shù),當(dāng)使用第1個哈希函數(shù)h1發(fā)生沖突時,則嘗試使用h2,h3,……

    方法二:拉鏈法——哈希表每個位置都連接一個鏈表,當(dāng)沖突發(fā)生時,沖突的元素將被加到該位置鏈表的最后。

    ?

    哈希表在Python中的應(yīng)用

    字典與集合都是通過哈希表來實(shí)現(xiàn)的
    在Python中的字典:a = {'name': 'Damon', 'age': 18, 'gender': 'Man'}
    使用哈希表存儲字典,通過哈希函數(shù)將字典的鍵映射為下標(biāo)。假設(shè)h(‘name’) = 3, h(‘a(chǎn)ge’) = 1, h(‘gender’) = 4,則哈希表存儲為[None, 18, None, ’Damon’, ‘Man’]
    在字典鍵值對數(shù)量不多的情況下,幾乎不會發(fā)生哈希沖突,此時查找一個元素的時間復(fù)雜度為O(1)。

    二叉樹

    在了解二叉樹之前,首先我們得有樹的概念。

    樹是一種數(shù)據(jù)結(jié)構(gòu)又可稱為樹狀圖,如文檔的目錄、HTML的文檔樹都是樹結(jié)構(gòu),它是由n(n>=1)個有限節(jié)點(diǎn)組成一個具有層次關(guān)系的集合。把它叫做“樹”是因?yàn)樗雌饋硐褚豢玫箳斓臉?#xff0c;也就是說它是根朝上,而葉朝下的。它具有以下的特點(diǎn):

    • 每個節(jié)點(diǎn)有零個或多個子節(jié)點(diǎn);
    • 沒有父節(jié)點(diǎn)的節(jié)點(diǎn)稱為根節(jié)點(diǎn);
    • 每一個非根節(jié)點(diǎn)有且只有一個父節(jié)點(diǎn);
    • 除了根節(jié)點(diǎn)外,每個子節(jié)點(diǎn)可以分為多個不相交的子樹;?

    有關(guān)樹的一些相關(guān)術(shù)語:

    節(jié)點(diǎn)的度:一個節(jié)點(diǎn)含有的子樹的個數(shù)稱為該節(jié)點(diǎn)的度; 葉節(jié)點(diǎn)或終端節(jié)點(diǎn):度為0的節(jié)點(diǎn)稱為葉節(jié)點(diǎn); 非終端節(jié)點(diǎn)或分支節(jié)點(diǎn):度不為0的節(jié)點(diǎn); 雙親節(jié)點(diǎn)或父節(jié)點(diǎn):若一個節(jié)點(diǎn)含有子節(jié)點(diǎn),則這個節(jié)點(diǎn)稱為其子節(jié)點(diǎn)的父節(jié)點(diǎn); 孩子節(jié)點(diǎn)或子節(jié)點(diǎn):一個節(jié)點(diǎn)含有的子樹的根節(jié)點(diǎn)稱為該節(jié)點(diǎn)的子節(jié)點(diǎn); 兄弟節(jié)點(diǎn):具有相同父節(jié)點(diǎn)的節(jié)點(diǎn)互稱為兄弟節(jié)點(diǎn); 樹的度:一棵樹中,最大的節(jié)點(diǎn)的度稱為樹的度; 節(jié)點(diǎn)的層次:從根開始定義起,根為第1層,根的子節(jié)點(diǎn)為第2層,以此類推; 樹的高度或深度:樹中節(jié)點(diǎn)的最大層次; 堂兄弟節(jié)點(diǎn):雙親在同一層的節(jié)點(diǎn)互為堂兄弟; 節(jié)點(diǎn)的祖先:從根到該節(jié)點(diǎn)所經(jīng)分支上的所有節(jié)點(diǎn); 森林:由m(m>=0)棵互不相交的樹的集合稱為森林;

    樹的種類有:無序樹、有序樹、二叉樹、霍夫曼樹。其中最重要應(yīng)用最多的就是二叉樹,下面我們來學(xué)習(xí)有關(guān)二叉樹的知識。

    二叉樹

    二叉樹的定義為度不超過2的樹,即每個節(jié)點(diǎn)最多有兩個叉(兩個分支)。上面那個例圖其實(shí)就是一顆二叉樹。

    二叉樹是每個節(jié)點(diǎn)最多有兩個子樹的樹結(jié)構(gòu)。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用于實(shí)現(xiàn)二叉查找樹和二叉堆。

    二叉樹的每個結(jié)點(diǎn)至多只有二棵子樹(不存在度大于2的結(jié)點(diǎn)),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有個結(jié)點(diǎn);深度為k的二叉樹至多有個結(jié)點(diǎn);對任何一棵二叉樹T,如果其終端結(jié)點(diǎn)數(shù)為,度為2的結(jié)點(diǎn)數(shù)為,則。

    一棵深度為k,且有個節(jié)點(diǎn)的二叉樹,稱為滿二叉樹。這種樹的特點(diǎn)是每一層上的節(jié)點(diǎn)數(shù)都是最大節(jié)點(diǎn)數(shù)。而在一棵二叉樹中,除最后一層外,若其余層都是滿的,并且最后一層或者是滿的,或者是在右邊缺少連續(xù)若干節(jié)點(diǎn),則此二叉樹為完全二叉樹。具有n個節(jié)點(diǎn)的完全二叉樹的深度為log2n+1。深度為k的完全二叉樹,至少有個節(jié)點(diǎn),至多有個節(jié)點(diǎn)。

    二叉樹的存儲方式分為鏈?zhǔn)酱鎯晚樞虼鎯?#xff08;類似列表)兩種

    二叉樹父節(jié)點(diǎn)下標(biāo)i和左孩子節(jié)點(diǎn)的編號下標(biāo)的關(guān)系為2i+1,和右孩子節(jié)點(diǎn)的編號下標(biāo)的關(guān)系為2i+2

    二叉樹有兩個特殊的形態(tài):滿二叉樹和完全二叉樹

    滿二叉樹:一個二叉樹,如果除了葉子節(jié)點(diǎn)外每一個層的結(jié)點(diǎn)數(shù)都達(dá)到最大值,則這個二叉樹就是滿二叉樹。

    完全二叉樹:葉節(jié)點(diǎn)只能出現(xiàn)在最下層和次下層,并且最下面一層的結(jié)點(diǎn)都集中在該層最左邊的若干位置的二叉樹為完全二叉樹。即右邊的最下層和次下層可以適當(dāng)缺一個右子數(shù)

    完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu)

    二叉樹的鏈?zhǔn)酱鎯?#xff1a;將二叉樹的節(jié)點(diǎn)定義為一個對象,節(jié)點(diǎn)之間通過類似鏈表的鏈接方式來連接。

    二叉樹結(jié)點(diǎn)的定義

    class BiTreeNode:def __init__(self, data):self.data = dataself.lchild = Noneself.rchild = None

    二叉樹的遍歷分為四種——前序遍歷、中序遍歷、后序遍歷和層級遍歷

    前序+中序或者后序+中序 可以唯一確定一顆子樹(兩個節(jié)點(diǎn)除外)

    設(shè)樹結(jié)構(gòu)為:

            

    • 前序遍歷:先打印根,再遞歸其左子樹,后遞歸其右子數(shù) ? ?E ACBD GF
    • 中序遍歷:以根為中心,左邊打印左子樹,右邊打印右子樹(注意,每個子樹也有相應(yīng)的根和子樹) ? A BCD E GF
    • 后序遍歷:先遞歸左子樹,再遞歸右子樹,后打印根(注意,每個子樹也有相應(yīng)的根和子樹BDC A FG E
    • 層次遍歷:從根開始一層一層來,同一層的從左到右輸出E AG CF BD

    四種遍歷方法的代碼實(shí)現(xiàn):

    # 結(jié)點(diǎn)的定義 class BiTreeNode:def __init__(self, data):self.data = dataself.lchild = Noneself.rchild = None # 二叉樹結(jié)點(diǎn) a = BiTreeNode('A') b = BiTreeNode('B') c = BiTreeNode('C') d = BiTreeNode('D') e = BiTreeNode('E') f = BiTreeNode('F') g = BiTreeNode('G') # 結(jié)點(diǎn)之間的關(guān)系 e.lchild = a e.rchild = g a.rchild = c c.lchild = b c.rchild = d g.rchild = froot = e# 前序遍歷:先打印根,再遞歸左孩子,后遞歸右孩子 def pre_order(root):if root:print(root.data, end='')pre_order(root.lchild)pre_order(root.rchild)# 中序遍歷:以根為中心,左邊打印左子樹,右邊打印右子樹(注意,每個子樹也有相應(yīng)的根和子樹) # (ACBD) E (GF)-->(A(CBD)) E (GF)-->(A (B C D)) E (G F) def in_order(root):if root:in_order(root.lchild)print(root.data, end='')in_order(root.rchild)# 后序遍歷:先遞歸左子樹,再遞歸右子數(shù),后打印根(注意,每個子樹也有相應(yīng)的根和子樹) # (ABCD)(GF)E-->((BCD)A)(GF)E-->(BDCA)(FG)E def post_order(root):if root:post_order(root.lchild)post_order(root.rchild)print(root.data, end='')# 層次遍歷:一層一層來,同一層的從左到右輸出 def level_order(root):queue = deque()queue.append(root)while len(queue) > 0:node = queue.popleft()print(node.data,end='')if node.lchild:queue.append(node.lchild)if node.rchild:queue.append(node.rchild)pre_order(root)#EACBDGF print("") in_order(root)#ABCDEGF print("") post_order(root)#BDCAFGE print("") level_order(root)#EAGCFBD

    二叉搜索樹

    二叉搜索樹(Binary Search Tree),它或者是一棵空樹,或者是具有下列性質(zhì)的二叉樹: 若它的左子樹不空,則左子樹上所有結(jié)點(diǎn)的值均小于它的根結(jié)點(diǎn)的值; 若它的右子樹不空,則右子樹上所有結(jié)點(diǎn)的值均大于它的根結(jié)點(diǎn)的值; 它的左、右子樹也分別為二叉搜索樹。

    二叉搜索樹的中序遍歷得到的是原來列表按升序排序的列表

    由列表生成二叉搜索樹、通過二叉搜索樹查詢值

    # 結(jié)點(diǎn)定義 class BiTreeNode:def __init__(self, data):self.data = dataself.lchild = Noneself.rchild = None # 建立二叉搜索樹(循環(huán)列表,插入值) class BST:def __init__(self, li=None):self.root = Noneif li:self.root = self.insert(self.root, li[0]) # 列表的第一個元素是根for val in li[1:]:self.insert(self.root, val)# 生成二叉搜索樹遞歸版本def insert(self, root, val):if root is None:root = BiTreeNode(val)elif val < root.data: # 插入的值小于root,要放到左子樹中(遞歸查詢插入的位置)root.lchild = self.insert(root.lchild, val)else: # 插入的值大于root,要放到右子樹中(遞歸查詢插入的位置)root.rchild = self.insert(root.rchild, val)return root# 生成二叉搜索樹不遞歸的版本def insert_no_rec(self, val):p = self.rootif not p:self.root = BiTreeNode(val)returnwhile True:if val < p.data:if p.lchild:p = p.lchildelse:p.lchild = BiTreeNode(val)breakelse:if p.rchild:p = p.rchildelse:p.rchild = BiTreeNode(val)break# 查詢遞歸版本def query(self, root, val):if not root:return Falseif root.data == val:return Trueelif root.data > val:return self.query(root.lchild, val)else:return self.query(root.rchild, val)# 查詢非遞歸版本def query_no_rec(self, val):p = self.rootwhile p:if p.data == val:return Trueelif p.data > val:p = p.lchildelse:p = p.rchildreturn False# 中序遍歷,得到的是升序的列表def in_order(self, root):if root:self.in_order(root.lchild)print(root.data, end=',')self.in_order(root.rchild)tree = BST() for i in [1,5,9,8,7,6,4,3,2]:tree.insert_no_rec(i) tree.in_order(tree.root) #print(tree.query_no_rec(12))

    刪除操作

    • 1. 如果要刪除的節(jié)點(diǎn)是葉子節(jié)點(diǎn):直接刪除
    • 2. 如果要刪除的節(jié)點(diǎn)只有一個孩子:將此節(jié)點(diǎn)的父親與孩子連接,然后刪除該節(jié)點(diǎn)。
    • 3. 如果要刪除的節(jié)點(diǎn)有兩個孩子:將其右子樹的最小節(jié)點(diǎn)(該節(jié)點(diǎn)最多有一個右孩子)刪除,并替換當(dāng)前節(jié)點(diǎn)。

    二叉搜索樹效率:

    • 平均情況下,二叉搜索樹進(jìn)行搜索的時間復(fù)雜度為O(nlogn)。
    • 最壞情況下,二叉搜索樹可能非常偏斜。
    • 解決方案:隨機(jī)化插入,AVL

    二叉搜索樹的應(yīng)用——AVL樹、B樹、B+樹

    AVL樹

    AVL樹:AVL樹是一棵自平衡的二叉搜索樹。

    AVL樹具有以下性質(zhì): 根的左右子樹的高度之差的絕對值不能超過1,根的左右子樹都是平衡二叉樹

    插入一個節(jié)點(diǎn)可能會破壞AVL樹的平衡,可以通過旋轉(zhuǎn)操作來進(jìn)行修正。

    插入一個節(jié)點(diǎn)后,只有從插入節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑上的節(jié)點(diǎn)的平衡可能被改變。我們需要找出第一個破壞了平衡條件的節(jié)點(diǎn),稱之為K。K的兩顆子樹的高度差2。

    不平衡的出現(xiàn)可能有4種情況

    1.不平衡是由于對K的右孩子的右子樹插入導(dǎo)致的:左

    2.不平衡是由于對K的左孩子的左子樹插入導(dǎo)致的:右旋

    3.不平衡是由于對K的右孩子的左子樹插入導(dǎo)致的:右旋-左旋

    4.不平衡是由于對K的左孩子的右子樹插入導(dǎo)致的:左旋-右旋

    B樹

    B樹是一棵自平衡的多路搜索樹。常用于數(shù)據(jù)庫的索引。

    B+ 樹

    B+ 樹是一種樹數(shù)據(jù)結(jié)構(gòu),是一個n叉排序樹,每個節(jié)點(diǎn)通常有多個孩子,一棵B+樹包含根節(jié)點(diǎn)、內(nèi)部節(jié)點(diǎn)和葉子節(jié)點(diǎn)。根節(jié)點(diǎn)可能是一個葉子節(jié)點(diǎn),也可能是一個包含兩個或兩個以上孩子節(jié)點(diǎn)的節(jié)點(diǎn)。

    B+ 樹通常用于數(shù)據(jù)庫和操作系統(tǒng)的文件系統(tǒng)中。NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系統(tǒng)都在使用B+樹作為元數(shù)據(jù)索引。B+ 樹的特點(diǎn)是能夠保持?jǐn)?shù)據(jù)穩(wěn)定有序,其插入與修改擁有較穩(wěn)定的對數(shù)時間復(fù)雜度。B+ 樹元素自底向上插入。

      B+樹是應(yīng)文件系統(tǒng)所需而出的一種B樹的變型樹。一棵m階的B+樹和m階的B-樹的差異在于:

    1.有n棵子樹的結(jié)點(diǎn)中含有n個關(guān)鍵字,每個關(guān)鍵字不保存數(shù)據(jù),只用來索引,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)。

    2.所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含這些關(guān)鍵字記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接。

    3.所有的非終端結(jié)點(diǎn)可以看成是索引部分,結(jié)點(diǎn)中僅含其子樹(根結(jié)點(diǎn))中的最大(或最小)關(guān)鍵字。

    通常在B+樹上有兩個頭指針,一個指向根結(jié)點(diǎn),一個指向關(guān)鍵字最小的葉子結(jié)點(diǎn)。

    https://www.cnblogs.com/zhuminghui/p/8414317.html

    https://www.cnblogs.com/wcx666/p/10686964.html

    總結(jié)

    以上是生活随笔為你收集整理的算法基础之数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    色中文字幕在线观看 | 国产精品毛片一区二区在线 | 99久热在线精品视频成人一区 | 亚洲国产精彩中文乱码av | 97精品久久人人爽人人爽 | 免费看日韩 | 五月婷婷天堂 | 亚洲一区精品人人爽人人躁 | 久久国产视频网 | 麻豆91在线播放 | 日韩av在线高清 | 日韩欧美高清免费 | 国产正在播放 | 欧美性做爰猛烈叫床潮 | 成人精品久久久 | 成人精品福利 | 中文字幕av免费 | 久精品在线 | 在线免费观看国产视频 | 色偷偷中文字幕 | 亚洲国产精品久久久久婷婷884 | 国产99久久99热这里精品5 | 日韩一区正在播放 | 国产一级免费电影 | 欧美电影在线观看 | www.五月婷婷.com | 日本一区二区不卡高清 | 四川妇女搡bbbb搡bbbb搡 | 毛片3| 欧美日韩在线播放一区 | 伊人色综合网 | 欧美日韩3p| 久久精品视频99 | 中文字幕日韩有码 | 丁香激情五月婷婷 | 久久久精品免费观看 | 一级免费片 | 日韩一级理论片 | 一区二区视频在线播放 | 天天干天天操天天做 | 极品国产91在线网站 | 狠狠色噜噜狠狠狠合久 | 精品国产人成亚洲区 | 天天操天天操天天 | 在线免费观看国产 | 不卡av在线 | 久久精品国产亚洲精品2020 | 国产成人精品综合久久久 | 精品亚洲午夜久久久久91 | 一区二区三区免费在线观看视频 | 国产精品综合久久久 | 天天干天天操天天拍 | 91麻豆精品国产91久久久无限制版 | 国产一在线精品一区在线观看 | 涩涩色亚洲一区 | 国产精品久久久久久久久蜜臀 | 在线观看爱爱视频 | 免费成视频 | 亚洲综合在线一区二区三区 | 色综合咪咪久久网 | 永久免费精品视频网站 | 黄色在线观看免费 | 三级a视频 | 狠狠狠狠狠色综合 | 4438全国亚洲精品在线观看视频 | 九九热1 | 9免费视频 | 久久精品国产成人精品 | 在线观看你懂的网站 | 麻豆国产在线播放 | 国产成人精品一区二区三区福利 | 天天操天天射天天插 | 亚洲资源在线网 | 成人黄色国产 | www五月 | 在线视频精品播放 | 日日操日日插 | 五月天中文字幕mv在线 | 国产最顶级的黄色片在线免费观看 | 九九精品无码 | 91精品一区国产高清在线gif | 久久婷婷激情 | 免费在线观看av不卡 | av片在线看| 2019天天干天天色 | 久久99国产精品自在自在app | 91在线看免费 | 成人 亚洲 欧美 | 欧美大片mv免费 | 国产一区二区视频在线 | 国产日韩精品在线 | 九九久久精品 | 国产成人免费网站 | 久久国产精品精品国产色婷婷 | 午夜在线观看一区 | 国产精品aⅴ | 亚洲激精日韩激精欧美精品 | 免费av在线网站 | 狠狠色狠狠色综合日日小说 | 国产成人一级电影 | 中文字幕在线视频免费播放 | 97热视频| 久久色在线观看 | 免费久久久久久久 | 精品亚洲一区二区 | 久久综合九色综合97婷婷女人 | 亚洲精品国产精品久久99 | 国产1区2区3区精品美女 | 亚洲 欧美 另类人妖 | 天天操夜 | 国产无套一区二区三区久久 | 国产高清不卡在线 | 国产青春久久久国产毛片 | 午夜国产成人 | 精品在线一区二区 | 免费看一级片 | 中文字幕在线观看日本 | 超碰在线个人 | www.成人精品 | 成年人免费在线观看 | 精品国产精品国产偷麻豆 | 亚洲成人av电影在线 | 蜜桃视频日韩 | av免费在线网站 | 91成人精品一区在线播放69 | 国产精品自产拍在线观看 | 在线观看免费高清视频大全追剧 | 久草在线资源观看 | 69亚洲乱| 国产精品免费久久久久 | 91九色视频 | 亚洲精品久久久蜜桃直播 | 国产精品一区二区三区四 | 91亚洲精品在线观看 | 黄在线免费观看 | 在线亚洲成人 | 亚洲激情综合网 | 美女视频一区 | 国产在线国偷精品产拍免费yy | 日韩精品一区二区三区电影 | 欧美一区二区三区在线观看 | 久久天堂网站 | 亚洲成年人av | 欧美韩国日本在线观看 | 毛片网在线观看 | 四虎在线免费视频 | 国产一区二区久久精品 | 国产高清在线观看 | 激情丁香久久 | 波多野结衣日韩 | 国产一级片视频 | 天堂av最新网址 | 91人人视频在线观看 | 欧美性久久久久久 | 99在线免费视频观看 | 亚洲人人网 | 午夜成人免费电影 | 中文字幕欧美日韩va免费视频 | 欧美国产日韩一区二区三区 | 国产免费观看视频 | 国产黄免费看 | 又黄又爽的免费高潮视频 | www.人人干 | www.色就是色 | 免费看色的网站 | 天天操夜 | 欧美日韩啪啪 | 中文字幕成人一区 | 日女人免费视频 | 亚洲精品乱码久久久久久久久久 | 中文字幕超清在线免费 | 天天爽人人爽夜夜爽 | 亚洲欧洲在线视频 | 免费看久久 | 久久精品国产亚洲精品 | 国产高清在线 | 区一区二在线 | 狠狠gao | 天天干天天干天天干 | 久久99久国产精品黄毛片入口 | 精品亚洲欧美一区 | 午夜 在线| 欧美国产日韩一区二区三区 | 中文资源在线官网 | 美女视频久久久 | 五月天色综合 | 热久久电影 | 久草资源在线 | 最近中文字幕在线中文高清版 | 日韩视频一区二区在线 | 99久久婷婷国产综合亚洲 | 亚洲精品久久久久久国 | 99精品欧美一区二区蜜桃免费 | 欧美a级在线免费观看 | 国产精品一区免费看8c0m | 日本婷婷色| 91免费观看网站 | 欧美成年人在线观看 | www.人人草 | 97精品国产97久久久久久粉红 | av福利电影 | 美腿丝袜av | 免费在线中文字幕 | 狠狠色丁香婷婷综合欧美 | 日本久久久久久久久 | 国产精品久久久久久久久久久久午夜 | 福利视频一区二区 | 亚洲国产视频a | 最新动作电影 | 欧美日韩一区二区久久 | 色综合久久66 | 五月婷婷在线视频观看 | 亚洲视频 一区 | 久青草视频 | 国产精品久久久久久欧美 | 亚洲传媒在线 | 国产精品综合在线 | 福利精品在线 | 日韩在线观看第一页 | 奇人奇案qvod | 国产精品久久久久久久久久久久午 | 色 免费观看 | 日韩在线观看你懂得 | 成人av亚洲 | 中文字幕在线观看日本 | 精品国产片 | 国产日韩视频在线 | 久久精品国产美女 | 99久久99久久精品 | www.亚洲视频| 久久久99精品免费观看app | 亚洲精品www.| 91在线看片| 国产精品一区二区三区视频免费 | 黄色av影院| 国产精品久久久av | 久久在线观看 | 97视频入口免费观看 | 中文字幕视频网站 | 亚洲va欧洲va国产va不卡 | 久久香蕉电影网 | 成人激情开心网 | 人人看人人爱 | 久久综合色一综合色88 | 91污在线 | 久久久91精品国产一区二区精品 | 日日干网 | 国产极品尤物在线 | 亚洲一区在线看 | 婷婷色中文字幕 | 99精品国产亚洲 | 91视视频在线直接观看在线看网页在线看 | 99精品热| 黄网av在线 | 在线观看成人小视频 | 国产成人久久久久 | 最近中文字幕高清字幕免费mv | 亚洲成人欧美 | 国产视频99 | 91麻豆产精品久久久久久 | 日韩精品一区二区三区丰满 | 91精品蜜桃 | 国产手机视频在线 | 麻豆综合网 | 中文字幕欧美激情 | 成人av网站在线播放 | 天天综合视频在线观看 | 久久国产二区 | 久久草在线视频国产 | 91视频免费网址 | 国产99在线 | 久久久久久久久久久久99 | 奇米影视8888在线观看大全免费 | av一区二区在线观看中文字幕 | 欧美在线观看视频 | 欧美高清视频不卡网 | 国产毛片久久 | 日本婷婷色 | 中文字幕资源站 | 欧美巨大荫蒂茸毛毛人妖 | 久久成年人网站 | 国产精品久久久久久久电影 | 国产九九精品视频 | 午夜视频在线观看一区 | 18国产精品白浆在线观看免费 | 国产综合久久 | 欧美日韩国产高清视频 | 中文字幕在线观看视频一区二区三区 | 超碰国产97 | 韩国av电影网 | 午夜18视频在线观看 | www.xxxx欧美 | av久久在线 | 99色婷婷 | 91免费高清观看 | 午夜电影久久久 | 婷婷激情久久 | 日韩亚洲国产中文字幕 | 99久久精品久久久久久动态片 | 婷婷午夜天 | 91精品国产麻豆国产自产影视 | 国产中的精品av小宝探花 | 精品国产电影一区二区 | 在线观看视频99 | 国产在线视频一区二区三区 | 国产一区二区在线免费观看 | 在线黄色av | 日韩高清免费无专码区 | 激情av在线播放 | 久久久资源| 西西www4444大胆视频 | 日本3级在线观看 | 怡春院av | 精品在线小视频 | 国产精品成人久久久久久久 | 国产女人18毛片水真多18精品 | 亚洲区精品视频 | 久久精品在线 | 人人爽人人爽人人爽人人爽 | 国产成人免费高清 | 中文字幕一区二区三区四区 | 午夜 久久 tv | 黄色一级在线视频 | 国产精品96久久久久久吹潮 | 天天天干| 精品视频99 | www.五月天激情 | 97在线视频免费 | 91精品国产福利在线观看 | 又黄又爽又色无遮挡免费 | 操高跟美女 | www.久草视频 | 日日夜夜精品免费观看 | 少妇做爰k8经典 | 久久精品系列 | 永久免费观看视频 | 一本一本久久a久久精品牛牛影视 | 日韩三级在线 | 久久特级毛片 | 国产亚洲成人网 | 免费又黄又爽的视频 | 91免费国产在线观看 | 热久久视久久精品18亚洲精品 | 亚洲黄色影院 | 91精品视频免费在线观看 | 日韩精品最新在线观看 | 精品在线观看免费 | 久久久久成人精品亚洲国产 | 97色婷婷人人爽人人 | 久久国产精品99精国产 | 97在线看| 91视频麻豆视频 | 国产亚洲欧美一区 | 久久精品视频免费观看 | 国产在线最新 | 国精产品999国精产品视频 | 欧美乱码精品一区二区 | 国产精品激情偷乱一区二区∴ | 五月开心综合 | av片子在线观看 | 久久久久亚洲最大xxxx | 欧美视频xxx | 激情欧美xxxx | 又色又爽的网站 | 天天爱天天操 | 中文字幕色婷婷在线视频 | 免费福利在线视频 | 免费视频 你懂的 | 九九九九精品九九九九 | 天天插天天色 | 亚洲夜夜网 | 国产一区私人高清影院 | 91重口视频 | 日韩在线一二三区 | 日韩精品视频免费专区在线播放 | 一区在线观看 | 久久久精品 一区二区三区 国产99视频在线观看 | 日韩av在线一区二区 | 亚洲年轻女教师毛茸茸 | 99热亚洲精品 | 久久久久久久久久久久久9999 | 日韩欧美高清在线 | 最近中文国产在线视频 | 日韩欧美精品在线观看视频 | 久草在线一免费新视频 | 天天草天天干天天 | 国产99久久久精品视频 | 免费看国产曰批40分钟 | 国产在线欧美 | 成人免费视频网站 | 麻豆精品在线视频 | 日韩欧美精品在线观看视频 | 最近中文字幕免费观看 | 日本一区二区高清不卡 | 久久国产午夜精品理论片最新版本 | 日韩色综合网 | 久久精品艹 | 精品一区二区亚洲 | 国精产品999国精产品岳 | 成人黄色电影视频 | 视频在线观看一区 | 日韩午夜高清 | 操操操日日 | 91人人网 | 中文字幕高清免费日韩视频在线 | 91精品网站 | 国产超碰在线 | 91亚洲国产 | 在线亚洲精品 | 欧美日韩国产一区二区在线观看 | 精品视频 | 国产一区播放 | 97精品国产91久久久久久 | 免费在线观看视频a | 蜜臀久久99精品久久久无需会员 | 91视频午夜 | 最新在线你懂的 | 婷婷av综合 | 国产韩国精品一区二区三区 | 国产午夜精品av一区二区 | 欧美极度另类性三渗透 | 波多野结衣电影一区二区三区 | 99资源网| 日韩欧美国产精品 | 国产午夜精品一区二区三区欧美 | 在线之家免费在线观看电影 | 久久超碰在线 | 91成人免费看片 | 精品欧美一区二区三区久久久 | 久久黄色网址 | 免费国产在线精品 | 国产成人精品亚洲精品 | 久黄色| 欧美 亚洲 另类 激情 另类 | 免费日韩一区二区 | 911久久香蕉国产线看观看 | 视频国产在线观看18 | 国产精品va视频 | 日韩高清毛片 | 精品久久久久久久久亚洲 | 69国产成人综合久久精品欧美 | 天天操天天添天天吹 | 久久综合五月天婷婷伊人 | 国产高清免费观看 | 五月天综合色 | 久久国产精品99久久久久 | 伊甸园永久入口www 99热 精品在线 | 公开超碰在线 | 国产成人三级在线 | 又黄又爽又色无遮挡免费 | 九九热精| 国产精品视频大全 | 日韩一级电影在线观看 | 婷婷综合导航 | 久久99精品久久久久久 | 玖玖999| 亚洲国产网站 | 久久久国产精华液 | 亚洲一区日韩精品 | 免费开视频 | 免费人做人爱www的视 | 欧美va日韩va | 欧美日韩一区二区三区在线免费观看 | 亚洲激精日韩激精欧美精品 | 国产免费观看久久 | 久久国产综合视频 | 久久精品美女视频网站 | 国产天天综合 | 色噜噜日韩精品一区二区三区视频 | 手机成人av在线 | 激情视频综合网 | 在线观看视频精品 | 国产高清视频色在线www | 2021国产精品 | 色婷婷激情网 | 成人免费共享视频 | 久草资源免费 | 91热这里只有精品 | 四虎在线免费观看视频 | 亚洲精品美女久久久久网站 | 韩国av免费在线 | 久久久国产一区二区三区四区小说 | 国产精品成人在线 | 99久久爱 | 亚洲综合色av | 一区电影 | 视频在线播放国产 | 日韩av午夜 | 黄色免费网 | 在线精品观看 | 午夜视频在线观看网站 | 色婷婷视频在线观看 | 一级性视频 | 亚洲涩涩涩 | 丁香五月亚洲综合在线 | 在线成人小视频 | 亚洲视屏在线播放 | 国产成人精品一区二区三区免费 | av中文资源在线 | 狠狠狠色丁香婷婷综合激情 | 欧美a在线看 | 99电影 | 在线导航av | 97在线公开视频 | 女人18毛片a级毛片一区二区 | 狠狠久久伊人 | 激情视频一区二区三区 | 99色婷婷 | 超碰av在线免费观看 | 日韩精品免费在线观看视频 | 五月天国产精品 | 欧美亚洲免费在线一区 | 高清免费在线视频 | 色橹橹欧美在线观看视频高清 | 日韩高清不卡在线 | 色综合婷婷| 最近2019好看的中文字幕免费 | 日本成址在线观看 | 99视频播放 | 精品国产大片 | 激情网综合 | 国产尤物视频在线 | 91视频最新网址 | 一本色道久久综合亚洲二区三区 | 一区三区在线欧 | 超碰97在线看 | 999久久久久久久久 69av视频在线观看 | 国产精品爽爽爽 | 成人黄色影片在线 | 中文字幕久久精品亚洲乱码 | 久久精品a | 欧美久久久久久久久久久久 | av网站在线观看免费 | 天天视频色版 | 国产免费三级在线观看 | 麻豆传媒视频观看 | 在线视频 影院 | 亚洲精品动漫成人3d无尽在线 | 午夜在线免费视频 | 国产成人精品一区二区三区网站观看 | 日韩中文字幕视频在线观看 | 激情av在线播放 | 亚洲精品乱码久久久久久按摩 | 久久久久福利视频 | 999久久久国产精品 高清av免费观看 | 欧美精品亚洲精品日韩精品 | 四虎影视欧美 | 天堂视频中文在线 | 最新av在线播放 | 日本99久久 | 激情五月综合 | 免费看污片 | 色网av | 日韩电影一区二区在线 | 97超碰.com | 久久久久综合精品福利啪啪 | 欧美疯狂性受xxxxx另类 | 欧美性生爱 | 久久成人18免费网站 | 最新成人av | 精品亚洲视频在线 | 99热这里只有精品久久 | 日韩av在线影视 | 天天干天天操天天 | 91传媒视频在线观看 | 国产美女免费观看 | 亚洲国产精品激情在线观看 | www黄色大片| 一区二区三区日韩在线观看 | 日韩av成人 | 在线精品播放 | 精品欧美一区二区在线观看 | 91传媒91久久久 | 国产九色视频在线观看 | 中文字幕久久精品一区 | 成人a视频片观看免费 | 免费看三片 | 波多野结衣亚洲一区二区 | 精品国产欧美一区二区三区不卡 | 青草视频在线看 | 在线成人免费av | 香蕉成人在线视频 | 九色精品在线 | 亚洲精品综合欧美二区变态 | 午夜国产福利在线 | 成人免费视频网站 | 欧美成人h版在线观看 | 波多野结衣在线观看一区 | 免费合欢视频成人app | av中文字幕日韩 | 久久伊人国产精品 | 久久亚洲专区 | 中文字幕在线观看一区 | 99视频在线精品国自产拍免费观看 | 免费福利片2019潦草影视午夜 | 制服丝袜在线 | 午夜的福利 | 久久久国产视频 | 五月婷婷久久综合 | 欧美在线视频一区二区 | 91av国产视频 | 久久久久久美女 | 中文视频一区二区 | 国产精品久久久久久久久久妇女 | 久久蜜臀一区二区三区av | 17婷婷久久www| 国产成人久久久77777 | 91精品啪| 国产精品毛片久久久 | 国产黑丝一区二区 | 最近中文字幕免费视频 | 日本在线观看中文字幕 | 美女视频网 | 五月婷婷中文网 | 日韩中文字幕免费视频 | 六月丁香激情综合色啪小说 | 亚洲免费在线观看视频 | 婷婷丁香自拍 | 中文字幕成人在线观看 | 国产亚洲人成网站在线观看 | 亚洲国产福利视频 | 国产精品高清一区二区三区 | 国产视频一区二区在线观看 | 免费亚洲一区二区 | 日韩中文字幕第一页 | 三级黄色免费片 | 亚洲一级电影 | 国产中年夫妇高潮精品视频 | 日韩丝袜 | 97在线影视 | 国产一区二区三区 在线 | 在线不卡的av | 亚洲精品小视频在线观看 | 亚洲乱码在线观看 | 国产1区2区 | 久久免费美女视频 | 手机成人av | 精品国产伦一区二区三区观看说明 | 97久久久免费福利网址 | 91精品系列 | 四虎在线观看视频 | 久久草网 | 麻豆免费在线播放 | 日韩中文字幕第一页 | 日韩精品在线一区 | 又黄又爽又刺激 | 天天插日日射 | 伊人小视频 | 最新三级在线 | 日韩中文字幕免费在线观看 | 日韩理论视频 | 精品国产一区二区三区久久 | 久久久久夜色 | 9色在线视频 | 91 在线视频 | 久久精品视频免费 | 水蜜桃亚洲一二三四在线 | 黄色av一级片 | 91麻豆精品国产91久久久久久 | 手机在线小视频 | 超级碰碰免费视频 | 欧美日韩色婷婷 | 免费h精品视频在线播放 | 国产成人免费在线 | 国产欧美中文字幕 | 国产高清av| 黄色一级在线免费观看 | 亚洲美女视频在线 | 91黄色影视 | 国产精品久久久久久久久久新婚 | 高清不卡免费视频 | 亚洲视频 在线观看 | 国产美女搞久久 | 久久只精品99品免费久23小说 | 精品国产一区二区三区四区在线观看 | 亚洲第一区在线观看 | 欧美视屏一区二区 | 97在线视频免费 | 国产午夜精品一区二区三区嫩草 | 天天透天天插 | 成人av资源在线 | 欧美日韩高清在线观看 | 天堂av官网 | 在线观看av黄色 | 色爱区综合激月婷婷 | 国产日韩高清在线 | 国产精品一区二区在线看 | 97超碰精品 | 奇米影视8888在线观看大全免费 | 人人草在线视频 | 丁香婷婷综合激情五月色 | 亚洲精品国产品国语在线 | 国产精品嫩草影视久久久 | 亚洲日本va午夜在线影院 | 久久美女精品 | 亚洲精品影院在线观看 | 狠狠的干狠狠的操 | 成人国产精品 | 丁香花在线观看视频在线 | 亚洲国产97在线精品一区 | 超碰人人91 | 亚洲综合在线一区二区三区 | 一区二区三区不卡在线 | 一区二区欧美激情 | 看片网站黄色 | 久久黄色影视 | 成人午夜剧场在线观看 | 99精品一区二区 | 亚洲人毛片 | 在线免费观看视频一区 | 91九色在线播放 | 欧美福利网址 | 欧美淫aaa免费观看 日韩激情免费视频 | 亚洲精品在线二区 | 人成免费网站 | 97色在线视频| 黄色a级片在线观看 | 日韩电影一区二区在线 | 欧美色图88 | www.com.黄| 丁香婷婷在线 | 精品国产一区二区三区日日嗨 | 国产一区二区在线视频观看 | 九色91在线视频 | 国精产品满18岁在线 | 最近中文字幕高清字幕免费mv | 韩日av在线| 91久久久久久久一区二区 | 久久精品女人毛片国产 | 中文字幕乱码亚洲精品一区 | 免费男女羞羞的视频网站中文字幕 | 狠狠色丁香久久婷婷综合_中 | 国产一区二区三区高清播放 | 狠狠干夜夜爽 | 国产亚洲精品成人av久久影院 | 欧美精品久久久久久久久免 | 久久综合毛片 | 国产高清 不卡 | 亚洲精品一区中文字幕乱码 | 精品国产伦一区二区三区观看体验 | 亚洲成人第一区 | 国产精品粉嫩 | 91九色网站 | 亚洲1区在线 | 亚洲一区二区天堂 | 日韩a在线 | 精品亚洲成人 | 最近中文字幕免费av | 国产精品白浆视频 | 欧美综合在线视频 | 久久久久 | 在线91播放 | 欧美精品你懂的 | 韩国三级在线一区 | 美女网站一区 | wwwwwww色| 麻豆视频免费播放 | 免费黄a大片 | 丁香5月婷婷 | 久久天堂精品视频 | 91av蜜桃 | av不卡免费在线观看 | 亚洲专区欧美专区 | 精品久久久久久久久亚洲 | 国产三级午夜理伦三级 | 国内精品视频在线播放 | 国产亚洲精品成人av久久影院 | 特级大胆西西4444www | 欧美a级在线免费观看 | 亚洲第一av在线播放 | 亚洲国产日韩一区 | 日韩激情综合 | 婷婷在线网站 | 99在线视频免费观看 | 97超碰人人干 | 欧美一区二区在线 | 一级淫片a | 有码视频在线观看 | 深夜激情影院 | 欧美日韩中文国产一区发布 | 久久人人爽人人爽人人 | 国产丝袜制服在线 | 天天添夜夜操 | 亚洲综合在 | 国产免费视频一区二区裸体 | 9ⅰ精品久久久久久久久中文字幕 | 国产精品原创 | 日韩一级精品 | 久草爱视频 | www.久艹| 日韩精品一区在线观看 | 九九三级毛片 | 狠狠狠干 | 国产高清免费 | 国产精品欧美久久久久久 | 精品国产视频一区 | 正在播放日韩 | 深爱激情婷婷网 | www.狠狠操 | 国产成人亚洲在线观看 | 亚洲第一区在线播放 | 中文字幕免费久久 | 国内成人精品视频 | 色婷婷电影 | 国产小视频免费观看 | 色婷婷a| 黄色的片子 | 国产美女免费 | av资源免费观看 | 色综合久久久久久久久五月 | 欧美精品亚洲精品日韩精品 | 欧美二区在线播放 | 日韩在线中文字幕 | 欧美成人猛片 | 国产青草视频在线观看 | 精品久久久久久久久久 | 日韩免费在线一区 | 狠狠干五月天 | 亚洲色视频 | 久久久国产精品人人片99精片欧美一 | 在线观看电影av | 欧美一级艳片视频免费观看 | 国产精品一区欧美 | 国产精品欧美久久久久三级 | 久久国产精品久久精品国产演员表 | 91在线免费公开视频 | 国产精品视频app | 色小说av | 狠狠干夜夜操天天爽 | 日韩精品一区电影 | 亚洲欧美日韩一区二区三区在线观看 | 美女网站色在线观看 | 国产一区二区三区高清播放 | 在线免费观看成人 | 国产精品久久久久久吹潮天美传媒 | 日日夜夜天天射 | 成人av影视在线 | 国产精品18久久久久久不卡孕妇 | 伊人视频| 久操中文字幕在线观看 | 欧美一级裸体视频 | 亚洲第一色 | 日本女人的性生活视频 | 色就干| 99免费看片 | 国产精品6999成人免费视频 | 91精品国产91久久久久久三级 | 久久久国产精品一区二区中文 | 一区二区三区高清在线观看 | 顶级欧美色妇4khd | 久久综合久久伊人 | 国产精品一区欧美 | 午夜12点 | 少妇精69xxtheporn| av色综合网 | 中文字幕黄色网址 | 久久成人欧美 | 国产视频 亚洲视频 | 一级a性色生活片久久毛片波多野 | 五月综合 | 中文字幕免费高清在线 | 天堂av中文字幕 | 欧美在线视频二区 | 久久久亚洲麻豆日韩精品一区三区 | 亚洲专区 国产精品 | 激情图片久久 | av在线进入 | 国产精品久久久久9999吃药 | 高清不卡一区二区三区 | 久草网站 | 亚洲国产成人在线 | 日精品在线观看 | 久久精品99国产国产精 | 亚洲精品免费观看视频 | 中文av资源站 | 精品九九九九 | 久久精品免费观看 | 亚洲成av人电影 | 欧美一区二区免费在线观看 | 欧美日韩国产一二 | 午夜av在线 | 一区电影| 日批视频 | 欧美电影黄色 | 国产精品久久久久久久免费大片 | 免费观看一级一片 | 国产精品一区二区果冻传媒 | 日韩精品专区在线影院重磅 | 久久精品一区二区三区中文字幕 | 91精品国产麻豆 | 7799av| 国产一区二区在线视频观看 | 精品一区二区三区久久 | 女人高潮特级毛片 | 超碰电影在线观看 | 超碰av在线播放 | 免费黄在线看 | 亚洲第一av在线播放 | 99在线精品观看 | 亚洲欧美国产精品va在线观看 | 在线精品亚洲一区二区 | 91av精品 | 成人免费一级 | 91色综合| 亚洲伦理中文字幕 | 久久国产精品二国产精品中国洋人 | 九九爱免费视频 | 在线性视频日韩欧美 | 久久成视频 | 亚洲国产电影在线观看 | 激情五月婷婷激情 | 九九热视频在线播放 | 国产精品理论在线观看 | 操夜夜操 | 高清av影院 | 亚洲自拍偷拍色图 | 午夜视频在线观看一区二区三区 | 五月色综合 | 黄色av网站在线观看免费 | 欧美日韩国产二区三区 | 久久久精品国产一区二区 | 免费观看xxxx9999片 | 国产玖玖视频 | 国产精品免费久久久久影院仙踪林 | 久久99热这里只有精品 | 中文字幕有码在线播放 | 国产成人在线免费观看 | 亚洲精品乱码久久久久久久久久 | 日韩高清国产精品 | 久久久免费 | 久久69精品久久久久久久电影好 | 少妇性aaaaaaaaa视频 | 91av在线免费视频 | 日韩高清黄色 | 久久好看免费视频 | 亚洲福利精品 | zzijzzij日本成熟少妇 | 国产一区在线视频 | 成人wwwxxx视频 | 91精品国产亚洲 | 免费日韩视| 精品一区二区在线免费观看 | 婷婷亚洲综合五月天小说 | 91大片网站 | 国产aaa大片 | 亚洲免费成人 | 99热精品视 | 国产麻豆剧果冻传媒视频播放量 | 97成人在线 | 1024手机在线看 | 久久久亚洲网站 | 高清不卡免费视频 | 精品一区91 | 国产精品久久嫩一区二区免费 | 亚洲成人软件 | av大全在线观看 | 国偷自产视频一区二区久 | 国产一区免费 | 丁香婷婷电影 | 欧美精品一二三 | 国产精品久久精品国产 | 超碰com| 日韩欧美69 | 五月宗合网| 婷婷色中文网 | 色婷婷激情 | 久久激情片 | 成人黄在线观看 | 久久久久久蜜av免费网站 | 成人免费网站在线观看 | 最新国产在线 | 91在线视频网址 | 久久国产精品一区二区三区四区 | 五月在线视频 | 制服丝袜成人在线 | 免费午夜在线视频 | 91中文字幕永久在线 | 色吊丝在线永久观看最新版本 | 国产午夜精品一区二区三区欧美 | 波多野结衣电影一区 | 欧洲一区二区三区精品 | 国产精品一区二区美女视频免费看 | 久久中文字幕导航 | 在线观看黄色国产 | 国产69精品久久久久9999apgf | 久久香蕉电影 | 中文字幕在线不卡国产视频 | 在线视频电影 | 国产一级不卡毛片 | 又黄又刺激视频 | 不卡在线一区 | 五月开心激情 | 久久久国产精品视频 | 日韩在线高清视频 | 黄色官网在线观看 | 久久综合色播五月 | 日日爽日日操 | 九九九电影免费看 |