久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

數據結構課程設計

時間:2019-05-12 06:41:41下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《數據結構課程設計》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《數據結構課程設計》。

第一篇:數據結構課程設計

河海大學計算機與信息學院(常州)

數據結構課程設計

課程設計題目:

多 項 式 問 題

專業、年級:計算機科學與技術09級 學

號:

0962810226

名:

目 錄

一、問題描述-------------3

二、需求分析-------------4

三、概要設計-------------4 1.概要設計目的與要求--4 2.概要設計內容--------4 3.功能算法描述與數據結構說明-------------------------5

四、詳細設計-------------5

五、系統測試-------------8

六、使用說明-------------9

七、總結及心得體會-----10

多項式問題

一.問題描述

給你九個整數,這九個整數分別是x的8次方至0次方的系數,請你按照多項式的一半形式合理地構造(去除不必要的)。例如九個系數分別是為0,0,0,1,22,-333,0,1,-1,你要構造并輸出一行多項式:x^5 + 22x^4 – 333x^3 + x – 1。

它的格式規則如下:

1.多項式的項必須按其指數從高到低排列。2.指數必須跟在符號“^”后顯示。3.有常數的只顯示常數項(無需跟x^0)。

4.只顯示系數不為0的項;若系數全為0,需顯示常數項。

5.在多項式中唯一需要空格的地方是項與項之間的加號或減號的兩邊需加上空格。

6.如果首項的系數是正數,則系數前不加符號;如果首項的系數是負數,則符號與數字之間不加空格,就如:-3x^2 +-2x。

7.系數為1,指數為0時,系數的1才顯示(推廣到系數為-1)。

輸入/輸出說明

1.輸入/輸出方式為文件方式,輸入文件有一行或多行的系數,系數之間有空格分隔。

2.每行共有九個系數,每個系數的絕對值為小于1000的整數。輸出文件包含構造完地多項式,每行一個多項式。

輸入范例

0 0 0 1 22-333 0 1-1 0 0 0 0 0 0-55 5 0

輸出范例

x^5 + 22x^4 – 333x^3 + x – 1-55x^2 + 5x

二.需求分析

2.1可行性研究

該程序主要從技術的角度來分析可行性。技術上的可行性研究主要分析技術條件能否順利完成開發工作,硬、軟件能否滿足開發者的需要等。該系統采用了Windows 7操作系統結合Visual C++ 6.0等軟件開發平臺已成熟可行。硬件方面,科技飛速發展的今天,硬件更新的速度越來越快,容量越來越大,可靠性越來越高,其硬件平臺也比較能滿足此系統的需要。

2.2結構與主要功能模塊

從實現多項式輸出過程的角度來分析,至少需要這樣一些子功能模塊。如: 1.多項式創建功能;

2.多項式輸出功能;

3.釋放多項式功能;

4.操作界面顯示功能;

三.概要設計

1.概要設計目的與要求

通過多項式程序設計,使我們進一步掌握和利用C++語言進行結構化程序設計的能力;進一步理解和運用結構化程設計的思想和方法;初步掌握開發一個小型系統程序設計的基本方法;學會調試一個較長程序的基本方法;以及掌握書寫課程設計開發文檔的能力(書寫課程設計報告)。總之,通過本課程設計加深對《C++語言》及《數據結構》課程所學知識的理解,進一步鞏固C++語言語法規則,在程序中體現出算法的思想,提高程序的運行效率。學會編制結構清晰、風格良好、數據結構適當的C++語言程序,從而具備解決綜合性實際問題的能力。

2.概要設計內容

多項式輸出程序具有以下基本功能:

1.創建多項式。接收輸入的數據,并保存到鏈表中。

2.Txt文檔輸入輸出功能。

3. 清除內存內容,釋放創建的鏈表,退出程序。

3.功能算法描述與數據結構說明

該多項式程序除了main()函數外,主要有以下函數:

node *CreatePolyn()

void firstnode(node *p)

void othernode(node *p)

void PrintPolyn(node *Pa)

void deletechain(node *h)

下面對這些函數逐一介紹。①.main()函數

main函數主要調用其他函數,用來實現輸入、顯示功能。

在main()函數中,定義一維數組p[]用來保存多項式的系數,Pa定義程序所需鏈表的頭指針。在程序開始要求輸入多項式的系數,隨后創建鏈表以保存多項式,再顯示出構建的符合要求的多項式。②.node *CreatePolyn()該函數功能是創建新的多項式鏈表。使用for語句,控制輸入多項式的每一項。

