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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

链表之TAILQ

發布時間:2025/3/15 ChatGpt 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表之TAILQ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • TAILQ 介紹
    • 頭文件
    • 舉例
    • 代碼分析
      • TAILQ_ENTRY 和 TAILQ_HEAD
      • TAILQ_INIT
      • TAILQ_INSERT_HEAD
      • TAILQ_INSERT_TAIL
      • TAILQ_INSERT_AFTER
      • TAILQ_INSERT_BEFORE
      • TAILQ_REMOVE
      • TAILQ_FOREACH
      • TAILQ_FOREACH_REVERSE
    • 參考資料

TAILQ 介紹

TAILQ 隊列是 FreeBSD 內核中的一種隊列數據結構,在一些著名的開源庫中(如 DPDK、libevent)有廣泛的應用。

TAILQ 和Linux中list的組織方式不一樣,后者是單純地將 struct list_head 作為鏈表的掛接點,并沒有用戶的信息,它們的差別如下圖。

Linux中的list只將struct list_head作為用戶元素的掛接點,因此在正向遍歷鏈表時,需要使用container_of這類接口才能獲取用戶的數據,而TAILQ由于tqe_next指針直接指向用戶元素,所以理論上,正向遍歷TAILQ比list更快.

頭文件

頭文件來自我最近看的項目:apache-mynewt-core-1.9.0\sys\sys\include\sys\queue.h

僅截取部分。

// "bsd_queue.h" 為了測試,我重新起了名字/** @(#)queue.h 8.5 (Berkeley) 8/20/94* $FreeBSD: src/sys/sys/queue.h,v 1.32.2.7 2002/04/17 14:21:02 des Exp $*//** Tail queue declarations.*/ #define TAILQ_HEAD(name, type) \ struct name { \struct type *tqh_first; /* first element */ \struct type **tqh_last; /* addr of last next element */ \ }#define TAILQ_HEAD_INITIALIZER(head) \{ NULL, &(head).tqh_first }#define TAILQ_ENTRY(type) \ struct { \struct type *tqe_next; /* next element */ \struct type **tqe_prev; /* address of previous next element */ \ }/** Tail queue functions.*/ #define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)#define TAILQ_FIRST(head) ((head)->tqh_first)#define TAILQ_FOREACH(var, head, field) \for ((var) = TAILQ_FIRST((head)); \(var); \(var) = TAILQ_NEXT((var), field))#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \for ((var) = TAILQ_LAST((head), headname); \(var); \(var) = TAILQ_PREV((var), headname, field))#define TAILQ_INIT(head) do { \TAILQ_FIRST((head)) = NULL; \(head)->tqh_last = &TAILQ_FIRST((head)); \ } while (0)#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\TAILQ_NEXT((elm), field)->field.tqe_prev = \&TAILQ_NEXT((elm), field); \else \(head)->tqh_last = &TAILQ_NEXT((elm), field); \TAILQ_NEXT((listelm), field) = (elm); \(elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ } while (0)#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \TAILQ_NEXT((elm), field) = (listelm); \*(listelm)->field.tqe_prev = (elm); \(listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ } while (0)#define TAILQ_INSERT_HEAD(head, elm, field) do { \if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \TAILQ_FIRST((head))->field.tqe_prev = \&TAILQ_NEXT((elm), field); \else \(head)->tqh_last = &TAILQ_NEXT((elm), field); \TAILQ_FIRST((head)) = (elm); \(elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ } while (0)#define TAILQ_INSERT_TAIL(head, elm, field) do { \TAILQ_NEXT((elm), field) = NULL; \(elm)->field.tqe_prev = (head)->tqh_last; \*(head)->tqh_last = (elm); \(head)->tqh_last = &TAILQ_NEXT((elm), field); \ } while (0)#define TAILQ_LAST(head, headname) \(*(((struct headname *)((head)->tqh_last))->tqh_last))#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)#define TAILQ_PREV(elm, headname, field) \(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))#define TAILQ_REMOVE(head, elm, field) do { \if ((TAILQ_NEXT((elm), field)) != NULL) \TAILQ_NEXT((elm), field)->field.tqe_prev = \(elm)->field.tqe_prev; \else \(head)->tqh_last = (elm)->field.tqe_prev; \*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ } while (0)

舉例

來自 https://manpages.courier-mta.org/htmlman3/tailq.3.html

#include <stddef.h> #include <stdio.h> #include <stdlib.h> #include "bsd_queue.h" //沒有用 Linux 的,換成了我自己的struct entry {int data;TAILQ_ENTRY(entry) entries; /* Tail queue */ };TAILQ_HEAD(tailhead, entry);int main(void) {struct entry *n1, *n2, *n3, *np;struct tailhead head; /* Tail queue head */int i;TAILQ_INIT(&head); /* Initialize the queue */n1 = malloc(sizeof(struct entry)); /* Insert at the head */TAILQ_INSERT_HEAD(&head, n1, entries);n1 = malloc(sizeof(struct entry)); /* Insert at the tail */TAILQ_INSERT_TAIL(&head, n1, entries);n2 = malloc(sizeof(struct entry)); /* Insert after */TAILQ_INSERT_AFTER(&head, n1, n2, entries);n3 = malloc(sizeof(struct entry)); /* Insert before */TAILQ_INSERT_BEFORE(n2, n3, entries);TAILQ_REMOVE(&head, n2, entries); /* Deletion */free(n2);/* Forward traversal */i = 0;TAILQ_FOREACH(np, &head, entries)np->data = i++;/* Reverse traversal */TAILQ_FOREACH_REVERSE(np, &head, tailhead, entries)printf("%i\n", np->data);/* TailQ deletion */n1 = TAILQ_FIRST(&head);while (n1 != NULL) {n2 = TAILQ_NEXT(n1, entries);free(n1);n1 = n2;}TAILQ_INIT(&head);exit(EXIT_SUCCESS); }

代碼分析

TAILQ_ENTRY 和 TAILQ_HEAD

