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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言哈希表uthash的使用方法详解(附下载链接)

發布時間:2023/12/14 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言哈希表uthash的使用方法详解(附下载链接) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. uthash簡介
    • 2. uthash的使用
      • 2.1 定義結構體
      • 2.2 添加
      • 2.3 查找
      • 2.4 替換
      • 2.5 刪除
      • 2.6 循環刪除
      • 2.7 刪除哈希表所有元素
      • 2.8 計算哈希表元素個數
      • 2.9 遍歷哈希表中的所有項目
      • 2.10 排序哈希表
      • 2.11 完整代碼
    • 3. 鍵值的各種類型舉例
      • 3.1 整型鍵值
      • 3.2 字符串鍵值
      • 3.3 指針鍵值
      • 3.4 結構體鍵值
    • 4. 常用宏參考
      • 4.1 類型宏
      • 4.2 通用宏
      • 4.4 參數說明

1. uthash簡介

??由于C語言本身不存在哈希,但是當需要使用哈希表的時候自己構建哈希會異常復雜。因此,我們可以調用開源的第三方頭文件,這只是一個頭文件:uthash.h。我們需要做的就是將頭文件復制到您的項目中,然后:#include “uthash.h”。由于uthash僅是頭文件,因此沒有可鏈接的庫代碼。

??使用uthash添加,查找和刪除通常是常數時間的操作,此哈希的目標是簡約高效。它大約有1000行C。它會自動內聯,因為它是作為宏實現的。

??uthash還包括三個額外的頭文件,主要提供鏈表,動態數組和字符串。utlist.h為C結構提供了鏈接列表宏。utarray.h使用宏實現動態數組。utstring.h實現基本的動態字符串。

??github下載鏈接:https://github.com/troydhanson/uthash

2. uthash的使用

2.1 定義結構體

??這里我們將id作為一個索引值,也就是鍵值,將name作為value。

#include "uthash.h" struct my_struct {int id; /* key */char name[10];UT_hash_handle hh; /* makes this structure hashable */ }; /*聲明哈希為NULL指針*/ struct my_struct *users = NULL; /* important! initialize to NULL */

??注意:一定要包含UT_hash_handle hh;hh不需要初始化。它可以命名為任何名稱,但是我們一般都命名為hh。

2.2 添加

??HASH_ADD_INT表示添加的鍵值為int類型

??HASH_ADD_STR表示添加的鍵值為字符串類型

??HASH_ADD_PTR表示添加的鍵值為指針類型

??HASH_ADD表示添加的鍵值可以是任意類型

void add_user(int user_id, char *name) {struct my_struct *s;/*重復性檢查,當把兩個相同key值的結構體添加到哈希表中時會報錯*/HASH_FIND_INT(users, &user_id, s); /* id already in the hash? *//*只有在哈希中不存在ID的情況下,我們才創建該項目并將其添加。否則,我們只修改已經存在的結構。*/if (s==NULL) {s = (struct my_struct *)malloc(sizeof *s);s->id = user_id;HASH_ADD_INT( users, id, s ); /* id: name of key field */}strcpy(s->name, name); }

??HASH_ADD_INT函數中,第一個參數users是哈希表,第二個參數id是鍵字段的名稱。最后一個參數s是指向要添加的結構的指針。

2.3 查找

struct my_struct *find_user(int user_id) {struct my_struct *s;s = (struct my_struct *)malloc(sizeof *s);HASH_FIND_INT( users, &user_id, s ); /* s: output pointer */return s; }

??在上述代碼中,第一個參數users是哈希表,第二個參數是user_id的地址一定要傳遞地址)。最后s是輸出變量。當可以在哈希表中找到相應鍵值時,s返回給定鍵的結構,當找不到時s返回NULL。

2.4 替換

??HASH_REPLACE宏等效于HASH_ADD宏,HASH_REPLACE會嘗試查找和刪除項目外。如果找到并刪除了一個項目,它還將返回該項目的指針作為輸出參數。

void replace_user(HashHead *head, HashNode *newNode) {HashNode *oldNode = find_user(*head, newNode->id);if (oldNode)HASH_REPLACE_INT(*head, id, newNode, oldNode); }

2.5 刪除

??要從哈希表中刪除結構,必須具有指向它的指針。(如果只有鍵,請先執行HASH_FIND以獲取結構指針)。

void delete_user(struct my_struct *user) {HASH_DEL(users, user); /* user: pointer to deletee */free(user); /* optional; it's up to you! */ }

??同樣,這里users是哈希表,user是指向我們要從哈希中刪除的結構的指針。

??刪除結構只是將其從哈希表中刪除,并非free 。何時釋放結構的選擇完全取決于自己;uthash永遠不會釋放您的結構

2.6 循環刪除

??HASH_ITER是一個宏定義,程序執行時被替換為一個循環。

void delete_all() {struct my_struct *current_user, *tmp;HASH_ITER(hh, users, current_user, tmp) {HASH_DEL(users,current_user); /* delete; users advances to next */free(current_user); /* optional- if you want to free */} }

2.7 刪除哈希表所有元素

??如果您只想刪除所有項目,但不釋放它們或進行每個元素的清理,則可以通過一次操作更有效地做到這一點:

HASH_CLEAR(hh,users);

??之后,列表頭(此處為users)將設置為NULL。

2.8 計算哈希表元素個數

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_16933601/article/details/107188223

unsigned int num_users; num_users = HASH_COUNT(users); printf("there are %u users\n", num_users);

??當users為NULL時,HASH_COUNT會返回0.

2.9 遍歷哈希表中的所有項目

void print_users() {struct my_struct *s;for(s=users; s != NULL; s=s->hh.next) {printf("user id %d: name %s\n", s->id, s->name);} }

??還有一個hh.prev指針,可用于從任何已知項開始向后迭代哈希。

??由于hh.prev和hh.next字段的緣故,可以在哈希中向前和向后迭代。可以通過重復跟隨這些指針來訪問哈希中的所有項目,因此哈希也是雙鏈表

2.10 排序哈希表

HASH_SORT( users, name_sort );

??第二個參數是指向比較函數的指針。它必須接受兩個指針參數(要比較的項目),并且如果第一個項目分別在第二個項目之前,等于或之后排序,則必須返回小于零,零或大于零的int。 (這與標準C庫中的strcmp或qsort使用的約定相同)。