③.void firstnode(node *p)該函數功能是判斷輸出多項式第一項。對于第一項的系數為1或-1,指數為0或-1等五種情況進行討論。④.void othernode(node *p)該函數功能是判斷輸出多項式除第一項外的其它項。對于第一項的系數為1或-1,指數為0或-1等五種情況進行討論。⑤.void PrintPolyn(node *Pa)該函數功能:顯示構造的符合要求的多項式鏈表。在該函數中調用③、④函數,進行多項式的輸出。⑥.void deletechain(node *h)該函數的功能是釋放掉創建的鏈表,釋放內存。

四.詳細設計

下面討論重要函數具體實現過程:

1.node *CreatePolyn()定義int i=9計數,當i>0時,for語句反復提示用戶輸入該多項式的每一項的指數。當i=1時,輸入完畢,該鏈表也創建完畢。詳細的實現過程如下:

node *CreatePolyn(){ node *head,*pa,*s;int i;

pa=head=new node;//創建一個新的結點

head->next=NULL;

for(i = 9;i >0;i--)// 依次輸入9項

{

s=new node;

s->next=NULL;

s->coef = p[9-i];

s->exp=i-1;//x指數從8遞減到0

if(s->coef!=0)//系數不為零時,結點p鏈接s

{

pa->next=s;

pa=s;

} } return head;} 2.void firstnode(node *p)對多項式第一項輸出可能性進行多種分類討論。

void firstnode(node *p)//輸出多項式第一個結點 { //指數不為1且不為0,系數絕對值不為1(正常的輸出)if(p->exp!=1&&p->exp&&fabs(p->coef)!=1)

{

if(p->coef>0)

{

outfile<

coef<<“X^”<

exp;

}

else

{

outfile<

coef<<“X^”<

exp;

} } if(p->exp==0)//指數為0,即常數項

{

if(p->coef>0)

{

outfile<

coef;

}

else

{

outfile<

coef;

} }

//指數大于0且不為1,系數絕對值為1 if(p->exp>0&&fabs(p->coef)==1&&p->exp!=1){

if(p->coef>0)

{

outfile<<“X^”<

exp;

}

else

{

outfile<<“-X^”<

exp;

} } if(p->exp==1&&fabs(p->coef)!=1)//指數為1且系數絕對值不為1 {

if(p->coef>0&&p->coef!=1)

{

outfile<

coef<<“X”;

}

if(p->coef<0&&p->coef!=-1)

{

outfile<

coef<<“X”;

} } if(p->exp==1&&fabs(p->coef)==1)//指數為1且系數絕對值為1 {

if(p->coef==1)

outfile<<“X”;

else

outfile<<“-X”;} }

