精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談基礎算法之AVL tree和splay tree(三)

開發 架構 算法
平衡二叉樹:上文我們只實現了單旋,但是實際中為了達到平衡很多是要做雙旋操作的。先來看一張雙旋后的一張圖,明顯右邊的圖查詢的時候會更便捷。

承接上文,我們繼續聊這個話題。

平衡二叉樹:AVL Tree(1962)

上文我們只實現了單旋,但是實際中為了達到平衡很多是要做雙旋操作的。

先來看一張雙旋后的一張圖,明顯右邊的圖查詢的時候會更便捷。

  整個過程

  下面我們就進行代碼實踐。

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. #define max(a,b)    (((a) > (b)) ? (a) : (b))  
  5.  
  6. typedef struct AvlNode{ 
  7.     int data; 
  8.     struct AvlNode *left_child, *right_child; 
  9. } AvlNode; 
  10.  
  11. AvlNode *root; 
  12.  
  13. /*    旋轉動作開始        */ 
  14. AvlNode *rotate_LL(AvlNode *parent){ 
  15.     AvlNode *child = parent->left_child; 
  16.     parent->left_child = child->right_child; 
  17.     child->right_child = parent; 
  18.     return child; 
  19.  
  20. AvlNode *rotate_RR(AvlNode *parent){ 
  21.     AvlNode *child = parent->right_child; 
  22.     parent->right_child = child->left_child; 
  23.     child->left_child = parent; 
  24.     return child; 
  25.  
  26. AvlNode *rotate_RL(AvlNode *parent){ 
  27.     AvlNode *child = parent->right_child; 
  28.     parent->right_child = rotate_LL(child); 
  29.     return rotate_RR(parent); 
  30.  
  31. AvlNode *rotate_LR(AvlNode *parent){ 
  32.     AvlNode *child = parent->left_child; 
  33.     parent->left_child = rotate_RR(child); 
  34.     return rotate_LL(parent); 
  35. /*    旋轉動作結束    */ 
  36.  
  37. int get_height(AvlNode *node){ 
  38.     int height = 0; 
  39.     if(node != NULL){ 
  40.         height = 1 + max(get_height(node->left_child), get_height(node->right_child)); 
  41.     } 
  42.     return height; 
  43.  
  44. int get_balance(AvlNode *node){ 
  45.     if(node == NULL) return 0; 
  46.     return get_height(node->left_child) - get_height(node->right_child); 
  47.  
  48. /*    平衡二叉樹    */ 
  49. AvlNode *balance_tree(AvlNode **node){ 
  50.     int height_diff = get_balance(*node); /* 平衡因子在-1到1之間*/ 
  51.  
  52.     if(height_diff > 1){ 
  53.         if(get_balance((*node)->left_child) > 0){ 
  54.             *node = rotate_LL(*node); 
  55.         }else
  56.             *node = rotate_LR(*node); 
  57.         } 
  58.     }else if(height_diff < -1){ 
  59.         if(get_balance((*node)->right_child) < 0){ 
  60.             *node = rotate_RR(*node); 
  61.         }else
  62.             *node = rotate_RL(*node); 
  63.         } 
  64.     } 
  65.     return *node; 
  66.  
  67. AvlNode *avl_add(AvlNode **root, int key){ 
  68.     if(*root == NULL){ 
  69.         *root = (AvlNode *)malloc(sizeof(AvlNode)); 
  70.         if(*root == NULL){ 
  71.             printf("內存分配失敗!\n"); 
  72.             exit(-1); 
  73.         } 
  74.  
  75.         (*root)->data = key; 
  76.         (*root)->left_child = (*root)->right_child = NULL; 
  77.     }else if(key < (*root)->data){ 
  78.         (*root)->left_child = avl_add(&((*root)->left_child), key); 
  79.         //balance_tree(root); 
  80.     }else if(key > (*root)->data){ 
  81.         (*root)->right_child = avl_add(&((*root)->right_child), key); 
  82.         //balance_tree(root); 
  83.     }else
  84.         printf("復制%d失敗!\n", key); 
  85.         exit(-1); 
  86.     } 
  87.  
  88.     return *root; 
  89.  
  90. AvlNode *avl_print(AvlNode *node){ 
  91.     if(node == NULL) return NULL; 
  92.  
  93.     printf("%d->", node->data); 
  94.  
  95.     avl_print(node->left_child); 
  96.     avl_print(node->right_child); 
  97.     return node; 
  98.  
  99. int main(){ 
  100.     avl_add(&root, 24); 
  101.     avl_add(&root, 17); 
  102.     avl_add(&root, 40); 
  103.     avl_add(&root, 8); 
  104.     avl_add(&root, 22); 
  105.     avl_add(&root, 18); 
  106.     avl_add(&root, 23); 
  107.  
  108.     printf("打印二叉樹\n"); 
  109.     avl_print(root); 
  110.     printf("\n"); 
  111.  
  112.     balance_tree(&root); 
  113.     printf("打印二叉樹\n"); 
  114.     avl_print(root); 
  115.     printf("\n"); 
  116.     return 0; 

 

                   

讓我們看看伸展樹!     

伸展樹(Splay Tree,1985)

伸展樹的基本原理:

   

 舉例

我抽取一部分lighttpd-1.4.31.tar.gz中的代碼,來講解 

想看具體的代碼實踐的,可以到如下位置觀看

我的代碼結構:

代碼部分

  1. /*~ splaytree.h~*/ 
  2. typedef struct tree_node{ 
  3.     struct tree_node *left, *right; 
  4.     int key;    /*  關鍵字  */ 
  5.     int size;   /*  結點數目    */ 
  6.     void *data; 
  7. } splay_tree; 
  8. /*我現在只寫這兩個方法*/ 
  9. splay_tree * splaytree_insert(splay_tree *t, int key, void *data); 
  10. splay_tree * splaytree_splay(splay_tree *t, int key); 
  11. #define node_size(x) (((x)==NULL) ? 0 : ((x)->size)) 

這個沒有必要多講,看注釋和方法名稱自然就知道干嗎的了!

  1. /* splaytree.c */ 
  2. #include "splaytree.h" 
  3. #include <stdio.h> 
  4. #include <stdlib.h> 
  5. #include <assert.h> 
  6. #define compare(i,j) ((i) - (j)) 
  7. splay_tree * splaytree_insert(splay_tree *t, int key, void *data){ 
  8.     splay_tree * new
  9.  
  10.     if (t != NULL) { 
  11.         t = splaytree_splay(t, key); 
  12.         if(compare(key, t->key) == 0){ /*   該結點已存在    */ 
  13.             return t; 
  14.         } 
  15.     } 
  16.     new = (splay_tree *) malloc (sizeof (splay_tree)); 
  17.     assert(new); 
  18.     if (t == NULL) { 
  19.         new->left = new->right = NULL; 
  20.     } else if (compare(key, t->key) < 0) { 
  21.         new->left = t->left; 
  22.         new->right = t; 
  23.         t->left = NULL; 
  24.         t->size = 1 + node_size(t->right); 
  25.     } else { 
  26.         new->right = t->right; 
  27.         new->left = t; 
  28.         t->right = NULL; 
  29.         t->size = 1 + node_size(t->left); 
  30.     } 
  31.     new->key = key; 
  32.     new->data = data; 
  33. new->size = 1 + node_size(new->left) + node_size(new->right); 
  34.     return new
  35. splay_tree * splaytree_splay(splay_tree *t, int key){ 
  36.     splay_tree N, *l, *r, *child; /*    臨時變量用于裝配*t使用  */ 
  37.     int cmp, l_size, r_size; 
  38.     if (t == NULL) return t; 
  39.     N.left = N.right = NULL; 
  40.     l = r = &N; 
  41.     l_size = r_size = 0; 
  42.     for (;;) { 
  43.         cmp = compare(key, t->key); 
  44.  
  45.         if (cmp < 0) { 
  46.             if(t->left == NULL) break
  47.             if (compare(key, t->left->key) < 0) { 
  48.                 child = t->left;                        /*  右旋    */ 
  49.                 t->left = child->right; 
  50.                 child->right = t; 
  51.                 t->size = 1 + node_size(t->left) + node_size(t->right); 
  52.                 t = child; 
  53.                 if(t->left == NULL) break
  54.             } 
  55.             r->left = t;                                /*  右鏈    */ 
  56.             r = t; 
  57.             t = t->left; 
  58.             r_size += 1 + node_size(r->right); 
  59.         } else if (cmp > 0) { 
  60.             if(t->right == NULL) break
  61.  
  62.             if (compare(key, t->right->key) > 0) { 
  63.                 child =  t->right; 
  64.                 t->right = child->left; 
  65.                 child->left = t; 
  66.                 t->size = 1 + node_size(t->left) + node_size(t->right); 
  67.                 t = child; 
  68.                 if(t->right == NULL) break
  69.             } 
  70.             l->right = t; 
  71.             l = t; 
  72.             t = t->right; 
  73.             l_size += 1 + node_size(l->left); 
  74.         } else { 
  75.             break
  76.         } 
  77.     } 
  78.     l_size += node_size(t->left); 
  79.     r_size += node_size(t->right); 
  80.     t->size = 1 + l_size + r_size; 
  81.  
  82.     l->right = r->left = NULL; 
  83.  
  84.     /*  校驗size數據    */ 
  85.     /*右孩子的左結點不計算在內*/ 
  86.     for(child = N.right; child != NULL; child = child->right){ 
  87.         child->size = l_size; 
  88.         l_size -= 1 + node_size(child->left); 
  89.     } 
  90.     for(child = N.left; child != NULL; child = child->left){ 
  91.         child->size = r_size; 
  92.  r_size -= 1 +node_size(child->right); 
  93.     } 
  94.     /*  裝配數據    */ 
  95.     l->right = t->left; 
  96.     r->left = t->right; 
  97.     t->left = N.right; 
  98.     t->right = N.left; 
  99.     return t; 

看到上面一坨代碼估計大家不知所云了?

我就針對性的講解一下。

>> 重點講講講核心算法splaytree_splay()方法吧!

這個if講通,那么另一個else if也好理解。

  1. if (cmp < 0) { 
  2.             if(t->left == NULL) break
  3.  
  4.             if (compare(key, t->left->key) < 0) { 
  5.                 child = t->left;                        /*  右旋    */ 
  6.                 t->left = child->right; 
  7.                 child->right = t; 
  8.                 t->size = 1 + node_size(t->left) + node_size(t->right); 
  9.                 t = child; 
  10.  
  11.                 if(t->left == NULL) break
  12.             } 
  13.             r->left = t;                                /*  右鏈    */ 
  14.             r = t; 
  15.             t = t->left; 
  16.             r_size += 1 + node_size(r->right); 
  17.         } 

這是一個右旋的過程。

  child = t->left

t->left = child->right; child->right = t;

 最后:t = child

這是一個右鏈的過程

 r->left = t;r=t;

 t = t->left

3>main.c

  1. #include <stdio.h> 
  2. #include "splaytree.h" 
  3. splay_tree * splaytree_print(splay_tree *t){ 
  4.     if(t != NULL){ 
  5.         printf("t->data:%d\t t->key:%d t->size:%d\n", *((int *)t->data), t->key, t->size); 
  6.         splaytree_print(t->left); 
  7.         splaytree_print(t->right); 
  8.     } 
  9. int main(){ 
  10.     splay_tree *root; 
  11.     root = NULL; 
  12.     int data1 = 1000; 
  13.     root = splaytree_insert(root, 20, &data1); 
  14.     int data2 = 200; 
  15.     root = splaytree_insert(root, 5, &data2); 
  16.     int data3 = 300; 
  17.     root = splaytree_insert(root, 3, &data3); 
  18.     int data4 = 100; 
  19.     root = splaytree_insert(root, 10, &data4); 
  20.     printf("打印結果*************\n"); 
  21.     splaytree_print(root); 
  22.  
  23.  
  24.     //這里應該有個數據查詢過程,但是我沒有寫。注意在調用的時候調用一下splay方法, 
  25.     //那么熱數據自然就跑到頂端了。 
  26.     printf("查詢方法中調用這個伸展函數之后,打印結果*************\n"); 
  27.     root = splaytree_splay(root, 3); 
  28.     splaytree_print(root); 
  29.     return 0; 

這里我沒有把查詢伸展樹的過程寫下來,只是強調一下,在查詢的過程中,只要調用這個核心方法,那么自然熱數據就跑到頂端了。

看一下過程

 

 

原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/10/16/2716641.html 

【編輯推薦】

  1. 大型網站后臺構建實踐
  2. 圖片存儲架構學習:緩存,架構師的美麗小三
  3. 淺談大型網站的算法和架構(二)
  4. 淺談大型網站的算法和架構
  5. 企業應用架構模式之工作單元模式
責任編輯:張偉 來源: 川山甲的博客
相關推薦

2022-10-30 10:03:20

B+數據庫數據

2024-02-27 07:35:55

B-TreeB+TreeMySQL

2019-11-26 15:12:08

數據存儲B+樹

2022-06-01 12:04:02

項目Webpack

2017-07-18 16:25:31

機器學習算法決策樹

2022-09-26 07:56:53

AVL算法二叉樹

2009-09-09 17:08:27

LINQ Expres

2023-10-10 11:02:00

LSM Tree數據庫

2011-08-16 09:13:45

tree中文man

2009-09-09 17:02:05

LINQ Expres

2023-01-04 08:33:31

Linuxtree命令

2022-10-29 08:44:39

分布式數據庫存儲

2010-10-12 16:50:14

MySQL Hash索

2011-11-24 21:12:35

ibmdw

2020-02-13 17:27:31

CAPPaxos 共識算法

2023-12-29 08:37:59

2021-06-28 07:01:50

Webpack 前端Tree shakin

2017-07-20 15:59:45

LinuxDevice Tree

2023-01-26 00:59:39

B-Treegolang度量衡

2022-02-10 14:23:16

WebpackJavaScript
點贊
收藏

51CTO技術棧公眾號

精品国产乱码一区二区三区四区| 国产亚洲欧洲高清| 水蜜桃色314在线观看| 国内爆初菊对白视频| 久久不射2019中文字幕| 这里只有精品在线播放| 中文字幕1区2区| 午夜精品成人av| 亚洲天堂精品视频| 国产综合18久久久久久| 一级久久久久久| 国产精品hd| 亚洲色无码播放| 午夜激情影院在线观看| 蜜臀久久精品| 一区二区免费在线播放| 欧美日韩喷水| 国产综合视频在线| 麻豆成人久久精品二区三区红| 欧美理论片在线观看| 亚洲码无人客一区二区三区| 日韩中文字幕在线一区| 日本电影亚洲天堂一区| 加勒比成人在线| 国产在线看片| 久久精品亚洲国产奇米99| 国产精品国产精品国产专区不卡| 88av在线视频| 久久精品在线| 午夜美女久久久久爽久久| 无码国产69精品久久久久同性| 日韩成人18| 欧美日韩国产中文| 日韩a在线播放| 9lporm自拍视频区在线| 亚洲精品久久久久久国产精华液| 欧洲一区二区日韩在线视频观看免费 | 淫片在线观看| 国产无人区一区二区三区| 久久久com| 日本高清视频免费看| 国产风韵犹存在线视精品| 国产精品自产拍在线观| 成人黄色免费网| 日韩国产欧美在线播放| 国产91亚洲精品| 久久久久久少妇| 中文高清一区| 国内精久久久久久久久久人| 久久国产精品二区| 亚洲老妇激情| 久久艳片www.17c.com| 免费黄色国产视频| 日韩一区二区在线| 日韩在线观看你懂的| 美国黑人一级大黄| 欧洲乱码伦视频免费| 国产亚洲视频在线| 日本性高潮视频| 欧美日韩久久精品| 色婷婷成人综合| 成人三级视频在线观看| 91精品国产调教在线观看| 丝袜美腿精品国产二区| 国产精品国产三级国产传播| 99视频精品视频高清免费| 精品国内产的精品视频在线观看| 登山的目的在线| 欧美 日韩 国产一区二区在线视频 | 午夜伦理在线| 亚洲天堂免费看| 91黄色在线看| 成人免费网站观看| 一本大道综合伊人精品热热| 久久精品免费网站| 视频欧美精品| 精品国产99国产精品| 中文字幕在线观看网址| 欧美色图一区| 欧美寡妇偷汉性猛交| 日韩精品一区二区不卡| 久热综合在线亚洲精品| 成人黄色片网站| 日批视频免费播放| 国产午夜精品福利| 四虎4hu永久免费入口| 国产精品高颜值在线观看| 日本高清视频一区二区| 一级 黄 色 片一| 久久悠悠精品综合网| 国产亚洲aⅴaaaaaa毛片| 亚洲人与黑人屁股眼交| 亚洲黄页一区| 国产欧美精品日韩精品| 亚洲国产精品久久久久久6q | 欧美一二三在线| 亚洲黄色免费在线观看| 久久裸体网站| 国内偷自视频区视频综合| 波多野结衣小视频| 福利一区福利二区| 深夜福利成人| 后进极品白嫩翘臀在线播放| 欧美在线免费视屏| 日本性生活一级片| 日本一区二区在线看| 久久久伊人日本| 91精品国产乱码久久久久| 99热这里都是精品| 中文字幕中文字幕在线中心一区| 182在线播放| 51精品国自产在线| 在线免费观看麻豆| 亚洲婷婷在线| 成人黄色av网站| 春暖花开成人亚洲区| 亚洲午夜av在线| 精品久久久99| 国产精品欧美日韩一区| 欧美精品福利在线| 国产免费黄色大片| 国产欧美日韩不卡| 欧美日韩国产精品激情在线播放| 欧美一区在线观看视频| 色天天综合狠狠色| 久久久久久久亚洲| www.成人在线| 国产在线视频综合| 国产色99精品9i| 自拍亚洲一区欧美另类| 日韩欧美国产另类| 久久女同性恋中文字幕| 妞干网在线视频观看| 97久久综合区小说区图片区| 久久精品久久久久久| 亚洲天堂手机版| 国产拍揄自揄精品视频麻豆| 爱福利视频一区二区| 成人影院中文字幕| 久久99热精品这里久久精品| 国产乱淫av片免费| 国产欧美一区二区在线观看| 国内外成人激情视频| 欧美人妖视频| 97av在线影院| 神马久久高清| 狠狠色噜噜狠狠狠狠97| 黄色性生活一级片| 国产一区导航| 欧美xxxx黑人又粗又长精品| av电影一区| 亚洲欧美日韩在线高清直播| 日日噜噜噜噜人人爽亚洲精品| 91在线观看一区二区| 国产美女网站在线观看| 嫩草国产精品入口| 青草青草久热精品视频在线网站| 青青草视频免费在线观看| 欧美丝袜一区二区| 91视频在线网站| 日韩黄色小视频| 在线成人av电影| 欧洲精品99毛片免费高清观看| 九九精品视频在线| 欧美视频在线观看一区二区三区| 婷婷综合另类小说色区| 香蕉网在线播放| 首页国产欧美久久| 亚洲伊人婷婷| 视频二区欧美毛片免费观看| 久久青草福利网站| 深夜福利在线观看直播| 色国产综合视频| 九一在线免费观看| 国产精品一区久久久久| 成人黄色av片| 精品亚洲成人| 91日韩久久| 色偷偷色偷偷色偷偷在线视频| 日韩精品免费看| 中文字字幕在线中文乱码| 国产精品第13页| 先锋资源在线视频| 在线午夜精品| 中文字幕日韩一区二区三区 | 欧美mv日韩mv亚洲| 日韩毛片一区二区三区| 国产精品天美传媒| 日本精品一二三区| 日韩精品国产欧美| 91大学生片黄在线观看| 香蕉久久夜色精品国产使用方法| 国产精品第2页| 福利在线导航136| 亚洲一级片在线看| 亚洲AV无码国产精品午夜字幕| 欧美日韩一区二区在线| 国产男女猛烈无遮挡在线喷水| av资源网一区| 天天干天天色天天干| 一区二区日本视频| 最新视频 - x88av| 九九免费精品视频在线观看| 亚洲自拍av在线| 欧美不卡高清一区二区三区| 久久99久国产精品黄毛片入口| wwwxxx在线观看| 亚洲护士老师的毛茸茸最新章节 | 老司机成人影院| 欧美成年人视频网站| 欧美日韩国产亚洲沙发| 日韩欧美三级在线| 中文字幕人妻一区二区三区视频| 婷婷久久综合九色综合绿巨人| 免费精品在线视频| 久久久久久亚洲综合影院红桃| 日本55丰满熟妇厨房伦| 日韩精品一二三区| 激情六月天婷婷| 日韩欧美三级| 欧美一区二区视频17c| 超碰cao国产精品一区二区| 91精品国产自产在线| 欧美大片免费观看网址| 亚州国产精品久久久| jizz性欧美| 日韩一区在线视频| 北条麻妃在线| 亚洲摸下面视频| 亚洲aⅴ在线观看| 欧美va亚洲va| 性生活视频软件| 91精品国产免费久久综合| 亚洲天堂avav| 欧美日韩国产首页| 日韩乱码一区二区三区| 色屁屁一区二区| 免费看毛片网站| 日本韩国欧美在线| 天天干天天干天天操| 天天色图综合网| 亚洲日本视频在线观看| 欧美天天综合色影久久精品| 天堂网一区二区三区| 亚洲成a人v欧美综合天堂| 麻豆成人在线视频| 亚洲综合一区在线| 精品无码m3u8在线观看| 亚洲综合在线免费观看| 精品少妇久久久久久888优播| 亚洲午夜三级在线| 国产精品999久久久| 天天影视网天天综合色在线播放| 日本三级欧美三级| 疯狂蹂躏欧美一区二区精品| 波多野结衣国产| 欧美性猛交xxxx免费看| 无码人妻av一区二区三区波多野 | 熟妇人妻无乱码中文字幕真矢织江| 另类图片国产| 中文字幕国内自拍| 久久99国产精品久久99果冻传媒| 999久久久精品视频| 国产传媒日韩欧美成人| xfplay5566色资源网站| 99re66热这里只有精品3直播| 欧美高清性xxxx| 国产精品三级av在线播放| 日韩在线观看免| 亚洲一区二区3| www.com国产| 欧美日韩精品一区二区三区四区| 国产人妻精品一区二区三| 亚洲精品一线二线三线| 日本a一级在线免费播放| 在线观看国产成人av片| 成人在线免费看片| 午夜精品久久久久久久久久久久久 | 国产jzjzjz丝袜老师水多| 精品国产免费久久| 免费在线一级视频| 日韩网站免费观看| 好吊日av在线| 国产精品99蜜臀久久不卡二区| 精品午夜视频| 欧美日韩国产精品一卡| 久久久人成影片免费观看| 久久99中文字幕| 蜜桃视频一区二区三区在线观看| japan高清日本乱xxxxx| 久久久久久久国产精品影院| 成人在线观看小视频| 欧美日韩色婷婷| 国产精品久久久久久无人区| 亚洲国产成人在线视频| 男人天堂手机在线| 91wwwcom在线观看| 国产95亚洲| 日本免费高清一区| 欧美精品国产一区| 国产av人人夜夜澡人人爽| 国产成人8x视频一区二区| 日韩福利在线视频| 黄网站色欧美视频| 97人妻一区二区精品免费视频 | 免费大片黄在线| 欧美性受xxxx黑人猛交| 九九99久久精品在免费线bt| 日韩videos| 亚洲每日更新| 中文字幕 欧美 日韩| 欧美极品少妇xxxxⅹ高跟鞋| 日韩女同强女同hd| 4438成人网| 亚洲欧美视频一区二区| 2020国产精品视频| 98视频精品全部国产| 一区二区三区精品国产| 视频一区国产视频| 中文字幕一区三区久久女搜查官| 亚洲精品成人精品456| 一级做a爰片久久毛片16| 亚洲欧洲一区二区三区久久| 黄视频网站在线观看| 成人女人免费毛片| 欧美91精品| 久热在线视频观看| 欧美国产日产图区| 亚洲黄网在线观看| 亚洲欧美日韩精品久久奇米色影视| 91美女精品| 国产伦精品一区二区三区免费视频| 亚洲国产精品综合久久久| 国产福利在线免费| 亚洲国产成人在线| 综合久久中文字幕| 亚洲一区二区久久| 亚洲高清黄色| 青娱乐一区二区| 肉丝袜脚交视频一区二区| 亚洲一区二区三区蜜桃| 色一情一伦一子一伦一区| 深夜福利在线视频| 日韩av电影手机在线| 亚洲欧美校园春色| 欧美激情精品久久久久久小说| 久久夜色精品国产欧美乱极品| 日韩在线视频免费播放| 日韩精品高清在线| 超碰一区二区| 日韩av一级大片| 久久99国产精品久久| 免费成人深夜夜行网站| 欧美一区二区三区啪啪| 羞羞的视频在线看| 99久久国产免费免费| 亚洲啪啪91| 黄色正能量网站| 在线观看亚洲一区| 成人av毛片| 91香蕉电影院| 亚洲视频精品| 久久久精品人妻无码专区| 91福利视频久久久久| 日本福利在线| 99在线国产| 国产精品外国| 国产白丝一区二区三区| 欧美一级片在线| 涩涩网在线视频| 亚洲国产欧洲综合997久久| 国产呦精品一区二区三区网站| 欧美精品一区二区成人| 亚洲黄色在线观看| 忘忧草在线www成人影院| 中文字幕剧情在线观看一区| 粉嫩av亚洲一区二区图片| 天天干天天干天天| 中文字幕亚洲在线| 一区二区三区视频免费视频观看网站 | 免费不卡视频| 超碰国产精品久久国产精品99| 国产欧美丝祙| 99热6这里只有精品| 亚洲精品一线二线三线无人区| 欧美大片免费高清观看| 波多野结衣 作品| 久久久国产综合精品女国产盗摄| 国产在成人精品线拍偷自揄拍| 国模极品一区二区三区| 久久神马影院| 色呦呦一区二区| 欧美老肥妇做.爰bbww| 国产网站在线| 中文字幕欧美日韩一区二区| 久久香蕉国产线看观看99| 国产ts人妖调教重口男| 日韩av大片免费看| 亚洲午夜精品久久久久久app| 天天摸日日摸狠狠添|