日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

發布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前言
  • 一、順序表的定義
  • 二、順序表的初始化
  • 三、順序表的建立
  • 四、順序表的輸出
  • 五、順序表的逆序輸出
  • 六、順序表的插入操作
  • 七、順序表的刪除操作
  • 八、順序表的按位和按值查找
  • 基本操作的完整代碼
  • 九*、順序表刪除的常用操作
  • 十*、順序表的常用合并操作

前言

以下所有代碼都經過測試,編譯運行軟件:Dev-C++ 5.11,若有表述和代碼錯誤感謝指出!!!


一、順序表的定義

以下操作均為順序表的靜態分配,所以其大小和空間是固定的,可通過MaxSize設置順序表的最大長度。

#include<stdio.h> #define MaxSize 10 //可自行更改最大長度 typedef struct {int data[MaxSize]; //元素int length; //順序表的當前長度 } SqList; //順序表的類型定義

二、順序表的初始化

設置順序表的初始長度為0,即L.length=0。

/*初始化順序表*/ void InitList(SqList L) {L.length=0; }

三、順序表的建立

/*順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }

四、順序表的輸出

順序表的輸出,依次遍歷從頭到尾輸出順序表中各元素的值,即通過一個for循環,條件<L.length(順序表的總長度),每次輸出元素。

/*順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }

結合以上功能函數,如下,創建一個順序表,長度為6,其功能是創建一個順序表并輸入元素,再通過函數調用依次輸出各元素,數據元素依次為2,6,0,-1,4,8,如下完整代碼:

#include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }//主函數 int main() {SqList L;InitList(L);CreatList(L);printf("順序表為:\n"); DispList(L); }

首先輸入要創建順序表中的元素個數,然后依次輸入各數據元素,最后輸出該順序表,運行結果如下:

五、順序表的逆序輸出

順序表的逆序輸出也就是交換通過折半法,交換數據元素,然后也是通過調用DispList()函數依次遍歷順序表輸出。

/*將順序表中的所有元素逆置并輸出*/ void ReverseList(SqList L) {int temp;for(int i=0; i<L.length/2; i++) {temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}DispList(L); //調用輸出函數 }

例如,接上一個例子,不過這次是逆序輸出順序表,如下完整代碼:

#include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、將順序表中的所有元素逆置并輸出*/ void ReverseList(SqList L) {int temp;for(int i=0; i<L.length/2; i++) {temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}DispList(L); }//主函數 int main() {SqList L;InitList(L);CreatList(L);printf("逆序輸出順序表:\n");ReverseList(L); }

運行結果如下:

六、順序表的插入操作

順序表的插入操作以位序進行插入元素,這里要注意位序是從1開始的,而c語言中的數組下標是從0開始的,這一點在插入操作中要明白,這里加了一個if語句判斷輸入的插入位置是否合法,若不合法則會返回false,插入后,要將其后的元素后移,最后數組長度加1。

/*順序表的插入操作 (在L的位序i處插入元素e)*/ bool ListInsert(SqList &L,int i, int e) {if (i<1||i>L.length||L.length>=MaxSize) //在[1,length+1]內有效且未存滿或等于最大長度return false; //插入失敗返回 falsefor(int j=L.length; j>=i; j--) //j變量等于順序表的長度L.data[j]=L.data[j-1]; //將要插入的位置,第i個元素及以后的元素后移,先移動后面的元素,即數組下標小的賦給下標大的L.data[i-1]=e; //由于數組的下標是從0開始的,所以位序要減一,即將要插入的元素e賦值給L.data[i-1]L.length++; //數組長度加1return true; //插入成功返回 true }

例如,向之前所創建好的順序表的位序為3(數組下標為2)處插入數據元素“7”,如下完整代碼:

#include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、順序表的插入操作 (在L的位序i處插入元素e)*/ bool ListInsert(SqList &L,int i, int e) {if (i<1||i>L.length||L.length>=MaxSize) //在[1,length+1]內有效且未存滿或等于最大長度return false; //插入失敗返回 falsefor(int j=L.length; j>=i; j--) //j變量等于順序表的長度L.data[j]=L.data[j-1]; //將要插入的位置,第i個元素及以后的元素后移,先移動后面的元素,即數組下標小的賦給下標大的L.data[i-1]=e; //由于數組的下標是從0開始的,所以位序要減一,即將要插入的元素e賦值給L.data[i-1]L.length++; //數組長度加1return true; //插入成功返回 true }//主函數 int main() {SqList L;InitList(L);CreatList(L);printf("當前順序表為:\n");DispList(L);ListInsert(L,3,7); //在順序表L的位序為3處插入數據元素7printf("\n");printf("插入后的順序表為:\n");DispList(L); }

運行結果如下:

七、順序表的刪除操作

順序表的刪除操作同插入操作一樣,也是通過位序插入/刪除,刪除目標元素后,其后的元素要向前移動一格,最后數組長度要減1。

/*順序表的刪除操作 (刪除L中第i個位置的元素并引用變量e返回)*/ bool ListDelete(SqList &L,int i,int &e) {if (i<1||i>L.length) //在[1,length+1]內有效return false; //刪除失敗返回truee=L.data[i-1]; //將要刪除的元素賦值給e,由于是數組所以要i-1for(int j=i; j<L.length; j++)L.data[j-1]=L.data[j]; //將要刪除的位置,第i個元素后的元素前移,先移動前面的元素,即下標大的賦值給下標小的L.length--; //數組長度減1return true; //刪除成功返回true }

例如對創建的順序表,刪除第4個元素(位序為4),然后輸出順序表,完整代碼如下:

#include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、順序表的刪除操作 (刪除L中第i個位置的元素并引用變量e返回)*/ bool ListDelete(SqList &L,int i,int &e) {if (i<1||i>L.length) //在[1,length+1]內有效return false; //刪除失敗返回truee=L.data[i-1]; //將要刪除的元素賦值給e,由于是數組所以要i-1for(int j=i; j<L.length; j++)L.data[j-1]=L.data[j]; //將要刪除的位置,第i個元素后的元素前移,先移動前面的元素,即下標大的賦值給下標小的L.length--; //數組長度減1return true; //刪除成功返回true }//主函數 int main() {SqList L;int a;int e=0; //初始化e的值 InitList(L);CreatList(L);printf("當前順序表為:\n");DispList(L);printf("\n");printf("請輸入想刪除的元素位置:\n",a);scanf("%d",&a);if (ListDelete(L,a,e))printf("已刪除順序表中第%d個元素,其元素值為%d\n",a,e);elseprintf("輸入的位序i不合法,刪除操作失敗!\n");printf("當前順序表為:\n");DispList(L);return 0; }

運行結果如下:

八、順序表的按位和按值查找

順序表的按位查找是以數組下標進行查找的,所以位序要減1,即L.data[i-1]。

/*順序表的按位查找 (獲取L中第i個位置元素的值)*/ int GetElem(SqList L,int i) {return L.data[i-1]; //立即找到第i個元素 }

順序表的按值查找是,查找L中第一個元素值等于e的元素,它會依次沿著順序表向后查找,找到后返回其位序。

/*順序表的按值查找 (查找L中第一個元素值等于e的元素并返回其次序)*/ int LocateElem(SqList L,int e) {for(int i=0; i<L.length; i++) //依次從前往后查找if(L.data[i]==e)return i+1; //數組下標為i的元素值為e,返回其位序i+1(數組從0開始)return 0; //未找到元素,退出循環查找失敗 }

例如對創建的順序表,查詢順序表中第3個位置的數據元素,另外查詢順序表中第一個元素值等于“4”的數據元素,其完整代碼如下:

#include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、順序表的按位查找 (獲取L中第i個位置元素的值)*/ int GetElem(SqList L,int i) {return L.data[i-1]; //立即找到第i個元素 }/*5、順序表的按值查找 (查找L中第一個元素值等于e的元素并返回其次序)*/ int LocateElem(SqList L,int e) {for(int i=0; i<L.length; i++) //依次從前往后查找if(L.data[i]==e)return i+1; //數組下標為i的元素值為e,返回其位序i+1(數組從0開始)return 0; //未找到元素,退出循環查找失敗 }//主函數 int main() {SqList L;int a,b;InitList(L);CreatList(L);printf("順序表為:\n");DispList(L);printf("\n");printf("按位查找第3個元素的值:\n");a=GetElem(L,3);printf("%d \n",a);printf("按值查找值為4的元素:\n");b=LocateElem(L,4);printf("%d \n",b); }

運行結果如下:

基本操作的完整代碼

以上順序表基本操作的完整代碼如下:

#include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、將順序表中的所有元素逆置并輸出*/ void ReverseList(SqList L) {int temp;for(int i=0; i<L.length/2; i++) {temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}DispList(L); //調用輸出函數 }/*5、順序表的插入操作 (在L的位序i處插入元素e)*/ bool ListInsert(SqList &L,int i, int e) {if (i<1||i>L.length||L.length>=MaxSize) //在[1,length+1]內有效且未存滿或等于最大長度return false; //插入失敗返回 falsefor(int j=L.length; j>=i; j--) //j變量等于順序表的長度L.data[j]=L.data[j-1]; //將要插入的位置,第i個元素及以后的元素后移,先移動后面的元素,即數組下標小的賦給下標大的L.data[i-1]=e; //由于數組的下標是從0開始的,所以位序要減一,即將要插入的元素e賦值給L.data[i-1]L.length++; //數組長度加1return true; //插入成功返回 true }/*6、順序表的刪除操作 (刪除L中第i個位置的元素并引用變量e返回)*/ bool ListDelete(SqList &L,int i,int &e) {if (i<1||i>L.length) //在[1,length+1]內有效return false; //刪除失敗返回truee=L.data[i-1]; //將要刪除的元素賦值給e,由于是數組所以要i-1for(int j=i; j<L.length; j++)L.data[j-1]=L.data[j]; //將要刪除的位置,第i個元素后的元素前移,先移動前面的元素,即下標大的賦值給下標小的L.length--; //數組長度減1return true; //刪除成功返回true }/*7、順序表的按位查找 (獲取L中第i個位置元素的值)*/ int GetElem(SqList L,int i) {return L.data[i-1]; //立即找到第i個元素 }/*8、順序表的按值查找 (查找L中第一個元素值等于e的元素并返回其次序)*/ int LocateElem(SqList L,int e) {for(int i=0; i<L.length; i++) //依次從前往后查找if(L.data[i]==e)return i+1; //數組下標為i的元素值為e,返回其位序i+1(數組從0開始)return 0; //未找到元素,退出循環查找失敗 }

九*、順序表刪除的常用操作

  • 刪除順序表中的最小值
  • 刪除順序表中的所有特定值的元素
  • 刪除順序表值在特定區間的元素
  • 刪除順序表中重復元素
  • 刪除有序表中重復元素
  • 具體的實現步驟感興趣的小伙伴可以看之前這篇文章:
    數據結構學習筆記:順序表的刪除操作及其演化題目總結

    十*、順序表的常用合并操作

  • 順序表的合并操作
    若要將兩個順序表的數據元素合并,通過創建一個CombineList1()函數,將順序表L1和順序表L2分別添加至順序表L3中,該函數中包含三個參數,分別是SqList L1,SqList L2,SqList &L3(順序表L3由于被更改,所以要用引用符號),如下:
  • bool CombineList1(SqList L1,SqList L2,SqList &L3) { ... }

    只需設置一個while()循環,條件是該順序表的長度,每次將該順序表的值賦給最終順序表,且每次循環變量都加1,如下:

    while(i<L1.length)L3.data[k++]=L1.data[i++]; while(j<L2.length)L3.data[k++]=L2.data[j++];

    該算法的完整代碼:

    /*合并兩個順序表*/ bool CombineList1(SqList L1,SqList L2,SqList &L3) {InitList(L3);int i=0,j=0;int k = 0;while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true; }

    例如,創建兩個順序表L1、L2,順序表L1的數據元素依次為4、5、0、2、-1;順序表L2的數據元素依次為8、1、4、7、2,將這兩個順序表合并為順序表L3,并最后輸出順序表L3:
    代碼如下:

    #include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、合并兩個順序表*/ bool CombineList1(SqList L1,SqList L2,SqList &L3) {InitList(L3);int i=0,j=0;int k = 0;while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true; }//主函數 int main() {SqList L1,L2,L3;int a,b;InitList(L1);InitList(L2);InitList(L3);printf("建立第一個順序表!\n");CreatList(L1);DispList(L1);printf("\n");printf("建立第二個順序表!\n");CreatList(L2);DispList(L2);printf("\n");printf("合并后的順序表如下:\n");CombineList1(L1,L2,L3);DispList(L3); }

    運行結果如下:

  • 有序順序表的合并操作
    若要將兩個有序順序表的數據元素合并,我們則要對上述代碼進行修改,即按順序依次取兩個順序表較小的數據元素存入新的順序表中,然后對剩余的數據元素再添加至新的順序表的后面,創建一個函數CombineList2():
  • bool CombineList2(SqList L1,SqList L2,SqList &L3) { ... }

    該算法的完整代碼如下:

    /*5、合并有序順序表*/ bool CombineList2(SqList L1,SqList L2,SqList &L3) {if(L1.length+L2.length>MaxSize)return false;int i=0,j=0;int k = 0;InitList(L3);while(i<L1.length&&j<L2.length) { //對兩個順序表中的元素兩兩比較,將小者存入結果表 if(L1.data[i]<=L2.data[j])L3.data[k++]=L1.data[i++];elseL3.data[k++]=L2.data[j++];}while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true; }

    注:該代碼參考《王道 數據結構 考研復習指導》
    例如,創建兩個有序順序表L1、L2,有序順序表L1的數據元素依次為-5、0、3、7;有序順序表L2的數據元素依次為1、7、10,將這兩個有序順序表合并為有序順序表L3,并最后輸出有序順序表L3:
    代碼如下:

    #include<stdio.h> #define MaxSize 10 typedef struct {int data[MaxSize];int length; } SqList;/*1、初始化順序表*/ void InitList(SqList L) {L.length=0; }/*2、順序表的建立*/ void CreatList(SqList &L) {printf("請輸入建立順序表的元素個數:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("請輸入第%d個整數:\n",number);scanf("%d",&L.data[i]);} }/*3、順序表的輸出(從頭到尾輸出順序表中各元素的值)*/ void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]); }/*4、合并有序順序表*/ bool CombineList2(SqList L1,SqList L2,SqList &L3) {if(L1.length+L2.length>MaxSize)return false;int i=0,j=0;int k = 0;InitList(L3);while(i<L1.length&&j<L2.length) { //對兩個順序表中的元素兩兩比較,將小者存入結果表 if(L1.data[i]<=L2.data[j])L3.data[k++]=L1.data[i++];elseL3.data[k++]=L2.data[j++];}while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true; }//主函數 int main() {SqList L1,L2,L3;int a,b;InitList(L1);InitList(L2);InitList(L3);printf("建立第一個有序順序表!\n");CreatList(L1);DispList(L1);printf("\n");printf("建立第二個有序順序表!\n");CreatList(L2);DispList(L2);printf("\n");printf("合并后的有序順序表如下:\n");CombineList2(L1,L2,L3);DispList(L3); }

    運行結果如下:

    后續更新分割線……

    總結

    以上是生活随笔為你收集整理的数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 鲁在线视频 | 99久久综合网| 视频免费在线观看 | 日本50路肥熟bbw | 摸摸大奶子| 日本少妇电影 | 中文字幕在线字幕中文 | 日本大尺度做爰呻吟舌吻 | av片免费播放 | 欧美高清v | 91美女高潮出水 | 男女插插视频 | 国产中文字幕在线观看 | 日本中文字幕一区二区 | 国产精品蜜臀 | 色永久| 国产精品视频一区二区三区在3 | 操网站| 男人天堂2014 | 成人黄色免费网站 | 久草福利 | 久久久www成人免费精品 | 噜噜色av| 一区中文字幕 | 国产精品毛片一区二区在线看舒淇 | 日本高清免费看 | 国产人妻精品午夜福利免费 | 欧美黄色录像片 | 色婷婷香蕉在线一区二区 | 亚洲色图欧美在线 | 黄色a级片视频 | 国产日韩网站 | 99视频在线免费 | 国产做受入口竹菊 | 日韩精选视频 | 国产网址在线 | 一区二区国产在线 | 日韩美女视频在线观看 | 美日韩精品视频 | 中文人妻一区二区三区 | 黄色免费网站 | 高清av一区二区 | 成人爱爱视频 | 九九热最新网址 | 波多野吉衣av在线 | 午夜精品在线免费观看 | 中文字幕三级电影 | 樱桃国产成人精品视频 | 久在线 | 114国产精品久久免费观看 | 日韩福利在线 | 日韩羞羞| 国产精品无码一区二区三区在线看 | 影音先锋成人资源网站 | 黄色三级生活片 | 男人和女人插插 | 法国伦理少妇愉情 | 欧洲亚洲精品 | 最新中文字幕2019 | 99精品区 | 国产精品亚洲一区二区三区 | 美女高潮网站 | 久久久久久久久久久久久久av | 黄色动漫在线观看 | 超碰伦理| 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 一道本在线观看 | 成人午夜一区 | 污污网站在线观看视频 | 国产视频精选 | 欧美午夜激情视频 | 国产视频不卡 | 亚洲一区二区动漫 | 欧美成人精品二区三区99精品 | 波多野结衣家庭主妇 | 久久精品欧美一区二区三区麻豆 | 色吧在线观看 | 国产二区三区视频 | 丰满少妇一区二区三区 | 中文在线一区二区三区 | www.日日日| 白丝久久 | 成人乱人乱一区二区三区 | 成人网站免费观看入口 | 日本午夜一级 | 99热网| 长篇乱肉合集乱500小说日本 | 无码人妻精品一区二区蜜桃网站 | 亚洲一区区 | 亚洲欧美日韩精品永久在线 | 麻豆91茄子在线观看 | av资源吧首页 | 伊人久久大香线蕉av色婷婷色 | a毛片在线免费观看 | 114国产精品久久免费观看 | 伊人影视大全 | 不卡视频一区二区三区 | 亚州综合| 欧美极品少妇×xxxbbb |