3.void PrintPolyn(node *Pa)該函數有一個參數,該指針指向多項式鏈表的頭指針,以下是實現插入的關鍵代碼: void PrintPolyn(node *Pa){ node *p;if(Pa->next==NULL)//首項判斷,如果首項無,則顯示“0”

outfile<<“0”;

return;else {

firstnode(Pa->next);} p=Pa->next->next;//定義指針p指向Pa的下下個指針

while(p!=NULL){

othernode(p);

p=p->next;

//將p指向下個一個結點

}

outfile<

五.系統測試

該程序在VC6.0中調試通過,沒有錯誤和警告,運行結果經過檢驗為正確。以下圖為該程序運行結果效果圖:

圖5-1 范例

圖5-2 一行輸出

圖5-3 多行輸出

六.使用說明

1.打開1.txt文件,在里面任意輸入9個整數,每個數字間要有空格,可以輸入一行或者多行,輸入多行的時候需要換行。

2.編譯運行后,打開2.txt文件,即可看到輸出的符合要求的多項式。

七.總結及心得體會

通過這次課程設計練習,使我更深刻地理解了C++語言的精髓-----指針的使用。完成整個程序設計有很大的收獲,對指針掌握的更加熟練。

同時通過直接對單鏈表的操作,加深了對數據結構的理解和認識。并在完成課程設計的過程作主動查閱了相關資料,學到了不少課本上沒有的技術知識。

經過這次課程設計,我深刻認識到算法在程序設計中的重要性,如何讓程序簡單、易讀是這個課程設計的難點。程序總是由若干個函數構成的,這些相應的函數體現了算法的基本思想。

編程是一件枯燥乏味工作,但是只要認真專研,我們會從中學到很多在課本上學不到或者無法在課堂上掌握的知識,同時也能從中感受到編程的樂趣。興趣是可以培養的,只要堅持下去,面對困難我們總能夠找到解決問題的方法。

計算多項式的輸出-----該程序雖然不是很大,但是自己獨立完成這一任務也遇到不少的困難。另外也需要提出的是,非常感謝老師對我們的耐心指導,尤其是上機的時候給了我很多鍛煉的機會。所以這次課程設計我才能夠順利的完成。

第二篇:2012數據結構課程設計

數 據 結 構

課程設計報告

題 目: 一元多項式計算 專 業: 信息管理與信息系統 班 級: 2012級普本班 學 號: 201201011367 姓 名: 左帥帥 指導老師: 郝慎學 時 間:

一、課程設計題目分析

本課程設計要求利用C語言或C++編寫,本程序實現了一元多項式的加法、減法、乘法、除法運算等功能。

二、設計思路

本程序采用C語言來完成課程設計。

1、首先,利用順序存儲結構來構造兩個存儲多項式A(x)和 B(x)的結構。

2、然后把輸入,加,減,乘,除運算分成五個主要的模塊:實現多項式輸入模塊、實現加法的模塊、實現減法的模塊、實現乘法的模塊、實現除法的模塊。

3、然后各個模塊里面還要分成若干種情況來考慮并通過函數的嵌套調用來實現其功能,盡量減少程序運行時錯誤的出現。

4、最后編寫main()主函數以實現對多項式輸入輸出以及加、減、乘、除,調試程序并將不足的地方加以修改。

三、設計算法分析

1、相關函數說明:

(1)定義數據結構類型為線性表的鏈式存儲結構類型變量

typedef struct Polynomial{}

(2)其他功能函數

插入函數void Insert(Polyn p,Polyn h)

比較函數int compare(Polyn a,Polyn b)

建立一元多項式函數Polyn Create(Polyn head,int m)

求解并建立多項式a+b,Polyn Add(Polyn pa,Polyn pb)

求解并建立多項式a-b,Polyn Subtract(Polyn pa,Polyn pb)2

求解并建立多項式a*b,Polyn Multiply(Polyn pa,Polyn pb)

求解并建立多項式a/b,void Device(Polyn pa,Polyn pb)

輸出函數輸出多項式,void Print(Polyn P)

銷毀多項式函數釋放內存,void Destroy(Polyn p)

主函數,void main()

2、主程序的流程基函數調用說明(1)typedef struct Polynomial {

float coef;

int expn;

struct Polynomial *next;} *Polyn,Polynomial;

在這個結構體變量中coef表示每一項前的系數,expn表示每一項的指數,polyn為結點指針類型,屬于抽象數據類型通常由用戶自行定義,Polynomial表示的是結構體中的數據對象名。

(2)當用戶輸入兩個一元多項式的系數和指數后,建立鏈表,存儲這兩個多項式,主要說明如下:

Polyn CreatePolyn(Polyn head,int m)建立一個頭指針為head、項數為m的一元多項式

p=head=(Polyn)malloc(sizeof(struct Polynomial));為輸入的多項式申請足夠的存儲空間

p=(Polyn)malloc(sizeof(struct Polynomial));建立新結點以接收數據

Insert(p,head);調用Insert函數插入結點

這就建立一元多項式的關鍵步驟

(3)由于多項式的系數和指數都是隨即輸入的,所以根據要求需要對多項式按指數進行降冪排序。在這個程序模塊中,使用鏈表,根據對指數大小的比較,對各種情況進行處理,此處由于反復使用指針對各個結點進行定位,找到合適的位置再利用void Insert(Polyn p,Polyn h)進行插入操作。(4)加、減、乘、除、的算法實現:

在該程序中,最關鍵的一步是實現四則運算和輸出,由于加減算法原則是一樣,減法可通過系數為負的加法實現;對于乘除算法的大致流程都是:首先建立多項式a*b,a/b,然后使用鏈表存儲所求出的乘積,商和余數。這就實現了多項式計算模塊的主要功能。

(5)另一個子函數是輸出函數 PrintPolyn();

輸出最終的結果,算法是將最后計算合并的鏈表逐個結點依次輸出,便得到整鏈表,也就是最后的計算式計算結果。由于考慮各個結點的指數情況不同,分別進行了判斷處理。

四、程序新點

通過多次寫程序,發現在程序在控制臺運行時總是黑色的,本次寫程序就想著改變一下,于是經過查資料利用system(“Color E0”);可以函數解決,這里“E0,”E是控制臺背景顏色,0是控制臺輸出字體顏色。

五、設計中遇到的問題及解決辦法

首先是,由于此次課程設計里使用指針使用比較多,自己在指針多的時候易腦子混亂出錯,對于此問題我是采取比較笨的辦法在稿紙上寫明白后開始進行 4

代碼編寫。

其次是,在寫除法模塊時比較復雜,自己通過查資料最后成功寫出除法模塊功能。

最后是,前期分析不足開始急于寫代碼,中途出現各種問題,算是給自己以后設計時的一個經驗吧。

六、測試(程序截圖)

1.數據輸入及主菜單

2.加法和減法模塊

3.乘法和除法模塊

七、總結

通過本次應用C語言設計一元多項式基本計算程序,使我更加鞏固了C語言程序設計的知識,以前對指針這一點使用是比較模糊,現在通過此次課程設計對指針理解的比較深刻了。而且對于數據結構的相關算法和函數的調用方面知識的加深。本次的課程設計,一方面提高了自己獨立思考處理問題的能力;另一方面使自己再設計開發程序方面有了一定的小經驗和想法,對自己以后學習其他語言程序設計奠定了一定的基礎。

八、指導老師評語及成績

附錄:(課程設計代碼)

#include #include #include typedef struct Polynomial {

float coef;6

int expn;

struct Polynomial *next;} *Polyn,Polynomial;