int sort_function(void *a, void *b) {/* compare a to b (cast a and b appropriately)* return (int) -1 if (a < b)* return (int) 0 if (a == b)* return (int) 1 if (a > b)*/ }

??name_sort和id_sort的兩個排序函數示例。

int name_sort(struct my_struct *a, struct my_struct *b) {return strcmp(a->name,b->name); }int id_sort(struct my_struct *a, struct my_struct *b) {return (a->id - b->id); }void sort_by_name() {HASH_SORT(users, name_sort); }void sort_by_id() {HASH_SORT(users, id_sort); }

2.11 完整代碼

#include <stdio.h> /* gets */ #include <stdlib.h> /* atoi, malloc */ #include <string.h> /* strcpy */ #include "uthash.h"struct my_struct {int id; /* key */char name[10];UT_hash_handle hh; /* makes this structure hashable */ };struct my_struct *users = NULL;void add_user(int user_id, char *name) {struct my_struct *s;HASH_FIND_INT(users, &user_id, s); /* id already in the hash? */if (s==NULL) {s = (struct my_struct *)malloc(sizeof *s);s->id = user_id;HASH_ADD_INT( users, id, s ); /* id: name of key field */}strcpy(s->name, name); }struct my_struct *find_user(int user_id) {struct my_struct *s;s = (struct my_struct *)malloc(sizeof *s);HASH_FIND_INT( users, &user_id, s ); /* s: output pointer */return s; }void delete_user(struct my_struct *user) {HASH_DEL(users, user); /* user: pointer to deletee */free(user); }void delete_all() {struct my_struct *current_user, *tmp;HASH_ITER(hh, users, current_user, tmp) {HASH_DEL(users, current_user); /* delete it (users advances to next) */free(current_user); /* free it */} }void print_users() {struct my_struct *s;for(s=users; s != NULL; s=(struct my_struct*)(s->hh.next)) {printf("user id %d: name %s\n", s->id, s->name);} }int name_sort(struct my_struct *a, struct my_struct *b) {return strcmp(a->name,b->name); }int id_sort(struct my_struct *a, struct my_struct *b) {return (a->id - b->id); }void sort_by_name() {HASH_SORT(users, name_sort); }void sort_by_id() {HASH_SORT(users, id_sort); }int main(int argc, char *argv[]) {char in[10];int id=1, running=1;struct my_struct *s;unsigned num_users;while (running) {printf(" 1. add user\n");printf(" 2. add/rename user by id\n");printf(" 3. find user\n");printf(" 4. delete user\n");printf(" 5. delete all users\n");printf(" 6. sort items by name\n");printf(" 7. sort items by id\n");printf(" 8. print users\n");printf(" 9. count users\n");printf("10. quit\n");gets(in);switch(atoi(in)) {case 1:printf("name?\n");add_user(id++, gets(in));break;case 2:printf("id?\n");gets(in); id = atoi(in);printf("name?\n");add_user(id, gets(in));break;case 3:printf("id?\n");s = find_user(atoi(gets(in)));printf("user: %s\n", s ? s->name : "unknown");break;case 4:printf("id?\n");s = find_user(atoi(gets(in)));if (s) delete_user(s);else printf("id unknown\n");break;case 5:delete_all();break;case 6:sort_by_name();break;case 7:sort_by_id();break;case 8:print_users();break;case 9:num_users=HASH_COUNT(users);printf("there are %u users\n", num_users);break;case 10:running=0;break;}}delete_all(); /* free any structures */return 0; }

3. 鍵值的各種類型舉例

3.1 整型鍵值

??當鍵值為整型時,可以使用HASH_ADD_INT和HASH_FIND_INT。(對于所有類型的鍵,其他操作(例如HASH_DELETE和)HASH_SORT都是相同的)。

3.2 字符串鍵值

??當鍵值為字符串時,具體要使用那個函數取決于結構體中的鍵值為字符串數組還是字符串指針。 這一點很重要。當結構體中的鍵值為字符串數組時,使用HASH_ADD_STR。鍵值為字符串指針時使用HASH_ADD_KEYPTR。接下來給出兩個例子參考。

??當結構體中的鍵值為字符串數組時

#include <string.h> /* strcpy */ #include <stdlib.h> /* malloc */ #include <stdio.h> /* printf */ #include "uthash.h"struct my_struct {char name[10]; /* key (string is WITHIN the structure) */int id;UT_hash_handle hh; /* makes this structure hashable */ };int main(int argc, char *argv[]) {const char *names[] = { "joe", "bob", "betty", NULL };struct my_struct *s, *tmp, *users = NULL;for (int i = 0; names[i]; ++i) {s = (struct my_struct *)malloc(sizeof *s);strcpy(s->name, names[i]);s->id = i;HASH_ADD_STR( users, name, s );}HASH_FIND_STR( users, "betty", s);if (s) printf("betty's id is %d\n", s->id);/* free the hash table contents */HASH_ITER(hh, users, s, tmp) {HASH_DEL(users, s);free(s);}return 0; }

??當結構體中的鍵值為字符串指針時

#include <string.h> /* strcpy */ #include <stdlib.h> /* malloc */ #include <stdio.h> /* printf */ #include "uthash.h"struct my_struct {const char *name; /* key */int id;UT_hash_handle hh; /* makes this structure hashable */ };int main(int argc, char *argv[]) {const char *names[] = { "joe", "bob", "betty", NULL };struct my_struct *s, *tmp, *users = NULL;for (int i = 0; names[i]; ++i) {s = (struct my_struct *)malloc(sizeof *s);s->name = names[i];s->id = i;HASH_ADD_KEYPTR( hh, users, s->name, strlen(s->name), s );}HASH_FIND_STR( users, "betty", s);if (s) printf("betty's id is %d\n", s->id);/* free the hash table contents */HASH_ITER(hh, users, s, tmp) {HASH_DEL(users, s);free(s);}return 0; }

3.3 指針鍵值