struct entry {int data;TAILQ_ENTRY(entry) entries; /* Tail queue */ };TAILQ_HEAD(tailhead, entry);

TAILQ_ENTRY(entry) entries 中的 entry 由用戶指定,是外層大結構體的標簽,宏展開后就是下面的第 1,4,5 行中的 entry;entries 也由用戶指定,是無標簽結構體的成員名,宏展開后是下面第 6 行中的 entries

struct entry {int data;struct { struct entry *tqe_next; struct entry **tqe_prev; } entries; };struct tailhead { struct entry *tqh_first; struct entry **tqh_last; };

TAILQ_HEAD(tailhead, entry) 中的 tailhead 由用戶指定,是表頭結構體的標簽,如上面第 9 行的 tailhead,entry 要和 TAILQ_ENTRY 中的第一個參數保持一致。

struct entry **tqh_last 和 struct entry **tqe_prev 看起來有點詭異,為什么是二級指針?

改成一級的行不行?

如果把第 5 行改成 struct entry *tqe_prev,肯定不行,如果它的前面是頭節點怎么辦,頭節點的定義里面沒有 struct entry 啊!

再仔細看看,不管是頭節點還是普通節點,都有 struct entry * 這個類型,那就定義一個類型為 struct entry ** 的變量好了。這樣前插的時候就可以統一處理了,例子見 TAILQ_INSERT_BEFORE