//Polyn為結點指針類型 void Insert(Polyn p,Polyn h){

if(p->coef==0)free(p);

//系數為0的話釋放結點

else

{

Polyn q1,q2;

q1=h;q2=h->next;

while(q2&&p->expnexpn)//查找插入位置

{

q1=q2;q2=q2->next;}

if(q2&&p->expn==q2->expn)//將指數相同相合并 {

q2->coef+=p->coef;

free(p);

if(!q2->coef)//系數為0的話釋放結點

{ q1->next=q2->next;free(q2);}

}

else { p->next=q2;q1->next=p;

}//指數為新時將結點插入

} 7

} //建立一個頭指針為head、項數為m的一元多項式 Polyn Create(Polyn head,int m){

int i;

Polyn p;

p=head=(Polyn)malloc(sizeof(struct Polynomial));

head->next=NULL;

for(i=0;i

{

p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結點以接收數據

printf(“請輸入第%d項的系數與指數:”,i+1);

scanf(“%f %d”,&p->coef,&p->expn);

Insert(p,head);

//調用Insert函數插入結點

}

return head;} //銷毀多項式p void Destroy(Polyn p){

Polyn q1,q2;

q1=p->next;8

q2=q1->next;

while(q1->next)

{

free(q1);

q1=q2;//指針后移

q2=q2->next;

} } //輸出多項式p int Print(Polyn P){

Polyn q=P->next;

int flag=1;//項數計數器

if(!q)//若多項式為空,輸出0

{

putchar('0');

printf(“n”);

return;

}

while(q)

{

if(q->coef>0&&flag!=1)putchar('+');//系數大于0且不是第一項 9

if(q->coef!=1&&q->coef!=-1)//系數非1或-1的普通情況

{

printf(“%g”,q->coef);

if(q->expn==1)putchar('X');

else if(q->expn)printf(“X^%d”,q->expn);

}

else

{

if(q->coef==1){

if(!q->expn)putchar('1');

else if(q->expn==1)putchar('X');

else printf(“X^%d”,q->expn);}

if(q->coef==-1){

if(!q->expn)printf(“-1”);

else if(q->expn==1)printf(“-X”);

else printf(“-X^%d”,q->expn);}

}

q=q->next;

flag++;

}

printf(“n”);} int compare(Polyn a,Polyn b){

if(a&&b)

{

if(!b||a->expn>b->expn)return 1;

else if(!a||a->expnexpn)return-1;

else return 0;

}

else if(!a&&b)return-1;//a多項式已空,但b多項式非空

else return 1;//b多項式已空,但a多項式非空 } //求解并建立多項式a+b,返回其頭指針 Polyn Add(Polyn pa,Polyn pb){

Polyn qa=pa->next;

Polyn qb=pb->next;

Polyn headc,hc,qc;

hc=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點 11

hc->next=NULL;

headc=hc;

while(qa||qb){

qc=(Polyn)malloc(sizeof(struct Polynomial));

switch(compare(qa,qb))

{

case 1:

qc->coef=qa->coef;

qc->expn=qa->expn;

qa=qa->next;

break;

case 0:

qc->coef=qa->coef+qb->coef;

qc->expn=qa->expn;

qa=qa->next;

qb=qb->next;

break;

case-1:

qc->coef=qb->coef;

qc->expn=qb->expn;

qb=qb->next;

break;12

}

if(qc->coef!=0)

{

qc->next=hc->next;

hc->next=qc;

hc=qc;

}

else free(qc);//當相加系數為0時,釋放該結點

}

return headc;} //求解并建立多項式a-b,返回其頭指針 Polyn Subtract(Polyn pa,Polyn pb){