#include <stdio.h> #include <stdlib.h> #include "uthash.h"typedef struct {void *key;int i;UT_hash_handle hh; } el_t;el_t *hash = NULL; char *someaddr = NULL;int main() {el_t *d;el_t *e = (el_t *)malloc(sizeof *e);if (!e) return -1;e->key = (void*)someaddr;e->i = 1;HASH_ADD_PTR(hash,key,e);HASH_FIND_PTR(hash, &someaddr, d);if (d) printf("found\n");/* release memory */HASH_DEL(hash,e);free(e);return 0; }

3.4 結構體鍵值

??在將項目添加到哈希或查找項目之前,必須將結構體鍵值中的元素清零。

#include <stdlib.h> #include <stdio.h> #include "uthash.h"typedef struct {char a;int b; } record_key_t;typedef struct {record_key_t key;/* ... other data ... */UT_hash_handle hh; } record_t;int main(int argc, char *argv[]) {record_t l, *p, *r, *tmp, *records = NULL;r = (record_t *)malloc(sizeof *r);/*結構體鍵值清零*/memset(r, 0, sizeof *r);r->key.a = 'a';r->key.b = 1;HASH_ADD(hh, records, key, sizeof(record_key_t), r);memset(&l, 0, sizeof(record_t));l.key.a = 'a';l.key.b = 1;HASH_FIND(hh, records, &l.key, sizeof(record_key_t), p);if (p) printf("found %c %d\n", p->key.a, p->key.b);HASH_ITER(hh, records, p, tmp) {HASH_DEL(records, p);free(p);}return 0; }

4. 常用宏參考

4.1 類型宏

HASH_ADD_INT(head, keyfield_name, item_ptr)HASH_REPLACE_INT(head, keyfiled_name, item_ptr,replaced_item_ptr)HASH_FIND_INT(head, key_ptr, item_ptr)HASH_ADD_STR(head, keyfield_name, item_ptr)HASH_REPLACE_STR(head,keyfield_name, item_ptr, replaced_item_ptr)HASH_FIND_STR(head, key_ptr, item_ptr)HASH_ADD_PTR(head, keyfield_name, item_ptr)HASH_REPLACE_PTR(head, keyfield_name, item_ptr, replaced_item_ptr)HASH_FIND_PTR(head, key_ptr, item_ptr)HASH_DEL(head, item_ptr)HASH_SORT(head, cmp)HASH_COUNT(head)

4.2 通用宏

HASH_ADD(hh_name, head, keyfield_name, key_len, item_ptr)HASH_ADD_BYHASHVALUE(hh_name, head, keyfield_name, key_len, hashv, item_ptr)HASH_ADD_KEYPTR(hh_name, head, key_ptr, key_len, item_ptr)HASH_ADD_KEYPTR_BYHASHVALUE(hh_name, head, key_ptr, key_len, hashv, item_ptr)HASH_ADD_INORDER(hh_name, head, keyfield_name, key_len, item_ptr, cmp)HASH_ADD_BYHASHVALUE_INORDER(hh_name, head, keyfield_name, key_len, hashv, item_ptr, cmp)HASH_ADD_KEYPTR_INORDER(hh_name, head, key_ptr, key_len, item_ptr, cmp)HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh_name, head, key_ptr, key_len, hashv, item_ptr, cmp)HASH_REPLACE(hh_name, head, keyfield_name, key_len, item_ptr, replaced_item_ptr)HASH_REPLACE_BYHASHVALUE(hh_name, head, keyfield_name, key_len, hashv, item_ptr, replaced_item_ptr)HASH_REPLACE_INORDER(hh_name, head, keyfield_name, key_len, item_ptr, replaced_item_ptr, cmp)HASH_REPLACE_BYHASHVALUE_INORDER(hh_name, head, keyfield_name, key_len, hashv, item_ptr, replaced_item_ptr, cmp)HASH_FIND(hh_name, head, key_ptr, key_len, item_ptr)HASH_FIND_BYHASHVALUE(hh_name, head, key_ptr, key_len, hashv, item_ptr)HASH_DELETE(hh_name, head, item_ptr)HASH_VALUE(key_ptr, key_len, hashv)HASH_SRT(hh_name, head, cmp)HASH_CNT(hh_name, head)HASH_CLEAR(hh_name, head)HASH_SELECT(dst_hh_name, dst_head, src_hh_name, src_head, condition)HASH_ITER(hh_name, head, item_ptr, tmp_item_ptr)HASH_OVERHEAD(hh_name, head)

4.4 參數說明

??hh_name:UT_hash_handle結構中字段的 名稱。俗稱 hh。

??head:結構指針變量,用作哈希的“頭”。如此命名是因為它最初指向添加到哈希中的第一項。

??keyfield_name:結構中鍵字段的名稱。(對于多字段鍵,這是鍵的第一個字段)。如果您不熟悉宏,則將字段名稱作為參數傳遞似乎很奇怪。請參閱注釋。

??key_len:鍵字段的長度(以字節為單位)。例如,對于整數鍵,它是sizeof(int),而對于字符串鍵,它是strlen(key)。

??key_ptr:對于HASH_FIND,這是指向要在哈希中查找的鍵的指針(由于它是指針,因此您不能在此處直接傳遞文字值)。對于 HASH_ADD_KEYPTR,這是要添加的項的鍵的地址。

??hashv:提供的鍵的哈希值。這是BYHASHVALUE宏的輸入參數,是 的輸出參數HASH_VALUE。如果您要重復查找相同的鍵,則重用緩存的哈希值可以優化性能。

??item_ptr:指向要添加,刪除,替換或查找的結構的指針,或迭代期間的當前指針。這是一個輸入參數HASH_ADD, HASH_DELETE和HASH_REPLACE宏,和用于輸出參數HASH_FIND 和HASH_ITER。(當HASH_ITER用于迭代時,tmp_item_ptr 是與item_ptr內部使用的類型相同的另一個變量)。

??replace_item_ptr:用于HASH_REPLACE宏。這是一個輸出參數,設置為指向替換的項目(如果沒有替換的項目,則設置為NULL)。

??cmp:指向比較函數的指針,該函數接受兩個參數(指向要比較的項目的指針),并返回一個int值,該值指定第一個項目應在第二個項目之前,等于還是之后排序(如strcmp)。