總結一下,定義 TAILQ 的時候,有 3 個基本要素:

  • 結構體 struct entry:TAILQ_ENTRY() 的參數和 TAILQ_HEAD() 的第二個參數

  • 結構體 struct tailhead:TAILQ_HEAD() 的第一個參數

  • 變量 entries:緊跟在 TAILQ_ENTRY() 后面

    TAILQ_INIT

  • struct entry *n1, *n2, *n3, *np;struct tailhead head; /* Tail queue head */int i;TAILQ_INIT(&head); /* Initialize the queue */

    第 5 行,宏展開是

    (((&head))->tqh_first) = ((void *)0); (&head)->tqh_last = &(((&head))->tqh_first);

    意思是表頭的 tqh_first 為 NULL,tqh_last 指向自己的 tqh_first

    TAILQ_INSERT_HEAD

    n1 = malloc(sizeof(struct entry)); /* Insert at the head */TAILQ_INSERT_HEAD(&head, n1, entries);

    2:宏展開

    if (((((n1))->entries.tqe_next) = (((&head))->tqh_first)) != ((void *)0)) (((&head))->tqh_first)->entries.tqe_prev = &(((n1))->entries.tqe_next); else (&head)->tqh_last = &(((n1))->entries.tqe_next); (((&head))->tqh_first) = (n1); (n1)->entries.tqe_prev = &(((&head))->tqh_first);

    要把 n1 插入到隊列的第一個位置,需要修改哪些指針呢?

  • n1 的 entries.tqe_next
  • n1 的 entries.tqe_prev
  • (&head))->tqh_first
  • 之前第一個節點的 entries.tqe_prev
  • 如果 n1 是唯一的節點,還需要修改 (&head)->tqh_last
  • 好,我們看代碼是如何解決的。

    第 1 行解決了 1

    第 2 行解決了 4,這個要解釋一下,(((&head))->tqh_first)->entries.tqe_prev 表示插入 n1 之前的第一個節點的 tqe_prev,插入后,它應該指向 n1 的 tqe_next

    第 4 行解決了 5

    第 6 行解決了 3

    第 7 行解決了 2

    TAILQ_INSERT_TAIL

    n1 = malloc(sizeof(struct entry)); /* Insert at the tail */TAILQ_INSERT_TAIL(&head, n1, entries);

    把 n1 插入到隊列的末尾,需要修改哪些指針呢?

  • (&head)->tqh_last
  • n1 的 entries.tqe_next 應該為 NULL
  • n1 的 entries.tqe_prev
  • n1 插入之前最后一個節點(叫 n0 吧)的 entries.tqe_next
  • 第 2 行,展開宏

    (((n1))->entries.tqe_next) = ((void *)0); (n1)->entries.tqe_prev = (&head)->tqh_last; *(&head)->tqh_last = (n1); (&head)->tqh_last = &(((n1))->entries.tqe_next);

    第 1 行解決了 2

    第 2 行解決了 3

    第 3 行解決了 4,因為插入之前 (&head)->tqh_last 指向 n0 的 entries.tqe_next,對 (&head)->tqh_last 解引用,就得到變量 n0 的 entries.tqe_next,它應該等于 n1

    第 4 行解決了 1

    TAILQ_INSERT_AFTER

    n2 = malloc(sizeof(struct entry)); /* Insert after */TAILQ_INSERT_AFTER(&head, n1, n2, entries);

    把 n2 插入到 n1 的后面,需要修改哪些指針呢?

  • n1 的 entries.tqe_next
  • n2 的 entries.tqe_prev
  • n2 的 entries.tqe_next
  • 插入 n2 之前,如果 n1 后面有個 n3,則需要修改 n3 的 entries.tqe_prev;
  • 插入 n2 之前,如果 n1 是最后一個節點,則要修改 (&head)->tqh_last
  • 第 2 行宏展開:

    if (((((n2))->entries.tqe_next) = (((n1))->entries.tqe_next)) != ((void *)0)) (((n2))->entries.tqe_next)->entries.tqe_prev = &(((n2))->entries.tqe_next); else (&head)->tqh_last = &(((n2))->entries.tqe_next); (((n1))->entries.tqe_next) = (n2); (n2)->entries.tqe_prev = &(((n1))->entries.tqe_next);

    第 1 行解決了 3

    第 2 行解決了 4

    第 4 行解決了 5

    第 6 行解決了1

    第 7 行解決了 2

    TAILQ_INSERT_BEFORE

    n3 = malloc(sizeof(struct entry)); /* Insert before */TAILQ_INSERT_BEFORE(n2, n3, entries);

    把 n3 插入到 n2 的前面,需要修改哪些指針呢?

  • n3 的 entries.tqe_next

  • n2 的 entries.tqe_prev

  • n3 的 entries.tqe_prev

  • 插入 n3 之前,如果 n2 的前面有個 n1,則需要修改 n1 的 entries.tqe_next,

    即 (n1)->entries.tqe_next = n3;

  • 插入 n3 之前,如果 n2 是第一個節點,則要修改 (&head)->tqh_first,

    即 (&head)->tqh_first = n3;

  • 第 2 行宏展開

    (n3)->entries.tqe_prev = (n2)->entries.tqe_prev; (((n3))->entries.tqe_next) = (n2); *(n2)->entries.tqe_prev = (n3); (n2)->entries.tqe_prev = &(((n3))->entries.tqe_next);

    第 1 行解決了 3

    第 2 行解決了 1

    第 3 行解決了 4 和 5(馬上會解釋)

    第 4 行解決了 2

    解釋:

    插入 n3 之前,如果 n2 的前面有個 n1,

    那么 *(n2)->entries.tqe_prev 代表變量 (n1)->entries.tqe_next

    插入 n3 之前,如果 n2 是第一個節點,

    那么 *(n2)->entries.tqe_prev 代表變量 (&head)->tqh_first

    所以這兩種情況可以合并,寫成

    *(n2)->entries.tqe_prev = (n3);

    TAILQ_REMOVE

    TAILQ_REMOVE(&head, n2, entries); /* Deletion */free(n2);

    要把 n2 從鏈表移除,需要修改哪些指針呢?

  • n2 前面那個節點(假設是 n1)的 entries.tqe_next
  • n2 后面那個節點(假設是 n3)的 entries.tqe_prev
  • 如果 n2 是最后一個節點,那么要修改 (&head)->tqh_last
  • 第 1 行宏展開

    if (((((n2))->entries.tqe_next)) != ((void *)0)) (((n2))->entries.tqe_next)->entries.tqe_prev = (n2)->entries.tqe_prev; else (&head)->tqh_last = (n2)->entries.tqe_prev; *(n2)->entries.tqe_prev = (((n2))->entries.tqe_next);

    第 1 行判斷 n2 是否為最后一個節點

    第 2 行解決了 2

    第 4 行解決了 3

    第 5 行解決了 1,這個解釋一下。(n2)->entries.tqe_prev 指向的是 n1 的 entries.tqe_next,對 (n2)->entries.tqe_prev 解引用,得到變量 (n1)->entries.tqe_next,需要給它賦值為 n3 的地址,即 (n2)->entries.tqe_next;如果 (n2)->entries.tqe_prev 指向表頭的 tqh_first,第 5 行也是成立的

    TAILQ_FOREACH

    i = 0;/* Forward traversal */TAILQ_FOREACH(np, &head, entries)np->data = i++;

    第 2 行就是

    for ((np) = (((&head))->tqh_first); (np); (np) = (((np))->entries.tqe_next))

    比較簡單,不需要解釋。

    TAILQ_FOREACH_REVERSE

    /* Reverse traversal */TAILQ_FOREACH_REVERSE(np, &head, tailhead, entries)printf("%i\n", np->data);

    這次我們換個思路,不看展開后是什么,而是看看宏的定義

    #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \for ((var) = TAILQ_LAST((head), headname); \(var); \(var) = TAILQ_PREV((var), headname, field))#define TAILQ_LAST(head, headname) \(*(((struct headname *)((head)->tqh_last))->tqh_last))#define TAILQ_PREV(elm, headname, field) \(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))

    第 7 行,可以得到最后一個節點的地址。解釋一下:

    (head)->tqh_last 是最后一個節點的 entries.tqe_next 的地址,可是這個地址不是用戶想要的,用戶要的是節點的地址,就是大結構體( struct entry )的地址,所以只好曲線救國,如下圖,從 1 到 2 再到 3

    從 entries.tqe_next 的地址怎么得到 entries.tqe_prev 的值呢?

    其實也不難,雖然 struct entry 里面 entries 這個結構體變量沒有標簽,但是它的元素構成和 struct headname 完全一樣,都是一個 struct entry * 和 一個 struct entry **,所以可以把 entries.tqe_next 的地址強制轉換為 (struct headname *) 類型: (struct headname *)((head)->tqh_last)

    然后訪問它的 tqh_last 成員(也就是圖中的 prev):

    ((struct headname *)((head)->tqh_last))->tqh_last

    這樣就得到了前一個節點的 entries.tqe_next 的地址,再對它解引用:

    *(((struct headname *)((head)->tqh_last))->tqh_last)

    就得到了 entries.tqe_next 變量,這恰好是大結構體( struct entry )的地址

    我們再看 TAILQ_PREV 這個宏,道理類似。

    如圖所示,從 1 到 2 再到 3

    設當前節點的地址是 elm(圖中用最后這個節點來示意),(elm)->field.tqe_prev ,表示順著 1,得到它前面那個節點的 next 的地址,對這個地址強制轉換為 struct headname *,即

    (struct headname *)((elm)->field.tqe_prev)

    再訪問 prev,也就是順著 2,得到了 elm 前面的前面的節點的 next 地址

    即 ((struct headname *)((elm)->field.tqe_prev))->tqh_last

    對它解引用,就得到 elm 前面的前面的節點的 next,即

    *(((struct headname *)((elm)->field.tqe_prev))->tqh_last)

    它剛好是 3 這個指針表示的地址。

    其他的宏比較簡單,就不介紹了

    參考資料

    https://manpages.courier-mta.org/htmlman3/tailq.3.html

    TAILQ 隊列之一二事 - SegmentFault 思否

    總結

    以上是生活随笔為你收集整理的链表之TAILQ的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    精品国产伦一区二区三区观看说明 | 久久成人免费电影 | 国产福利一区二区三区视频 | 亚洲 综合 精品 | 欧美精品首页 | 日韩精品久久久久久久电影竹菊 | 中国一级特黄毛片大片久久 | 黄色毛片视频免费 | 成+人+色综合| 99国产一区二区三精品乱码 | 国产精品va在线观看入 | 久久久久亚洲精品国产 | 成人免费在线观看电影 | www.com.日本一级| 国产精品视频地址 | 81精品国产乱码久久久久久 | 亚洲三级在线 | 久艹视频在线观看 | 麻豆视频一区二区 | 91精品一| 天天操天天吃 | 国产精品久久久久久影院 | 国内精品久久久久久久久久久久 | 99这里只有精品视频 | 玖玖色在线观看 | 在线看黄色av | 久久视频这里有久久精品视频11 | 91精品视频免费看 | 免费国产黄线在线观看视频 | 国产精品国产三级国产aⅴ9色 | 国产精品手机视频 | 亚洲成成品网站 | 911免费视频 | 久久久精品欧美 | 精品人妖videos欧美人妖 | www.色综合.com | 免费在线观看日韩 | 99久久久国产精品免费观看 | 国产欧美精品一区二区三区四区 | 久久精品99国产精品日本 | 欧美人zozo| av 一区二区三区 | 91麻豆精品国产91久久久久久久久 | 亚洲精品视频第一页 | 欧美日韩另类在线观看 | 国产精品久久久久永久免费观看 | 99精品视频免费在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 在线 国产 日韩 | 夜夜操综合网 | 国产精品网在线观看 | 久久久免费播放 | 亚洲涩涩涩 | 在线观看成人福利 | 不卡精品视频 | 国产馆在线播放 | 在线播放你懂 | 日韩字幕 | 婷婷99| 亚洲视频1区2区 | 粉嫩av一区二区三区免费 | 九九一级片 | 欧美日韩中文国产一区发布 | 成人久久精品 | 美女视频黄网站 | 91探花在线 | 天天久久综合 | 国产资源在线播放 | 欧美一级电影在线观看 | 日韩成人在线免费观看 | 久久国产精品久久久 | 久久1电影院 | 日韩一区视频在线 | 国内精品久久久久影院一蜜桃 | 天天综合天天做天天综合 | 午夜精品视频免费在线观看 | 超碰人人在线 | 综合久久久久 | 四虎在线视频免费观看 | 久久久黄视频 | 天天射日 | 国产高清在线精品 | 99精品视频免费观看视频 | 久久久久久久久久久久久影院 | 中文字幕乱码电影 | 国产免费观看视频 | 色 免费观看 | 亚洲免费永久精品国产 | www.狠狠操.com | 国产在线精品播放 | 久久高清国产视频 | 日韩欧美不卡 | 在线精品一区二区 | 黄色精品久久久 | 狠狠做深爱婷婷综合一区 | 久久人人爽人人爽人人片av软件 | 在线观看成年人 | 日韩成人免费观看 | 夜夜操天天操 | 亚洲成人资源在线观看 | 天天操天天是 | 日日躁天天躁 | 超碰久热 | 欧美a级片免费看 | 国产91在线免费视频 | 亚洲综合激情五月 | av电影一区二区 | 欧美在线一 | 日韩 国产| 黄色一级免费网站 | 九九久久久久99精品 | 在线看免费 | av中文字幕在线播放 | 亚洲人成人天堂h久久 | 天天操天天干天天玩 | 国产视频在线观看免费 | 欧美日韩中文字幕视频 | 国产亚洲精品久久久网站好莱 | 在线观看日韩精品视频 | 九月婷婷人人澡人人添人人爽 | 黄色大全免费网站 | 四虎成人免费影院 | 成人欧美在线 | 久久精品亚洲精品国产欧美 | 在线亚洲精品 | 91精品啪在线观看国产线免费 | 亚洲精品视频在线观看视频 | 精品福利视频在线 | av日韩中文| 免费看日韩片 | 在线观看中文字幕dvd播放 | 在线观看精品视频 | 在线视频观看成人 | 日韩天堂在线观看 | 亚洲精品资源在线观看 | 永久免费观看视频 | 亚洲视屏在线播放 | 国产精品xxxx18a99 | 日韩在线视频精品 | 久久综合加勒比 | 国产日韩精品一区二区三区 | 欧美色噜噜 | 成人在线免费看 | 色久综合 | 天天插天天射 | 久久综合毛片 | 亚洲成aⅴ人片久久青草影院 | 国产伦理久久精品久久久久_ | 国产午夜精品久久久久久久久久 | 国产玖玖视频 | 亚洲作爱视频 | 免费色av | 久久精品视频在线播放 | 国产精品久久久久影院 | 有码中文字幕 | 亚洲精品456在线播放第一页 | 免费看的黄网站软件 | 天天爽天天做 | 亚洲精品中文在线观看 | 国产一级视频在线 | 91av色| 一区二区精品国产 | 久草在在线| 91精品婷婷国产综合久久蝌蚪 | 少妇性色午夜淫片aaaze | 欧美狠狠色| 波多野结衣电影一区 | 97国产大学生情侣白嫩酒店 | www亚洲国产| 丁香九月激情综合 | 美女av电影 | 日韩高清免费在线 | 欧美综合在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 精品国自产在线观看 | 九九爱免费视频 | 国产精品伦一区二区三区视频 | 午夜av影院 | 在线观看视频99 | 国产视频在线一区二区 | 中文字幕av免费在线观看 | 国产免费人人看 | jizz欧美性9 国产一区高清在线观看 | 亚洲欧美乱综合图片区小说区 | 97超碰在线免费观看 | 在线只有精品 | 日韩天堂网 | 国产手机在线视频 | 久久免费国产精品1 | av黄色av | 18久久久久久 | 超碰大片 | 国产视频在线观看一区 | 国产精品久久艹 | 99资源网 | 国产又粗又硬又爽的视频 | 色婷婷色| 日韩视频一二三区 | h网站免费在线观看 | 国产三级精品三级在线观看 | av不卡在线看 | 13日本xxxxxⅹxxx20| 91 在线视频 | 国产一级在线视频 | 九九九九九精品 | 在线观看mv的中文字幕网站 | 日日操天天射 | 人人爽人人爱 | 欧美亚洲成人免费 | 91亚色免费视频 | 国产一线二线三线在线观看 | 伊人天天色 | 超碰官网 | 天天射网站 | 狠狠网站 | 人人爽人人澡 | 日韩美在线观看 | 最新三级在线 | 日韩精品免费一区二区三区 | 久久国产精品精品国产色婷婷 | 久久精品国产一区二区电影 | 久久久久亚洲国产精品 | 久久免费av电影 | 在线观看av的网站 | 91视频麻豆 | 国产在线日韩 | 在线观看你懂的网站 | 成人三级av | 国产成人久久久77777 | www.综合网.com | 午夜久久久久久久久久影院 | 91看片网址 | 国产尤物一区二区三区 | 国产激情小视频在线观看 | 91中文字幕在线视频 | 又黄又刺激视频 | 一区二区精品久久 | 麻豆视频免费看 | 91麻豆网站 | 久久免费看 | 97超碰在线人人 | 亚洲aⅴ在线观看 | 日韩色爱 | 欧美日韩国产综合一区二区 | 欧美视频18 | 国产精品原创在线 | 99精品久久久久久久久久综合 | 国产在线精品播放 | 2022久久国产露脸精品国产 | 色噜噜在线观看视频 | 免费国产一区二区 | 精品国产伦一区二区三区观看体验 | 91精品免费在线视频 | 亚洲日本色 | 久久国内视频 | 超碰人人在线 | 亚洲国产欧洲综合997久久, | 欧美激情视频三区 | 久久国产精品99国产精 | 久久伊99综合婷婷久久伊 | 日日夜夜综合 | 91污污| 欧美人操人 | 亚洲九九爱 | 操操综合 | 欧洲精品在线视频 | 99精品视频在线播放免费 | 香蕉视频亚洲 | 成年人国产视频 | 成人蜜桃 | 日本少妇视频 | 最近中文字幕在线播放 | 粉嫩av一区二区三区四区在线观看 | 国产极品尤物在线 | 久久99婷婷 | 久久成人黄色 | 久久激情片 | 偷拍视频一区 | 日韩成人av在线 | 97视频免费在线观看 | 国产精品女主播一区二区三区 | 亚洲闷骚少妇在线观看网站 | 日韩高清av在线 | 国产精品久久久久一区二区三区 | 亚州人成在线播放 | 在线观看视频你懂得 | 日韩欧美综合在线视频 | 在线 国产 亚洲 欧美 | 亚洲精品高清在线观看 | 在线观看精品一区 | 亚洲三级影院 | 国产精品久久久久一区二区 | 色多多视频在线 | 亚洲激情一区二区三区 | 成+人+色综合| 天天曰视频 | 深爱婷婷 | 国产精品成人在线观看 | 日日干天天插 | 99精品视频免费看 | 亚洲精品国产精品乱码在线观看 | 四虎国产精品免费观看视频优播 | 精品国产欧美一区二区三区不卡 | 黄色av一级片 | 99亚洲精品 | 日韩中文在线视频 | 人人爽人人舔 | 日韩美在线观看 | 中文字幕 91 | 精品一区电影 | 亚洲日韩中文字幕 | 丁香六月婷婷综合 | 欧美日韩一级久久久久久免费看 | 麻豆国产在线播放 | 一级免费黄视频 | 日免费视频 | 亚洲a在线观看 | 日p视频在线观看 | 欧美一级性生活 | 探花视频在线观看+在线播放 | 国内99视频| 又黄又爽的免费高潮视频 | 在线成人免费电影 | 国产精品一区在线观看你懂的 | 中文字幕久久精品一区 | 操操日 | 亚洲精品一区二区在线观看 | 99精品国产视频 | 日韩精品免费在线播放 | 成人在线视频你懂的 | 色婷婷激情电影 | 狠狠插狠狠操 | 精品国产欧美一区二区三区不卡 | 91在线国产观看 | 青草视频免费观看 | av日韩中文| 免费人成在线观看网站 | 亚洲在线成人精品 | 中文字幕av日韩 | 亚洲精品国产精品国自产观看 | 日韩小视频| 午夜少妇一区二区三区 | 国产 字幕 制服 中文 在线 | 免费观看性生交大片3 | 成人精品视频久久久久 | 亚洲狠狠婷婷综合久久久 | 成人av免费播放 | 日本狠狠干| 国产一区二区三区四区在线 | 激情久久久久 | 1000部18岁以下禁看视频 | 91亚洲精品久久久中文字幕 | 日韩欧美91| 国产精选视频 | 久久精品综合 | 成人午夜影院 | 娇妻呻吟一区二区三区 | 97福利在线观看 | 免费99| 国产美女无遮挡永久免费 | 日韩黄色在线观看 | 国产精品一区二区三区视频免费 | 亚洲国产理论片 | 久久成人在线 | 国产精品九九九九九 | 国产黄色一级片在线 | 国产一级在线 | 在线观看岛国 | 黄色的视频网站 | 狠狠躁日日躁 | 激情av综合 | 婷婷久久综合网 | 99免费在线观看视频 | www操操| 免费看短| 国内免费久久久久久久久久久 | 91麻豆精品国产91久久久久久 | 久草在线视频精品 | 色偷偷人人澡久久超碰69 | 久久一线| 日本深夜福利视频 | 久久精品中文 | 在线成人国产 | 亚洲欧美日韩一级 | 中文字幕精品一区二区三区电影 | 国产精品一区欧美 | 久久婷婷一区二区三区 | 日韩精品在线观看视频 | 日韩电影久久久 | 久久久久久久久久久久久久av | 狠狠网亚洲精品 | 国产伦精品一区二区三区无广告 | aⅴ视频在线 | 成年人视频在线观看免费 | 欧美一级黄色视屏 | 日韩久久久久久久久久 | 中文字幕国产视频 | 午夜在线资源 | 欧美一级在线看 | 国产区欧美 | 日韩精品你懂的 | 国产精品久久久久久av | 中文字幕中文字幕在线中文字幕三区 | av中文字幕在线观看网站 | 国产综合福利在线 | 久久久久高清毛片一级 | 国产专区在线看 | 久久精品久久精品久久39 | 国产精品一区二区三区电影 | 亚洲成 人精品 | 日本高清xxxx | 日韩免费b | av中文在线影视 | 日日干干| 色老板在线视频 | 狠狠的操你 | 亚洲成色| 国产破处在线视频 | 久久成人综合视频 | 韩国一区二区在线观看 | 日韩在线观看网站 | 久久夜av | 黄色av免费电影 | 亚洲欧美视频一区二区三区 | av一级一片| 日韩区欠美精品av视频 | 青青河边草免费直播 | 欧美91精品久久久久国产性生爱 | 欧美亚洲精品一区 | 色中文字幕在线观看 | 国产一级片播放 | 国产精品一区二区免费看 | 国产精品9999久久久久仙踪林 | 色噜噜色噜噜 | 亚洲国产精彩中文乱码av | 激情视频网页 | 国产午夜三级一区二区三 | 精品国产一区二区三区久久影院 | 国产精品电影一区 | 国产 日韩 欧美 中文 在线播放 | 男女啪啪视屏 | 久久无码精品一区二区三区 | 在线视频中文字幕一区 | 国产一区二区三区在线 | 国产精品视频在线观看 | 91正在播放 | 在线欧美a | 精品一区久久 | 激情偷乱人伦小说视频在线观看 | 午夜久久久久久久久久久 | 久久人人97超碰国产公开结果 | 成人在线观看资源 | 日韩视频a| 国产人成在线视频 | 日本在线视频网址 | 久久99九九99精品 | 四虎5151久久欧美毛片 | 精品国产亚洲一区二区麻豆 | 色婷婷精品大在线视频 | 最近日本韩国中文字幕 | 午夜12点 | 国产精品欧美日韩在线观看 | 玖玖精品在线 | 97超碰福利久久精品 | 国产成人综合在线观看 | 日本午夜在线观看 | 天天爱天天舔 | 中文字幕在线观看三区 | 天堂av在线中文在线 | 久草在线手机视频 | 国产一级二级三级在线观看 | 九九九热精品 | 天天射天天搞 | 99久久精品午夜一区二区小说 | 黄色免费在线视频 | 美女网站视频免费都是黄 | 五月婷婷丁香激情 | 黄色福利视频网站 | 欧美激情综合五月色丁香小说 | 久久香蕉国产 | 国产精品免费高清 | 日韩精品高清视频 | 久久精品一区二区三区国产主播 | 国产精品精品国产婷婷这里av | 国产精品video爽爽爽爽 | 人人爽人人爽人人片av | 日本中文在线观看 | 国产专区视频在线 | 国产高清日韩欧美 | 日日干天天干 | 欧美极品一区二区三区 | 国产精品video爽爽爽爽 | 久久免费视频精品 | 碰超在线观看 | 国产a级免费 | 91久久久国产精品 | 中文字幕精品三区 | 美女网站视频色 | 在线观看中文字幕第一页 | 在线观看av黄色 | 午夜国产福利在线 | 在线观看日本高清mv视频 | 蜜臀久久99静品久久久久久 | 字幕网在线观看 | 婷婷激情综合五月天 | av在线免费在线观看 | 国产一区在线播放 | 99精品偷拍视频一区二区三区 | 色狠狠狠 | 久久久久久国产精品亚洲78 | 国内精品久久久 | 成人午夜网 | 亚洲免费视频在线观看 | 在线成人欧美 | 午夜精品一区二区三区免费视频 | 久久久久久久久久国产精品 | 久久久精品国产免费观看一区二区 | 玖玖在线精品 | 日韩精品一区二区三区中文字幕 | 国产在线欧美日韩 | 麻豆免费观看视频 | 日韩中文字幕电影 | 国产成人三级在线播放 | 天天视频亚洲 | 久久视频在线观看中文字幕 | 一区二区激情视频 | 五月婷婷综合激情 | 亚洲人人精品 | 精品中文字幕在线播放 | 久草香蕉在线视频 | 成人免费网站在线观看 | 碰超在线 | 欧美性极品xxxx做受 | 国产视频日韩视频欧美视频 | 97香蕉久久超级碰碰高清版 | 中文字幕资源在线 | 日韩三级一区 | 成人午夜电影久久影院 | 最近能播放的中文字幕 | 91在线小视频 | 九九免费观看全部免费视频 | 亚洲欧洲一区二区在线观看 | 天天天在线综合网 | 久草在线资源免费 | 天天干天天射天天插 | av成人黄色 | 嫩草伊人久久精品少妇av | 爱av在线网| 日韩精品欧美专区 | 亚洲视频在线看 | 国产精品久久久一区二区三区网站 | 久久久久国产精品午夜一区 | 在线欧美小视频 | 亚洲精品日韩av | 波多野结衣小视频 | 激情久久久久久久久久久久久久久久 | 麻豆mv在线观看 | 91日韩精品视频 | 国产精品中文在线 | 一级黄色电影网站 | 日韩电影中文,亚洲精品乱码 | 久久久久久久久影院 | 三级视频国产 | 色亚洲网 | 国产一级片在线播放 | 日韩中文字幕网站 | 免费亚洲黄色 | 91在线区| 国产精品高清一区二区三区 | 欧美一区在线观看视频 | 激情综合婷婷 | 国产成人精品av久久 | 黄色影院在线观看 | 国产一区私人高清影院 | 麻豆传媒视频在线播放 | 99热精品在线观看 | 国产九九精品视频 | 五月天激情综合 | 欧美日韩高清在线一区 | 国产福利av在线 | 中文在线资源 | 亚洲天堂自拍视频 | 天天操导航 | 玖玖在线资源 | 日日干日日| 久久久午夜精品理论片中文字幕 | 不卡日韩av| 久久精品3 | 亚洲欧洲国产精品 | 国产婷婷在线观看 | 日韩深夜在线观看 | 久久经典国产视频 | 99精品视频网 | aaa亚洲精品一二三区 | 日韩中文三级 | 天天干天天拍天天操 | 国产在线中文字幕 | 69av视频在线 | 人人爱人人做人人爽 | 国产精品美女久久 | 日本护士撒尿xxxx18 | 深夜国产在线 | 伊人影院av | 999视频网站 | 亚洲va欧美va人人爽 | 久久天天综合网 | 成人资源在线观看 | 午夜美女视频 | 欧洲激情在线 | 2020天天干天天操 | 91香蕉视频720p | 久久免费在线观看视频 | 嫩草av影院 | 在线视频一二三 | 中文字幕一区二区三区久久 | 操处女逼| 国产91对白在线播 | 在线看成人av | 亚洲成人黄色在线 | 国产高清在线永久 | 亚洲激精日韩激精欧美精品 | 国产日韩视频在线观看 | 日韩欧在线 | 人人舔人人干 | 精品一区二区三区四区在线 | av电影在线不卡 | 日韩精品一区电影 | 一区二区三区在线不卡 | 摸bbb搡bbb搡bbbb| 欧美成人黄色片 | 天天干天天做天天爱 | 成人动漫一区二区 | 精品国产电影一区二区 | 99精品视频一区二区 | 永久免费在线 | 免费91在线 | 青青五月天 | 中文字幕三区 | 五月天久久久久 | 五月色综合 | 深爱婷婷 | 亚洲国产小视频在线观看 | 视频在线观看一区 | 一区三区在线欧 | av免费在线观看1 | www夜夜操com | 中文字幕亚洲国产 | 99精品免费久久久久久久久日本 | 四虎影视成人精品国库在线观看 | 国产视频2 | 国产精品久久久av久久久 | 亚洲黄色免费网站 | 久草在线精品观看 | 欧美日韩三级在线观看 | a黄色一级片 | 在线观看视频中文字幕 | 狠狠干夜夜操天天爽 | 999热线在线观看 | 五月天丁香视频 | 狠狠色丁香婷婷综合久小说久 | 深爱激情五月网 | 成人日批视频 | 五月开心激情 | 精品在线视频一区 | 日本黄色免费电影网站 | 三三级黄色片之日韩 | 日韩成年视频 | 视频一区二区在线 | 4hu视频| 人人爽人人干 | 欧美日韩中文字幕在线视频 | 最近av在线| 成人午夜电影久久影院 | 亚州av成人| 日韩在线三区 | 一区二区 不卡 | 欧美中文字幕第一页 | 婷婷丁香激情综合 | 中文字幕有码在线播放 | 97国产精品 | 日韩v在线 | 菠萝菠萝蜜在线播放 | 国产xxxx性hd极品 | 国产又粗又长又硬免费视频 | 97超碰中文 | 精品黄色在线观看 | 国产视频精品久久 | 日韩视频1区 | 美女在线国产 | 91中文字幕永久在线 | 欧美精选一区二区三区 | 亚洲爽爽网 | 99在线热播精品免费99热 | 天天综合视频在线观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 一区二区视频在线免费观看 | 久久久久久久久影视 | 欧美最猛性xxx | 白丝av在线 | 国产福利91精品 | 久久99久久99免费视频 | 国产区免费| 欧美动漫一区二区三区 | 深爱婷婷激情 | 欧美性黑人 | 免费一级片观看 | 中文字幕在线播放日韩 | 最近中文字幕免费视频 | 永久免费观看视频 | 99热官网 | 国产v在线播放 | 亚洲午夜久久久久久久久电影网 | av蜜桃在线 | 国产激情免费 | www天天干com | 婷婷精品国产一区二区三区日韩 | 91桃色在线免费观看 | 亚洲欧洲日韩在线观看 | 精品主播网红福利资源观看 | 黄色精品久久 | 黄色成人91 | 久久电影色 | 久热久草 | 亚洲精品短视频 | 手机在线看a | www.夜夜操.com| 欧美一级日韩三级 | 中文字幕在线播放视频 | 狠狠躁18三区二区一区ai明星 | 国产在线观看xxx | 中文字幕精品三级久久久 | 亚洲va天堂va欧美ⅴa在线 | 日韩在线观看一区二区三区 | 精品美女在线视频 | 成人精品国产免费网站 | 91精品对白一区国产伦 | 91av免费观看 | 日本高清久久久 | 又黄又刺激视频 | 久久成视频 | 国产午夜免费视频 | 国产成人av | 五月婷婷色丁香 | 精品极品在线 | 国产精品白丝jk白祙 | 欧美黄在线 | 中文字幕色网站 | 亚洲天天看 | 91久久爱热色涩涩 | 91成人精品视频 | 国际精品网 | 国产一级小视频 | 天天色成人网 | 国内成人精品2018免费看 | 黄色免费在线看 | 精品一区二区免费视频 | 亚洲精品18日本一区app | 国产精品嫩草影院123 | 97超级碰碰碰视频在线观看 | 日韩av午夜 | 日韩精品中文字幕在线播放 | 免费看片成年人 | 在线观看亚洲精品 | 日韩在线观看你懂的 | 狠狠狠色丁香综合久久天下网 | 亚洲精品视频中文字幕 | 日日夜夜精品免费视频 | 国产91全国探花系列在线播放 | www婷婷| 久久久久久久久毛片精品 | 日本中文字幕在线 | 干狠狠 | 久久精品国产一区二区三 | 97狠狠操| 久久69精品久久久久久久电影好 | 亚洲免费观看在线视频 | 欧美日韩69 | 国产精品18久久久久久久网站 | 国产二区av | 日本 在线 视频 中文 有码 | 超碰个人在线 | 成人高清av在线 | 一区二区三区污 | 在线观看av免费 | 国产精品国产亚洲精品看不卡15 | 六月久久婷婷 | 一本一本久久a久久精品综合妖精 | 91久久精品一区 | 五月综合网站 | 日韩在线精品 | 久久99深爱久久99精品 | 日本精品久久久久中文字幕5 | 四虎在线影视 | 四虎国产精品成人免费影视 | 9ⅰ精品久久久久久久久中文字幕 | 国产精品男女 | 久久精品三 | 超碰97人 | 免费av片在线 | 精品电影一区 | 99精品视频在线观看 | 五月天中文在线 | 国产手机视频在线观看 | 精品久久1| 欧美日韩视频一区二区三区 | 亚洲jizzjizz日本少妇 | 久久av福利 | 亚洲成人黄色 | 91精品影视| 中文国产在线观看 | 久久国产精品99久久人人澡 | 一级黄色毛片 | 中文av免费 | 久久久午夜视频 | 丁香一区二区 | 91视频免费国产 | 99精品视频精品精品视频 | 久久久首页 | 欧美日韩精品在线观看视频 | 国产高清精品在线 | 在线观看视频黄色 | 国产精品大尺度 | 日本婷婷色 | 在线播放日韩av | 国产精品第2页 | 国产精品123| 久久香蕉一区 | 久久久免费少妇 | 久久婷五月| 久久精品五月 | 日日摸日日添夜夜爽97 | 亚在线播放中文视频 | 亚洲精品小区久久久久久 | 一区二区三区韩国免费中文网站 | 精品亚洲免费 | 国产精品久久久久久久久久三级 | 97偷拍在线视频 | 欧美日韩免费一区二区 | 麻豆国产精品va在线观看不卡 | 综合色狠狠 | 国产黄色播放 | 国产女人18毛片水真多18精品 | 久久a免费视频 | 97色在线观看 | 激情网色 | 欧美久草在线 | 日本黄色大片免费 | 五月婷综合 | 国产成人精品999 | 日韩在线影视 | 成人三级av | 五月婷婷激情五月 | 日韩中文在线电影 | a级片网站 | 亚洲激情影院 | 久久久久久久久久久久久久电影 | 久久久免费高清视频 | 色偷偷888欧美精品久久久 | 青青看片 | 青草视频免费观看 | 天天做天天看 | 在线观看91精品国产网站 | 午夜精品电影 | 亚洲激情| 国产一区二区在线免费观看 | 中文字幕在线看视频 | 91高清一区 | 99精品在线免费视频 | 欧美激情精品 | 国产精品一区二区三区四区在线观看 | 深爱激情开心 | 成年人网站免费观看 | 中文字幕av免费观看 | 国产免费av一区二区三区 | 深爱激情五月网 | 久久亚洲影视 | 91九色视频导航 | 久久婷婷色 | 亚洲最大av在线播放 | 免费大片黄在线 | 国产精品99精品 | 综合视频在线 | 婷婷色综合色 | 成人av在线网 | 免费在线观看av不卡 | 一区二区精 | 久久这里只精品 | 精品成人久久 | 黄色的视频 | 91麻豆传媒 | 国产露脸91国语对白 | 欧美激情第八页 | 美女久久网站 | 色网免费观看 | 成人高清在线观看 | 精品无人国产偷自产在线 | 香蕉影视 | 午夜免费视频网站 | 欧美巨大荫蒂茸毛毛人妖 | 中文字幕不卡在线88 | 中文字幕一区二区在线观看 | 黄色a大片 | 99综合电影在线视频 | 亚洲一级久久 | 欧美日韩国产亚洲乱码字幕 | 91视频专区| 国产福利一区二区在线 | 久久视了 | 成人v | 国内精品在线一区 | 99在线观看免费视频精品观看 | 中文字幕精品三级久久久 | 免费能看的黄色片 | 欧美a级在线免费观看 | 亚洲精品自在在线观看 | 亚洲精品视频中文字幕 | av网站在线观看免费 | 婷婷五月情 | 国产精品少妇 | 免费看一及片 | 久久久久久久久精 | 色香天天 | 色丁香婷婷 | 久草免费在线视频 | 成人午夜在线电影 | 亚洲乱码一区 | 西西人体4444www高清视频 | 91原创在线观看 | 一区二区三区播放 | 中文字幕国内精品 | 国产精品视频专区 | 永久免费精品视频 | 狠狠干婷婷色 | 在线观看深夜福利 | 日韩电影在线一区二区 | 欧美一区免费在线观看 | 国产成人精品一区二区在线观看 | 午夜性色| 西西大胆免费视频 | 91激情 | 亚洲精品欧美成人 | 久久国产91 | 午夜骚影 | 99在线免费视频观看 | 国产一区二区三区黄 | 国产又粗又长又硬免费视频 | 成人污视频在线观看 | 欧美一级欧美一级 | 久久成人国产精品免费软件 | 亚洲免费一级电影 | 麻豆91视频| 黄色资源网站 | 欧美成人黄| 三级毛片视频 | 九九电影在线 | 天天看天天干 | 亚洲三级在线免费观看 | 又大又硬又黄又爽视频在线观看 | 欧美成人影音 | 欧美在线free| 欧美日韩高清在线一区 | 狠狠撸电影 | 日本婷婷色 | 亚洲精品国产精品乱码不99热 | 久久精品超碰 | 国产玖玖精品视频 | 亚洲一区久久 | 伊人中文在线 | 尤物一区二区三区 | 91在线蜜桃臀 | 日本乱视频 | 免费观看一级一片 | 一区二区三区久久精品 | 久久精品看 | 久久精品电影 | 亚洲精品国产麻豆 | avwww在线| 在线www色 | 国产精品1区2区在线观看 | 视频91在线| 久久久国际精品 | 欧美视频日韩视频 | 一色屋精品视频在线观看 | 亚洲最大av网站 | 正在播放国产一区二区 | 99视频精品| 精品国产一区二区三区不卡 | 欧美日韩一区二区在线观看 | 丁香激情五月婷婷 | 麻豆精品传媒视频 | 国产涩涩网站 | 在线观看中文字幕一区二区 | 国产一级黄大片 | 91麻豆.com| 亚洲电影av在线 | 精品久久久久久亚洲综合网站 | 色婷婷www | 91香蕉视频污在线 |