Polyn h=pb;

Polyn p=pb->next;

Polyn pd;

while(p)//將pb的系數取反

{ p->coef*=-1;p=p->next;}

pd=Add(pa,h);

for(p=h->next;p;p=p->next)

//恢復pb的系數

p->coef*=-1;13

return pd;} //求解并建立多項式a*b,返回其頭指針 Polyn Multiply(Polyn pa,Polyn pb){

Polyn hf,pf;

Polyn qa=pa->next;

Polyn qb=pb->next;

hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點

hf->next=NULL;

for(;qa;qa=qa->next)

{

for(qb=pb->next;qb;qb=qb->next)

{

pf=(Polyn)malloc(sizeof(struct Polynomial));

pf->coef=qa->coef*qb->coef;

pf->expn=qa->expn+qb->expn;

Insert(pf,hf);//調用Insert函數以合并指數相同的項

}

}

return hf;}

//求解并建立多項式a/b,返回其頭指針 void Device(Polyn pa,Polyn pb){

Polyn hf,pf,temp1,temp2;

Polyn qa=pa->next;

Polyn qb=pb->next;

hf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點,存儲商

hf->next=NULL;

pf=(Polyn)malloc(sizeof(struct Polynomial));//建立頭結點,存儲余數

pf->next=NULL;

temp1=(Polyn)malloc(sizeof(struct Polynomial));

temp1->next=NULL;

temp2=(Polyn)malloc(sizeof(struct Polynomial));

temp2->next=NULL;

temp1=Add(temp1,pa);

while(qa!=NULL&&qa->expn>=qb->expn)

{

temp2->next=(Polyn)malloc(sizeof(struct Polynomial));

temp2->next->coef=(qa->coef)/(qb->coef);

temp2->next->expn=(qa->expn)-(qb->expn);

Insert(temp2->next,hf);

pa=Subtract(pa,Multiply(pb,temp2));15

qa=pa->next;

temp2->next=NULL;

}

pf=Subtract(temp1,Multiply(hf,pb));

pb=temp1;

printf(“商是:”);

Print(hf);

printf(“余數是:”);

Print(pf);} void main(){ int choose=1;int m,n,flag=0;system(“Color E0”);Polyn pa=0,pb=0,pc,pd,pf;//定義各式的頭指針,pa與pb在使用前付初值NULL printf(“請輸入A(x)的項數:”);scanf(“%d”,&m);printf(“n”);pa=Create(pa,m);//建立多項式A printf(“n”);printf(“請輸入B(x)的項數:”);16

scanf(“%d”,&n);printf(“n”);pb=Create(pb,n);//建立多項式B printf(“n”);printf(“**********************************************n”);printf(“*

多項式操作菜單

printf(”**********************************************n“);printf(”tt 1.輸出操作n“);printf(”tt 2.加法操作n“);printf(”tt 3.減法操作n“);printf(”tt 4.乘法操作n“);printf(”tt 5.除法操作n“);printf(”tt 6.退出操作n“);printf(”**********************************************n“);while(choose){

printf(”執行操作:“);

scanf(”%d“,&flag);

switch(flag)

{

case 1:

printf(”多項式A(x):“);Print(pa);*n”);

printf(“多項式B(x):”);Print(pb);

break;

case 2:

pc=Add(pa,pb);

printf(“多項式A(x)+B(x):”);Print(pc);

Destroy(pc);break;

case 3:

pd=Subtract(pa,pb);

printf(“多項式A(x)-B(x):”);Print(pd);

Destroy(pd);break;

case 4:

pf=Multiply(pa,pb);

printf(“多項式A(x)*B(x):”);

Print(pf);

Destroy(pf);

break;

case 5:

Device(pa,pb);18

break;

case 6:

exit(0);

break;

} }