??condition:接受單個參數的函數或宏(指向結構的空指針,需要將其強制轉換為適當的結構類型)。如果應“選擇”結構以將其添加到目標哈希中,則函數或宏的值應為非零值。

??養成習慣,先贊后看!如果覺得寫的不錯,歡迎關注,點贊,在看,轉發,謝謝!

總結

以上是生活随笔為你收集整理的C语言哈希表uthash的使用方法详解(附下载链接)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

激情欧美国产 | 91视频免费看片 | 91人人插| 九九热久久久 | 免费人成在线观看 | 精品字幕在线 | 成人av电影在线观看 | 久久狠狠亚洲综合 | 欧美日韩精品在线观看视频 | 亚洲手机天堂 | 国产91精品看黄网站在线观看动漫 | 日本韩国欧美在线观看 | 蜜臀久久99精品久久久久久网站 | 99久久久久久久久 | 91九色国产在线 | 一区二区三区久久 | 久久电影网站中文字幕 | 国产日韩视频在线播放 | 在线观看av中文字幕 | 美女视频黄频大全免费 | av电影中文字幕 | 欧美一二三视频 | 国产在线观看你懂的 | 亚州av网站 | 2021国产在线 | 伊人色综合网 | 91视频在线免费 | 亚洲国产mv | 黄色av免费看 | 久久久午夜剧场 | 狠狠天天| 91视频3p| 亚洲一区二区三区四区在线视频 | 一区二区成人国产精品 | 国产1区2| 久久久精品免费观看 | 九九热视频在线播放 | 97色涩| 国产精品第 | 欧美日韩视频在线观看免费 | 成人久久免费 | 国产精品一区二区视频 | ,午夜性刺激免费看视频 | 色综合久久88色综合天天人守婷 | 久久高清免费视频 | 91精品一区二区三区蜜桃 | 色先锋av资源中文字幕 | 美女视频免费一区二区 | 免费黄色av电影 | 亚洲国产三级在线观看 | 亚洲小视频在线观看 | 国产精品久久99精品毛片三a | 久久久久一区二区三区 | 婷婷色五 | 日韩美在线 | 国产在线资源 | 国产精品成人自产拍在线观看 | 亚洲国产精品va在线看黑人 | 五月天婷婷在线播放 | 超碰在线观看99 | 狠狠色噜噜狠狠 | 成人影片在线免费观看 | 五月婷婷开心 | 一级黄色视屏 | av一区二区在线观看中文字幕 | 亚洲欧洲国产日韩精品 | 欧美日韩视频 | 日韩欧美综合在线视频 | 国产精品久久久久久久久久久久午夜 | 国内外成人在线视频 | 国产成人a v电影 | 亚洲综合在线播放 | 久久久久国产精品厨房 | 婷婷丁香在线视频 | 中文字幕观看视频 | 岛国一区在线 | 久久伊人综合 | 精品国产成人在线 | 白丝av在线 | 久久精品免费电影 | 韩国精品一区二区三区六区色诱 | 国产一卡二卡四卡国 | 极品久久久久久久 | 久久综合狠狠 | 黄污在线观看 | 中文字幕第| 国产精品一区免费观看 | 成人免费在线网 | 97色资源 | 亚洲成人精品av | 97av免费视频 | 国产精品一区二区三区视频免费 | 国产成人久久久77777 | 国产精品麻豆视频 | 人人添人人澡人人澡人人人爽 | 久久艹免费 | 在线观看中文字幕2021 | 欧美黑吊大战白妞欧美 | 五月婷婷丁香色 | 在线国产日韩 | 黄色三级免费观看 | 久久一区二区三区四区 | av在线色 | 在线观看一区二区精品 | 美女视频久久黄 | 一区二区不卡在线观看 | 高潮久久久久久 | 久久免费视频一区 | 久久久久久久久黄色 | 日韩精品一区电影 | 一区二区三区在线不卡 | 国产精品美女免费视频 | а天堂中文最新一区二区三区 | wwwwww国产 | 香蕉影视在线观看 | 日韩一三区 | 99精品久久只有精品 | 国产精品18久久久久久久 | 天天操天天操天天 | 99免费观看视频 | 91大片网站 | 国内精自线一二区永久 | 亚洲精区二区三区四区麻豆 | av在线免费网站 | 成人黄色大片 | 96av视频| 99 精品 在线 | 国产久视频 | 一色屋精品视频在线观看 | 天堂在线一区二区 | 玖玖视频 | 激情视频一区 | 国产美女视频免费 | 国产日韩欧美在线一区 | 成人资源网 | 亚洲成人黄色在线观看 | 国产高清久久 | 黄色成人av网址 | 久久一区二区三区国产精品 | 伊人天堂av | 日本高清中文字幕有码在线 | 精品久久1 | 免费在线观看av网站 | 在线欧美最极品的av | 亚洲精品裸体 | 日韩电影中文字幕在线 | 日韩电影在线观看中文字幕 | 免费观看国产精品 | 亚洲黄色av | 美女视频黄是免费的 | 人人草天天草 | 亚州精品成人 | 免费av电影网站 | 色综合天天视频在线观看 | 久久久激情视频 | 国产精品不卡在线播放 | 成人免费视频免费观看 | 亚洲在线视频播放 | 国产精品久久久久永久免费观看 | 亚洲美女精品区人人人人 | 丁香免费视频 | 啪啪小视频网站 | 激情久久久 | 国产高清在线 | 福利一区在线 | 欧洲成人av| 操操操日日 | 久久成人黄色 | 日韩成人在线免费观看 | 久久a热6| 久久久久女人精品毛片九一 | 欧美日韩视频在线观看一区二区 | 国产精品v欧美精品 | 久久久国产精品一区二区三区 | 欧美黑吊大战白妞欧美 | 日韩大片免费在线观看 | 亚洲性少妇性猛交wwww乱大交 | 欧美日韩国产精品爽爽 | 久久免费av电影 | 四虎影视精品成人 | 福利视频区 | 久久婷婷国产 | 亚洲精品国产欧美在线观看 | av黄色成人 | 国产精品福利无圣光在线一区 | 久久精选| 国产一区在线播放 | 国产一区二区成人 | 久久午夜精品 | 成人欧美一区二区三区在线观看 | 欧美精品在线观看一区 | 日韩一二区在线观看 | 国产视频中文字幕在线观看 | 热久久国产 | 欧美日韩在线观看一区二区 | 韩国av一区二区 | 日韩中文在线观看 | 久久成人麻豆午夜电影 | 午夜精品成人一区二区三区 | 午夜三级大片 | 免费观看性生活大片 | 亚洲色图激情文学 | 人人躁 | 91人人澡人人爽人人精品 | 日日操天天操夜夜操 | 久久精品一区二区 | 国产精品永久在线 | 亚洲精品在线一区二区三区 | 国产精品岛国久久久久久久久红粉 | 国产国产人免费人成免费视频 | 视频国产在线 | 91免费视频网站在线观看 | 五月天久久婷 | 国产中文字幕视频在线观看 | 天天操天天射天天添 | 免费黄色看片 | 美女福利视频一区二区 | av网站有哪些 | 天天干天天拍天天操天天拍 | 久久综合之合合综合久久 | 中文在线中文a | 久久私人影院 | www.久久久 | av一区在线播放 | 97精品超碰一区二区三区 | 日韩精品 在线视频 | 亚洲综合色丁香婷婷六月图片 | 久操久 | 久草在线视频首页 | 五月天婷婷在线播放 | free,性欧美 九九交易行官网 | 色婷婷中文 | 国产一二区免费视频 | 欧美综合久久久 | 亚洲高清久久久 | 日日夜夜骑 | 精品国产99 | 色婷婷亚洲 | 久久久受www免费人成 | 麻豆一精品传二传媒短视频 | 免费福利在线 | 久久a热6 | 激情综合网五月激情 | 在线午夜av | 激情久久一区二区三区 | 在线欧美小视频 | 黄色www免费 | 中文字幕在线观看完整版 | 色婷婷骚婷婷 | 国产一区在线视频观看 | 亚洲精品在线视频网站 | 亚洲清纯国产 | 久久久高清免费视频 | 中国一级片在线播放 | 日韩av一区二区三区在线观看 | 欧美天天干 | 五月导航 | 国产成人综合精品 | 免费在线一区二区 | 麻豆国产电影 | 美女视频黄免费的久久 | 成人免费在线播放视频 | 国产真实精品久久二三区 | 热久久99这里有精品 | 激情小说网站亚洲综合网 | 国产三级视频 | 国产不卡在线看 | av电影亚洲 | 国产精品xxxx18a99 | 精品国产乱码久久久久久久 | 国产在线视频一区 | 国产电影黄色av | 岛国大片免费视频 | 又黄又爽又刺激视频 | 国产成人精品一区在线 | 亚洲另类人人澡 | 亚洲精品视频免费在线观看 | 97在线观看视频国产 | 色综合久久88色综合天天免费 | 久久久久久久久影视 | 国产在线精品视频 | 99久久久久国产精品免费 | 麻豆传媒视频观看 | 亚洲国产精品推荐 | 国产精品美女久久久久aⅴ 干干夜夜 | 日韩电影一区二区在线 | 精品女同一区二区三区在线观看 | 91精品国产亚洲 | 欧美一区二区三区在线 | av日韩不卡| 欧美福利在线播放 | 精品在线免费观看 | 成人免费在线看片 | 国产中文字幕免费 | 激情av在线资源 | 国产亚洲一区二区在线观看 | 国产伦精品一区二区三区无广告 | 国产一级片免费视频 | 少妇性xxx | 精品一区在线 | 五月天久久久久 | 丁香一区二区 | 欧美大片www | 夜夜夜| 天天操天天操天天 | 91色亚洲| 亚洲六月丁香色婷婷综合久久 | 精品欧美小视频在线观看 | 97超级碰碰碰碰久久久久 | 精品国产一二区 | 国产99久久九九精品 | 免费黄色网址大全 | 超碰在线观看99 | 久久久久婷 | 一区二区三高清 | www激情com| 一区 二区 精品 | 欧美激情视频一二三区 | 综合网成人 | 日韩视频中文字幕在线观看 | 国产精品视频观看 | 在线观看av片 | 亚洲欧美日韩一区二区三区在线观看 | 国产污视频在线观看 | 久久免费看a级毛毛片 | 亚洲综合黄色 | 天天曰视频 | 少妇bbb搡bbbb搡bbbb | 欧美成人在线网站 | 日韩久久午夜一级啪啪 | 不卡视频在线看 | 国产精品99久久久久久久久久久久 | 久久精品一二三区白丝高潮 | 久久综合成人网 | 91香蕉视频黄 | 99色在线观看 | 在线观看成人毛片 | 91av免费看 | 精品国产一区二区三区男人吃奶 | 国产精品18久久久久白浆 | 亚洲精品在线免费观看视频 | 一区二区三区视频网站 | 欧美日一级片 | 丝袜美女在线观看 | 91成品人影院 | 欧美日韩一区二区久久 | 一区二区理论片 | 91传媒在线| 亚洲爱av| 91欧美精品 | 中文字幕在线播放第一页 | 精品美女国产在线 | 亚洲国产一区二区精品专区 | 日韩视频在线不卡 | 看v片 | 啪啪肉肉污av国网站 | 天天爱天天操天天射 | 手机成人av在线 | 五月婷婷色 | 欧美a级在线免费观看 | 高清美女视频 | 欧美国产日韩中文 | 国产黄a三级三级三级三级三级 | 国产小视频在线播放 | 丁香在线 | 亚洲国产精品成人av | 久久免费99精品久久久久久 | a天堂在线看| 成人黄色在线观看视频 | 一区二区三区福利 | 亚洲精品视频免费在线 | 国产婷婷一区二区 | 久久黄色网址 | 精品美女国产在线 | 欧美黄色成人 | 成人午夜剧场在线观看 | 亚洲综合色丁香婷婷六月图片 | 国产精品va在线观看入 | 国产九九精品视频 | 午夜精品久久久久久99热明星 | 在线免费中文字幕 | 亚洲闷骚少妇在线观看网站 | 精品99在线 | 久久福利 | 日本最新中文字幕 | 日韩专区一区二区 | 亚洲国产wwwccc36天堂 | 中文字幕在线观看视频一区二区三区 | 伊人电影天堂 | 国产欧美在线一区二区三区 | 国产精品毛片一区二区在线 | 激情婷婷在线观看 | 成人xxxx | www.狠狠干 | 五月激情亚洲 | 久久国产成人午夜av影院潦草 | 免费国产在线精品 | 手机看片午夜 | 欧美91片| 西西www4444大胆视频 | 国产一性一爱一乱一交 | 99久久精品免费看国产一区二区三区 | 亚洲h在线播放在线观看h | 青青草久草在线 | 国产精品久久久久久久久久久久久 | 九九综合在线 | 男女全黄一级一级高潮免费看 | 亚洲视屏在线播放 | 亚洲最大av网 | 亚洲激情电影在线 | 久久伊人八月婷婷综合激情 | 91精品色 | 一级免费黄色 | 日韩成人中文字幕 | 国产精品va | 99在线观看免费视频精品观看 | 91精品天码美女少妇 | 午夜精品福利一区二区 | 国产成人久久精品77777 | 99热这里只有精品8 久久综合毛片 | 麻豆久久一区 | 91片黄在线观| 久久黄色影视 | 精品久久久免费视频 | 在线免费观看国产视频 | 91精品国产综合久久婷婷香蕉 | 国产成人免费精品 | 五月天婷亚洲天综合网精品偷 | 免费看成人片 | 亚洲精品久久久蜜臀下载官网 | 中文字幕在线成人 | www.超碰 | 久久久久人人 | 国产精品普通话 | 中文字幕丝袜制服 | 国产三级精品三级在线观看 | 91视频大全 | 久久久久亚洲国产 | 伊人网综合在线观看 | 波多野结衣最新 | 久久免费电影网 | 亚洲香蕉在线观看 | 欧美日韩国产精品爽爽 | 天天干天天干天天干天天干天天干天天干 | 99国产在线视频 | 狠狠色噜噜狠狠狠狠2021天天 | 看黄色.com | 精品久久91 | 国产精品久久久久久久久久不蜜月 | 日韩欧美国产精品 | 国产精品久久久亚洲 | 黄色aaaaa | 国产成人综 | 91九色视频在线观看 | 黄色成人在线观看 | 玖玖在线看| 亚洲激情视频在线观看 | 999久久久欧美日韩黑人 | 国产69久久久| 中文字幕国语官网在线视频 | 韩国av免费观看 | 日韩高清成人在线 | 国产精品9区 | 51久久夜色精品国产麻豆 | 国产精品12345 | 久久久国产精品麻豆 | 久久看片网 | 最近中文字幕国语免费高清6 | 亚洲h视频在线 | 丁香视频全集免费观看 | 精品理论片 | 国产色在线视频 | 日韩毛片在线一区二区毛片 | 亚洲一区网站 | 久久精品看 | 久久99国产精品久久99 | 久久r精品| 天天天干天天射天天天操 | 天天色天天色 | 久草视频免费播放 | 日本不卡一区二区 | 国产玖玖精品视频 | 国产精品丝袜 | 午夜精品区 | 国产亚洲精品免费 | 久久久人人爽 | 欧美一级电影在线观看 | 国产视频69 | 91福利影院在线观看 | 国产自在线观看 | 日韩高清黄色 | 日韩欧美xxx| 2024av| 九九99靖品 | 激情综合网婷婷 | 伊人婷婷网 | 天堂av在线免费 | 天天插日日射 | 天天操天天操天天操天天操天天操 | 免费看三级| 免费精品国产va自在自线 | 亚洲免费在线播放视频 | 免费精品国产va自在自线 | 久久激情久久 | 五月天六月婷婷 | 丰满少妇对白在线偷拍 | 午夜av剧场 | 97超碰总站 | 在线成人免费 | 日韩在线免费高清视频 | 麻豆手机在线 | 久久久精品久久日韩一区综合 | 亚洲精品乱码白浆高清久久久久久 | 国产经典三级 | 日韩中文字幕一区 | 国产精品 国产精品 | 久久草 | 91九色视频网站 | 在线影院中文字幕 | 日韩电影在线观看一区二区三区 | 在线看黄色av | 人人干免费| 亚洲爱av | 亚洲天堂网站视频 | 国产中文字幕视频在线观看 | 国产视频不卡 | 最近免费中文字幕大全高清10 | 麻豆91网站 | 中文视频在线看 | 午夜国产一区二区三区四区 | 国产破处视频在线播放 | 成人av电影免费在线观看 | 国产高清在线观看 | a视频免费看 | 激情五月激情综合网 | 日韩成人免费在线电影 | 精品国产一区二区三区久久影院 | 国产91精品在线观看 | 91在线观看欧美日韩 | 97色免费视频 | 中文字幕在线视频一区二区 | 91九色最新 | www.久久久.cum | 色婷婷激情网 | 国产精品久久久久久久毛片 | 国产一区二区在线观看免费 | 色综合久 | 91精品在线免费观看视频 | 99国产精品久久久久久久久久 | 日韩网站在线免费观看 | 9色在线视频| 成人黄色中文字幕 | 国产在线一区观看 | 免费黄色一区 | 欧美日韩国产一二三区 | 五月天av在线 | 在线国产一区二区 | 精品视频专区 | 在线不卡a | 久久亚洲欧美日韩精品专区 | 天天干天天操天天干 | 国产99亚洲| 操操操av| 亚洲一区二区精品 | 免费视频一二三区 | 亚洲精品乱码久久久久v最新版 | 亚洲一级片在线观看 | 久久久精品网站 | 亚洲最新av网站 | 亚洲精品久久久久中文字幕二区 | 天天干亚洲 | 国产一区 在线播放 | 特级xxxxx欧美 | 精品国产欧美一区二区三区不卡 | www.国产毛片| 99av国产精品欲麻豆 | www.香蕉视频 | 在线国产精品视频 | 最新日韩在线 | 精品一区二三区 | 久久av在线播放 | 国产精品videossex国产高清 | 又色又爽的网站 | 日本午夜在线亚洲.国产 | 嫩小bbbb摸bbb摸bbb | 黄色免费电影网站 | 久久国产热 | 欧美精品国产综合久久 | 日本中文字幕在线一区 | 97看片网 | av丝袜美腿 | 午夜精品久久久久久中宇69 | 韩国精品在线 | 日韩一级成人av | 国产精品国产三级国产不产一地 | 免费色视频网址 | 日本公妇色中文字幕 | 日韩精品视频免费 | 日韩三级免费 | 久久激情小视频 | 久久久国产精品电影 | 五月婷婷激情 | www.久久久.com| 欧美亚洲免费在线一区 | 成人黄色电影免费观看 | 91激情小视频 | 精品国模一区二区 | 欧美 亚洲 另类 激情 另类 | 欧美污在线观看 | 亚洲人成精品久久久久 | 狠狠狠色丁香综合久久天下网 | 久久国产精彩视频 | 午夜精品久久久久99热app | 日本精品久久久久中文字幕 | 亚洲精品乱码久久久久久久久久 | 免费三级av | 成片免费观看视频大全 | 色香蕉在线视频 | 国产成人不卡 | 国产1区2区3区精品美女 | 97精品国产97久久久久久 | 国产美女精品久久久 | 人人射av| 天堂素人在线 | 国产天天综合 | 久久免费公开视频 | 欧美伦理电影一区二区 | 91禁看片| 久久精品视频在线观看 | 日韩av在线资源 | 亚洲国产日韩欧美 | 欧美亚洲xxx | 免费观看完整版无人区 | 看黄色91 | 亚洲日韩中文字幕 | 国产精品久久久久久久久久久久午夜片 | 中文字幕av一区二区三区四区 | 免费精品国产 | 最近高清中文字幕在线国语5 | 日韩啪视频 | 婷婷中文字幕综合 | 天天操天天射天天爱 | 日日婷婷夜日日天干 | 91精品久久久久 | 不卡视频国产 | 午夜国产成人 | 久久久99精品免费观看app | 播五月婷婷 | 国产精品手机在线观看 | 欧美一级日韩三级 | 欧美日韩国产一区二区三区 | 成人av电影在线 | 99视频在线精品免费观看2 | 国内精品99 | 亚洲国产免费 | 精品国产一区二区三区久久久久久 | 色吧av色av| 91网址在线观看 | 天天爱天天射天天干天天 | av网站手机在线观看 | 六月天色婷婷 | av在线影片| 成人久久亚洲 | 国产精品网站 | 五月天精品视频 | 日韩aa视频 | 国产91电影在线观看 | 色九九影院 | 99久久综合狠狠综合久久 | 国产精品嫩草影院99网站 | 国产在线视频一区 | 国产首页 | 又黄又爽又无遮挡的视频 | 99精品视频在线播放免费 | 99精品一区 | 黄色激情网址 | 亚洲精品videossex少妇 | 97品白浆高清久久久久久 | 五月在线视频 | 色视频网页 | 国产超碰在线观看 | 92中文资源在线 | 欧美做受69 | 亚洲国产高清在线观看视频 | 国产小视频免费在线网址 | 久久影院午夜论 | 国产精品久久嫩一区二区免费 | 久久国产精品偷 | 黄色成人av | 亚洲一二三区精品 | 久久久久久草 | 午夜国产福利在线观看 | 精品福利av | 黄色三级网站在线观看 | 欧美一级专区免费大片 | 有码一区二区三区 | 在线观看国产一区二区 | 婷婷色吧 | 日日夜夜骑 | 免费一级特黄录像 | 欧美日韩一区二区视频在线观看 | 日韩久久久久久 | 亚洲天堂网在线视频 | 99视频在线观看一区三区 | 国产精品成人免费一区久久羞羞 | 亚洲精品伦理在线 | 亚洲国产大片 | 国产伦理精品一区二区 | 精品欧美在线视频 | 色哟哟国产精品 | 麻豆视频免费在线播放 | 久久久久久久久久免费视频 | 亚洲成av人片在线观看无 | 五月天婷婷在线视频 | 国产精品网址在线观看 | 久久99免费视频 | 亚洲日日射 | 精品91视频| 黄色亚洲大片免费在线观看 | 伊人亚洲精品 | 婷婷久久精品 | 亚洲精品乱码久久久久久按摩 | 综合久久久 | 久久精品毛片 | 日韩.com| 国产91九色视频 | 中文字幕日韩精品有码视频 | 精品国产伦一区二区三区观看方式 | 国产少妇在线观看 | www.五月婷婷 | 亚洲精品国内 | 狠狠狠狠狠色综合 | 人人网av | 92精品国产成人观看免费 | 欧美日韩精品网站 | 最近2019年日本中文免费字幕 | 久久国产品 | 欧美一级专区免费大片 | 日日成人网 | 日韩成人中文字幕 | 亚洲精品黄网站 | 五月综合网站 | 亚洲人av免费网站 | 91黄视频在线 | 天天射天天干天天爽 | 天天操夜夜摸 | 成人黄色电影在线 | 久久爽久久爽久久av东京爽 | 久久99久久99精品免观看软件 | 欧美在线不卡一区 | 91成人在线免费观看 | 亚洲香蕉在线观看 | 天天爽天天爽 | 在线国产视频一区 | 国产伦理久久 | 一区二区三区在线观看免费 | 成年人网站免费在线观看 | 波多野结衣一区三区 | 女人18毛片90分钟 | 久久网址| 精品国产诱惑 | 四虎影视成人永久免费观看亚洲欧美 | 九色激情网 | 天天干夜夜擦 | 在线观看一级片 | 三级av黄色 | 精品国自产在线观看 | 欧美一区影院 | 国产又粗又猛又黄又爽 | 国产免费久久 | 国产视频1区2区 | 亚洲国产三级在线 | 国产一级91 | 免费视频网 | 亚洲国产欧美在线看片xxoo | 日本丰满少妇免费一区 | japanesexxxxfreehd乱熟 | 99免费在线视频观看 | 99精品视频一区二区 | 中文字幕一区在线 | 又黄又色又爽 | 亚州精品在线视频 | a视频在线看 | 亚洲aⅴ乱码精品成人区 | 人人看97| 在线观看视频国产 | 亚洲粉嫩av | 成年美女黄网站色大片免费看 | 久草在线综合网 | 很黄很污的视频网站 | 久久都是精品 | 91亚洲精品视频 | 色黄视频免费观看 | 99精品欧美一区二区三区黑人哦 | 欧美一二三区播放 | 精品福利片 | 亚洲专区 国产精品 | 天天色天天搞 | 国产高清免费视频 | 久久精品中文字幕免费mv | 国产不卡片 | 久久婷婷影视 | 免费观看成人网 | 天天干,夜夜爽 | 97超碰人人爱 | 久久国产色 | 成人av片在线观看 | 国产精品一区二区久久精品爱涩 | 五月花丁香婷婷 | 欧美男女爱爱视频 | 亚洲天堂社区 | 国产成人精品久久二区二区 | 日韩激情久久 | 色就干| 五月婷影院 | 亚洲黄色小说网 | 天天草天天干天天射 | 天天拍天天操 | 国产精品a久久久久 | 欧美视频网址 | 五月天色中色 | 国产精品久久久网站 | 亚洲精品高清一区二区三区四区 | 国产韩国日本高清视频 | 91精品久久久久久久久久入口 | 国产精品中文 | 免费在线黄 | 精品久久久精品 | 日韩在线观看网站 | 99国产成+人+综合+亚洲 欧美 | 国产传媒一区在线 | 五月婷婷,六月丁香 | 久草www | 五月激情久久 | 午夜性生活片 | 最新精品国产 | 成年人在线观看免费视频 | 黄色网大全 | 欧美日韩二区在线 | 国产精品久久久久久久免费观看 | 精品国产乱码久久久久久天美 | 黄色国产成人 | 一级做a爱片性色毛片www | 在线播放视频一区 | 欧洲亚洲女同hd | 在线观看视频你懂的 | 激情视频一区二区三区 | 最新日韩视频在线观看 | 伊人网av | 有没有在线观看av | 久久九九精品久久 | 激情综合久久 | 91视频在线观看下载 | 精品一区二区免费视频 | 久草网站在线 | 96av在线| 成人久久18免费网站麻豆 | 99视频在线免费 | 免费91麻豆精品国产自产在线观看 | 国产白浆在线观看 | 久久婷婷国产色一区二区三区 | 人人爽人人干 | 久久久久久欧美二区电影网 | 国产精品嫩草影院123 | 成人观看| 一区二区三区日韩视频在线观看 | 天天操夜夜想 | 日b视频国产 | 麻豆视频观看 | 一区二区三区精品久久久 | 日本福利视频在线 | 久久久久久久久久久影院 | 夜夜看av| 国内久久精品 | 亚洲精品 在线视频 | av高清在线 | 国产无遮挡又黄又爽馒头漫画 | 国产原创在线 | 三级a视频| 成人蜜桃视频 | 成人午夜影视 | 国产一区久久久 | 国产精品mv在线观看 | 免费亚洲成人 | 五月婷视频 | 91传媒在线观看 | 国产91精品看黄网站在线观看动漫 | 激情视频91 | 亚洲精品综合一二三区在线观看 | 色婷婷影视| 欧美最猛性xxxxx亚洲精品 | 一级c片 | 天天曰夜夜操 | 人人干人人干人人干 | 国内精品久久久久久久影视简单 | 久久午夜精品视频 | 久久99影院 | 久久久99国产精品免费 | 亚洲美女视频在线观看 | 天天射天天干天天插 | 国产免费资源 | 国产做aⅴ在线视频播放 | 中文字幕免 | 中文字幕在线观看免费高清电影 | 色偷偷88888欧美精品久久久 | 毛片.com| 亚洲一区二区三区精品在线观看 | 欧美色插 | 激情文学丁香 | 人人狠狠综合久久亚洲 | 综合色在线观看 | 日韩,精品电影 | 国产精品入口麻豆www | 最新av免费在线 | 成人av亚洲| av中文字幕网 | 日本一区二区免费在线观看 | 中文字幕资源网 国产 | 精品视频久久久久久 | 国产又粗又猛又色 | 99久久综合精品五月天 | 欧美日韩国内在线 | 国产一区二区精 | 一区二区三区免费在线观看视频 | 色妞久久福利网 | 狠狠色狠狠综合久久 | 日韩二区精品 | 亚洲春色综合另类校园电影 | 伊人va| 韩国av一区二区三区在线观看 | 五月激情久久 | 五月天婷婷在线视频 | 99婷婷狠狠成为人免费视频 | 99热超碰 | 精品视频久久久 | 久久视频免费在线观看 | 国产精品精品国产 | 国产精品久久久久久久久软件 | 91正在播放| 亚洲精品videossex少妇 | 国产黑丝一区二区 | 久久精品香蕉视频 | 这里只有精品视频在线 | 久久综合成人网 | 成人av电影免费在线播放 | 日韩激情精品 | 美女黄视频免费 | 久久久久久久久久久久久久av | 最近更新中文字幕 | 夜夜骑日日操 | 人人涩| 天天插狠狠干 | 亚洲天堂自拍视频 | 国产3p视频 | 久久久2o19精品| 欧美国产日韩在线观看 | 在线观看一 | 国产伦精品一区二区三区… | 好看的国产精品视频 | 九九热精品国产 | 天天操,夜夜操 | 久草在线免费在线观看 | 国产精品毛片一区视频 | 99热国产精品 | 月丁香婷婷 | 国产精品久久久电影 | 亚洲人成在线电影 | 精品国产午夜 | 91av观看| 91在线porny国产在线看 | 在线观看韩日电影免费 | 91福利社在线观看 | 欧美黄色高清 | 日本最新一区二区三区 | 天天爽人人爽 | 国产尤物一区二区三区 | 97久久久免费福利网址 | 欧美日韩一区二区视频在线观看 | 久久久久亚洲国产精品 | 亚洲精品一区中文字幕乱码 | 国产精品成人免费 | 日韩美在线观看 | 玖玖在线播放 | 在线中文字幕一区二区 | 久久精品国产免费观看 | 久久久久亚洲最大xxxx | 久久人人爽人人爽人人 | 久久久久免费观看 | 中文字幕在线电影 | 亚洲成人av片 | 99久久精品免费视频 | 成片视频免费观看 | 国产精品久久久久婷婷二区次 | av电影在线观看 | 久久亚洲电影 | 国产手机在线精品 | 青春草免费在线视频 | 在线va网站|