Destroy(pa);

Destroy(pb);}

第三篇:數據結構課程設計

數據結構課程設計

1.赫夫曼編碼器

設計一個利用赫夫曼算法的編碼和譯碼系統,重復地顯示并處理以下項目,直到選擇退出為止。要求:

1)將權值數據存放在數據文件(文件名為data.txt,位于執行程序的當前目錄中)

2)初始化:鍵盤輸入字符集大小26、26個字符和26個權值(統計一篇英文文章中26個字母),建立哈夫曼樹;

3)編碼:利用建好的哈夫曼樹生成哈夫曼編碼;

4)輸出編碼(首先實現屏幕輸出,然后實現文件輸出); 5)界面優化設計。

代碼如下:

#include #include #include #include #define N 200

typedef struct HTNode

//結構體 { int Weight;

char ch;int Parent,Lchild,Rchild;}HTNode;typedef char * * HCode;

void Save(int n,HTNode *HT)

//把權值保存到文件 {

FILE * fp;

int i;

if((fp=fopen(“data.txt”,“wb”))==NULL)

{

printf(“cannot open filen”);

return;

}

for(i=0;i

if(fwrite(&HT[i].Weight,sizeof(struct HTNode),1,fp)!=1)

printf(“file write errorn”);

fclose(fp);

system(“cls”);

printf(“保存成功!”);

}

void Create_H(int n,int m,HTNode *HT)

//建立赫夫曼樹,進行編碼 {

int w,k,j;char c;for(k=1;k<=m;k++){

if(k<=n)

{

printf(“n請輸入權值和字符(用空格隔開): ”);

scanf(“%d”,&w);

scanf(“ %c”,&c);HT[k].ch=c;

HT[k].Weight=w;

}

else HT[k].Weight=0;

HT[k].Parent=HT[k].Lchild=HT[k].Rchild=0;}

int p1,p2,w1,w2;

for(k=n+1;k<=m;k++){

p1=0;p2=0;

w1=32767;w2=32767;

for(j=1;j<=k-1;j++)

{

if(HT[j].Parent==0)

{

if(HT[j].Weight

{

w2=w1;p2=p1;

w1=HT[j].Weight;

p1=j;

}

else if(HT[j].Weight

{

w2=HT[j].Weight;

p2=j;

}

}

} HT[k].Lchild=p1;HT[k].Rchild=p2;HT[k].Weight=HT[p1].Weight+HT[p2].Weight;

HT[p1].Parent=k;HT[p2].Parent=k;

} printf(“輸入成功!”);}

void Coding_H(int n,HTNode *HT)

//對結點進行譯碼 { int k,sp,fp,p;char *cd;HCode HC;

HC=(HCode)malloc((n+1)*sizeof(char *));

cd=(char *)malloc(n*sizeof(char));cd[n-1]='

主站蜘蛛池模板: 欧妇女乱妇女乱视频| 国产女人被狂躁到高潮小说| 国产成人毛片在线视频| 国产美女在线精品免费观看网址| 国产成人久久精品一区二区三区| 午夜性色一区二区三区不卡视频| 最新亚洲伦理中文字幕| 久久精品国产精品亚洲蜜月| 精品少妇人妻av无码久久| 中国人妻与老外黑人| av国产传媒精品免费| 强伦人妻一区二区三区视频18| 国产欧美日韩专区发布| 无遮挡边摸边吃奶边做视频免费| 日本熟妇色xxxxx欧美老妇| 日韩超碰人人爽人人做人人添| 双腿张开被9个男人调教| 国产欧洲精品自在自线官方| 久久人人爽av亚洲精品天堂| 久久久婷婷五月亚洲97号色| 日本aaaaa片爽快免费中国| 无码国产精品一区二区色情八戒| 水蜜桃色314在线观看| 精品成人a区在线观看| 国产美女精品视频线播放| 欧美在线看片a免费观看| 国产乱人伦av在线a| 免费观看国产小粉嫩喷水精品午.| 色偷偷亚洲女人的天堂| 国产激情艳情在线看视频| 富婆如狼似虎找黑人老外| 亚洲精品亚洲人成人网| 台湾无码一区二区| 天堂av无码大芭蕉伊人av孕妇| 曰韩无码av一区二区免费| 日本www一道久久久免费榴莲| 内射少妇36p九色| 又黄又爽又高潮免费毛片| 免费三级网站| 中文人妻无码一区二区三区| 亚洲高清乱码午夜电影网|