亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? apriori.cpp

?? Aprior程序的c++實現。大家可以提出意見啊
?? CPP
字號:
// Apriori.cpp : 定義控制臺應用程序的入口點。
//

#include "stdafx.h"
#include "Apriori.h"
#include "conio.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 唯一的應用程序對象

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// 初始化 MFC 并在失敗時顯示錯誤
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: 更改錯誤代碼以符合您的需要
		_tprintf(_T("致命錯誤: MFC 初始化失敗\n"));
		nRetCode = 1;
	}
	else
	{
		// TODO: 在此處為應用程序的行為編寫代碼。
		DBLink *D;
		ItemSet *IS,*preIS;
		SearchTree *STk;
		char filename[30];
		double min_sup = 0.02;
		int Record_Count = 0,min_count;
		DWORD nStartTime,nEndTime,SumTime = 0;
		int k = 1;
		cout<<"輸入數據文件名:";
		cin>>filename;
		cout<<"輸入最小支持閾值min_sup:";
		cin>>min_sup;
		CString exstr1;
		exstr1 = "數據來源文件:";
		exstr1 += filename;
		exstr1 += "\r\n最小支持閾值:";
		exstr1.AppendFormat("%f\r\n\r\n",min_sup);
		nStartTime = GetTickCount();
		D = ReadDataFromText(filename,&Record_Count);
		min_count = int(Record_Count*min_sup);
		STk = find_frequent_1_itemset(D,min_count);
		nEndTime = GetTickCount();
		SumTime += nEndTime - nStartTime;
		IS = GetDataLink(STk);
		//要刪除STk
		STk = DeleteTree(STk);
		PrintResult(IS,k,exstr1);
		while(IS != NULL)
		{
			k++;
			nStartTime = GetTickCount();
			preIS = apriori_gen(IS,k);
			if(preIS == NULL) break;
			IS = DeleteLink(IS);
			IS = find_frequent_k_itemset(D,preIS,k,min_count);    //只是把preIS中的count字段作了更新并剪枝
			nEndTime = GetTickCount();
			SumTime += nEndTime - nStartTime;
			PrintResult(IS,k,exstr1);
		}
		IS = DeleteLink(IS);
		cout<<endl<<"Apriori算法運行完畢,為您找到最高"<<k-1<<"-項集。"<<endl;
		cout<<"算法總耗時:"<<SumTime<<"ms。"<<"按任意鍵結束!!!"<<endl;
		getch();
	}

	return nRetCode;
}


SearchTree* find_frequent_1_itemset(DBLink* D,int min_count)
{
	SearchTree* ST_1 = NULL;
	DBLink* DBL = D;
	while(DBL != NULL)     //遍歷源數據表,給每個關鍵字計數
	{
		int nStart = 0,nEnd;
		CString str;
		do{
			nEnd = DBL->datastr.Find(';',nStart);
			if(nEnd == -1)
				str = DBL->datastr.Mid(nStart);
			else{
				str = DBL->datastr.Mid(nStart,nEnd-nStart);
				nStart = nEnd+1;
			}
			ST_1 = SearchAndAddInTree(ST_1,str,1);
		}while(nEnd != -1);
		DBL = DBL->next;
	}
	SearchAndDelInTree(ST_1,min_count);     //剪枝
	return ST_1;
}

ItemSet* find_frequent_k_itemset(DBLink* D,ItemSet* IS,int k,int min_count)
{
	DBLink* DBL = D;
	int step = 0;
	CString tmp;
	while(DBL != NULL)     //遍歷源數據表,搜索k-項集,增加計數
	{
		step++;
		IS = SearchAndAddIn_kLink(IS,DBL->datastr);
		DBL = DBL->next;
		if((step % 10) == 0){
			tmp.Format("%d\r\n",step);
			TRACE(tmp.GetBuffer());
		}
	}
	return Del_k_ItemSet(IS,min_count);     //剪枝
}

ItemSet* apriori_gen(ItemSetLink* IS,int k)
{
	ItemSetLink *preIS1 = IS,*preIS2;
	ItemSetLink *ISk,*ISkhead = NULL;
	while(preIS1)
	{
		preIS2 = preIS1->next;
		while(preIS2)
		{
			CString tmp;    //臨時存放候選節點
			tmp.Empty();
			if(k == 2)
				tmp = preIS1->datastr+ ';' + preIS2->datastr;
			else{    //注:各關鍵字集都是已經按字母序排好序的
				int index1,index2;
				CString tmp1,tmp2;
				index1 = preIS1->datastr.ReverseFind(';');
				index2 = preIS2->datastr.ReverseFind(';');
				tmp1 = preIS1->datastr.Left(index1);
				tmp2 = preIS2->datastr.Left(index2);
				if(tmp1 == tmp2)
					tmp = tmp1 + preIS1->datastr.Mid(index1) + preIS2->datastr.Mid(index2);   //preIS1的子串排序在preIS2的子串前
			}
			if(!tmp.IsEmpty()){
				if(!has_infrequent_subset(tmp,IS))    //無非頻繁子集   tmp作為一個新結點的值插入候選鏈表中
					if(ISkhead == NULL){
						ISkhead = CreatePreItemSet(ISkhead,tmp,k);
						ISk = ISkhead;
					}
					else{
						ISk->next = CreatePreItemSet(ISk,tmp,k);    //直接從上一個節點開始插入新節點,減少無謂的鏈表遍歷
						ISk = ISk->next;
					}
			}
			preIS2 = preIS2->next;
		}
		preIS1 = preIS1->next;
	}

	return ISkhead;
}

ItemSetNode* GetDataLink(SearchTree* ST)
{
	if(ST == NULL) return NULL;
	ItemSetNode* N;
	N = GetDataLink(ST->left);
	if(N == NULL){
		N = new ItemSetNode;
		N->datastr = ST->datastr;
		N->count = ST->count;
		N->next = GetDataLink(ST->right);
	}
	else{
		ItemSetNode* tmpN = N;
		while(tmpN->next != NULL)    tmpN = tmpN->next;
		tmpN->next = new ItemSetNode;
		tmpN = tmpN->next;
		tmpN->datastr = ST->datastr;
		tmpN->count = ST->count;
		tmpN->next = GetDataLink(ST->right);
	}
	return N;    //返回的是鏈表頭結點指針
}

BOOL has_infrequent_subset(CString set,ItemSet* IS)    //在IS中搜索驗證set是否包含非頻繁子集
{
	int nStart = 0,nEnd;
	ItemSet* IShead = IS;
	CString subset;
	do{
		//把截出來的單詞去掉,得到k-1子集
		nEnd = set.Find(';',nStart);
		if(nStart == 0 && nEnd != -1)
			subset = set.Mid(nEnd+1);
		else if(nStart == 0 && nEnd == -1)
			subset = set;
		else if(nStart != 0 && nEnd == -1)
			subset = set.Left(nStart-1);
		else
			subset = set.Left(nStart)+set.Mid(nEnd+1);
		nStart = nEnd+1;
		//搜索該子集是否在k-1頻繁集中
		IS = IShead;
		while(IS)
		{
			if(subset.CompareNoCase(IS->datastr) == 0)
				break;
			IS = IS->next;
		}
		if(IS == NULL)
			return TRUE;    //有非頻繁子集
	}while(nEnd != -1);
	return FALSE;    //無非頻繁子集
}

BOOL FindInTree(SearchTree* ST,CString str)
{
	if(ST == NULL) return FALSE;
	if(str.CompareNoCase(ST->datastr.GetBuffer()) < 0)
		return FindInTree(ST->left,str);
	else if(str.CompareNoCase(ST->datastr.GetBuffer()) > 0)
		return FindInTree(ST->right,str);
	else   //找到了
		return TRUE;
}

SearchTree* SearchAndAddInTree(SearchTree* ST,CString str,int k)
{
	if(ST == NULL){
		ST = new SearchTree;
		if(ST == NULL)
			cout<<"Out of space!!!"<<endl;
		else{
			ST->datastr = str;
			if(k == 1)      //1-項集二叉樹邊構建邊計數
				ST->count = 1;
			else //k-項集二叉樹先構建后計數
				ST->count = 0;
			ST->left = ST->right = NULL;
		}
	}
	else if(str.CompareNoCase(ST->datastr.GetBuffer()) < 0)
		ST->left = SearchAndAddInTree(ST->left,str,k);
	else if(str.CompareNoCase(ST->datastr.GetBuffer()) > 0)
		ST->right = SearchAndAddInTree(ST->right,str,k);
	else    //找到
		ST->count++;

	return ST;
}

ItemSetLink* SearchAndAddIn_kLink(ItemSetLink* IS,CString str)  //更新count字段  
{
	CString sw;
	ItemSetLink* IShead = IS;
	int nStart = 0,nEnd;
	BOOL bFound;
	CStringList SL;
	CString key;
	do{
		nEnd = str.Find(';',nStart);
		if(nEnd == -1)
			key = str.Mid(nStart);
		else
			key = str.Mid(nStart,nEnd - nStart);
		SL.AddTail(key);
		nStart = nEnd + 1;
	}while(nEnd != -1);

	while(IS)
	{
		bFound = TRUE;
		nStart = 0;
		do{
			nEnd = IS->datastr.Find(';',nStart);
			if(nEnd == -1)
				sw = IS->datastr.Mid(nStart);
			else
				sw = IS->datastr.Mid(nStart,nEnd - nStart);
			int index = 0;
			while(index < SL.GetCount())
			{
				CString tmp = SL.GetAt(SL.FindIndex(index));
				if(tmp.CompareNoCase(sw) == 0)
					break;
				index++;
			}
			if(index >= SL.GetCount()){
				bFound = FALSE;
				break;
			}
			nStart = nEnd + 1;
		}while(nEnd != -1);
		if(bFound == TRUE)
			IS->count++;
		IS = IS->next;
	}
	SL.RemoveAll();
	return IShead;
}

//BOOL CompareKeyInStr(CString strDB,CString strN)  //在strDB的關鍵字組中尋找strN的關鍵字是否都出現
//{
//	int nStart = 0,nEnd;
//	CString key;
//	do{
//		nEnd = strDB.Find(';',nStart);
//		if(nEnd == -1)
//			key = strDB.Mid(nStart);
//		else
//			key = strDB.Mid(nStart,nEnd - nStart);
//		if(key.CompareNoCase(strN) == 0)    //找到了
//			return TRUE;
//		nStart = nEnd + 1;
//	}while(nEnd != -1);
//	return FALSE;
	//int nStart_DB = 0,nStart_N = 0;
	//int nEnd_DB,nEnd_N;
	//CString key_db,key_n;
	////都讀入第一個key
 //   nEnd_DB = strDB.Find(';',nStart_DB);
	//nEnd_N = strN.Find(';',nStart_N);
	//if(nEnd_DB == -1)
	//	key_db = strDB.Mid(nStart_DB);
	//else
	//	key_db = strDB.Mid(nStart_DB,nEnd_DB - nStart_DB);
	//if(nEnd_N == -1)
	//	key_n = strN.Mid(nStart_N);
	//else
	//	key_n = strN.Mid(nStart_N,nEnd_N - nStart_N);
	//nStart_DB = nEnd_DB + 1;
	//nStart_N = nEnd_N + 1;

	//do{
	//	if(key_db.CompareNoCase(key_n) == 0)    //找到一個關鍵字,則一起往后移
	//	{
	//		if(nEnd_DB != -1 && nEnd_N != -1)
	//		{
	//			nEnd_DB = strDB.Find(';',nStart_DB);
	//			nEnd_N = strN.Find(';',nStart_N);
	//			if(nEnd_DB == -1)
	//				key_db = strDB.Mid(nStart_DB);
	//			else
	//				key_db = strDB.Mid(nStart_DB,nEnd_DB - nStart_DB);
	//			if(nEnd_N == -1)
	//				key_n = strN.Mid(nStart_N);
	//			else
	//				key_n = strN.Mid(nStart_N,nEnd_N - nStart_N);
	//		}
	//		else 
	//			break;
	//	}
	//	else if(key_db.CompareNoCase(key_n) > 0)    //在strDB中不可能再找到一個關鍵字與當前的key_n匹配
	//		return FALSE;
	//	else    //StrDB往后移
	//	{
	//		if(nEnd_DB != -1){
	//			nEnd_DB = strDB.Find(';',nStart_DB);
	//			if(nEnd_DB == -1)
	//				key_db = strDB.Mid(nStart_DB);
	//			else
	//				key_db = strDB.Mid(nStart_DB,nEnd_DB - nStart_DB);
	//		}
	//		else
	//			break;
	//	}

	//	nStart_DB = nEnd_DB + 1;
	//	nStart_N = nEnd_N + 1;
	//}while(1);    //有一個串已到尾部,則跳出循環

	//if(nEnd_N == -1 && nEnd_DB == -1)
	//	if(key_db.CompareNoCase(key_n) == 0)
	//		return TRUE;
	//	else
	//		return FALSE;
	//else if(nEnd_N == -1 && nEnd_DB != -1)    //strN中的關鍵字已經全部找到
	//	return TRUE;
	//else    //strN中的關鍵字未找完,strDB已搜索完
	//	return FALSE;
//}

SearchTree* SearchAndDelInTree(SearchTree* ST,int min_count)
{
	if(ST == NULL)    return ST;
	ST->left = SearchAndDelInTree(ST->left,min_count);
	ST->right = SearchAndDelInTree(ST->right,min_count);
	//刪除非頻繁節點
	if(ST->count < min_count)
	{
		SearchTree* TmpNode;
		if(ST->left && ST->right)   //兩個子樹
		{
			TmpNode = FindMin(ST->right);
			ST->datastr = TmpNode->datastr;
			ST->count = TmpNode->count;
			ST->right = DeleteNode(ST->right,ST->datastr);
		}
		else    //一棵或沒有子樹
		{
			TmpNode = ST;
			if(ST->left == NULL)
				ST = ST->right;
			else if(ST->right == NULL)
				ST = ST->left;
			delete TmpNode;
		}
	}
	return ST;
}

SearchTree* FindMin(SearchTree* ST)
{
	if(ST != NULL)
		while(ST->left != NULL)
			ST = ST->left;
	return ST;
}

SearchTree* DeleteNode(SearchTree* ST,CString str)
{
	SearchTree* TmpNode;
	if(ST == NULL)
		cout<<"Element not found!!!"<<endl;
	else if(str.CompareNoCase(ST->datastr.GetBuffer()) < 0)
		ST->left = DeleteNode(ST->left,str);
	else if(str.CompareNoCase(ST->datastr.GetBuffer()) > 0)
		ST->right = DeleteNode(ST->right,str);
	//找到了節點
	else if(ST->left && ST->right)  //兩個子樹
	{
		TmpNode = FindMin(ST->right);
		ST->datastr = TmpNode->datastr;
		ST->count = TmpNode->count;
		ST->right = DeleteNode(ST->right,ST->datastr);
	}
	else   //一棵或沒有子樹
	{
		TmpNode = ST;
		if(ST->left == NULL)
			ST = ST->right;
		else if(ST->right == NULL)
			ST = ST->left;
		delete TmpNode;
	}

	return ST;
}

CString GetLine(CFile* const f)    //獲得文件中的一行字符
{
	UINT n=0,row=0;
	CString linestr;
	char buf;
	n=f->Read(&buf,1);
	if(n==0) return "Wen_End";   //已到文件尾
	do{
		if(buf=='\r'){
			n = f->Read(&buf,1);  //把'\n'讀出
			break;
		}
		linestr+=buf;
		n = f->Read(&buf,1);
	}while(n!=0);
	return linestr;
}

DBLink* ReadDataFromText(CString filename,int *RC)
{
	CFile ftxt;
	DBLink *D,*DBL;
	D = NULL;    DBL = NULL;
	if(!ftxt.Open(filename,CFile::modeRead)){
		cout<<"無法打開數據文件";
		return NULL;
	}
	CString linestr;
	while((linestr = GetLine(&ftxt)) != "Wen_End")
	{
		if(!linestr.IsEmpty())
		{
			if(D == NULL){
				D = new DBLink;
				DBL = D;
			}
			else{
				DBL->next = new DBLink;
				DBL = DBL->next;
			}

			DBL->datastr = linestr;
			DBL->next = NULL;
		}
		(*RC)++;
	}
	ftxt.Close();
	return D;
}

void PrintResult(ItemSet* IS,int k,CString exstr1)
{
	if(IS == NULL)  return;
	CString exstr;
	CFile fout;
	if(k == 1){  
		fout.Open("apriori_output.txt",CFile::modeCreate|CFile::modeWrite);
		fout.Write(exstr1.GetBuffer(),exstr1.GetLength());
	}
	else{
		fout.Open("apriori_output.txt",CFile::modeWrite);
		fout.SeekToEnd();
	}
	cout<<"頻繁"<<k<<"-項集:"<<endl;
	exstr.Format("頻繁%d-項集:\r\n",k);
	fout.Write(exstr,exstr.GetLength());
	while(IS != NULL){
		cout<<IS->datastr<<"  "<<IS->count<<endl;
		exstr.Format("%s  %d\r\n",IS->datastr.GetBuffer(),IS->count);
		fout.Write(exstr,exstr.GetLength());
		IS = IS->next;
	}
	cout<<endl;
	fout.Write("\r\n",2);
	fout.Close();
}

ItemSetLink* CreatePreItemSet(ItemSetLink* preIS,CString str,int k)
{
	if(preIS == NULL){
		preIS = new ItemSetLink;
		preIS->datastr = str;
		preIS->count = 0;
		preIS->next = NULL;
		return preIS;
	}
//preIS->next為NULL
	preIS->next = new ItemSetLink;
	preIS = preIS->next;
	preIS->datastr = str;
	preIS->count = 0;
	preIS->next = NULL;
	return preIS;
}

ItemSetLink* DeleteLink(ItemSetLink* IS)
{
	ItemSetLink* dIS;
	while(IS)
	{
		dIS = IS;
		IS = IS->next;
		delete dIS;
	}
	return NULL;
}

ItemSet* Del_k_ItemSet(ItemSet* IS,int min_count)
{
	ItemSet *tmpNode,*preNode,*IShead = IS;
	while(IS)
	{
		tmpNode = NULL;
		if(IS->count < min_count){    //刪除當前節點
			if(IS == IShead){    //是頭節點
				tmpNode = IShead;
				IShead = IS->next;
				preNode = IShead;
			}
			else{
				tmpNode = IS;
				preNode->next = IS->next;
			}
		}
		else    //當前節點保留
			preNode = IS;
		IS = IS->next;
		if(tmpNode)
			delete tmpNode;
	}
	return IShead;
}

SearchTree* DeleteTree(SearchTree* ST)
{
	if(ST == NULL)
		return NULL;
	ST->left = DeleteTree(ST->left);
	ST->right = DeleteTree(ST->right);
	delete ST;
	return NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷一区二区三区| 国产午夜精品理论片a级大结局| 国产成人亚洲综合色影视| 丝袜美腿亚洲一区| 偷窥少妇高潮呻吟av久久免费| 亚洲免费观看高清完整| 一区二区高清视频在线观看| 亚洲视频精选在线| 亚洲午夜激情网页| 日韩中文字幕一区二区三区| 日韩激情一区二区| 久久国产婷婷国产香蕉| 极品少妇xxxx偷拍精品少妇| 韩国女主播一区| 粉嫩在线一区二区三区视频| 99视频超级精品| 欧美性猛片aaaaaaa做受| 欧美日韩免费高清一区色橹橹| 制服丝袜激情欧洲亚洲| 精品国产一区二区三区不卡 | 国产日韩欧美电影| 国产精品免费网站在线观看| 最近中文字幕一区二区三区| 亚洲午夜精品一区二区三区他趣| 蜜臀久久久99精品久久久久久| 久久av资源站| 99视频在线观看一区三区| 欧美日韩高清影院| 久久精品亚洲一区二区三区浴池| 亚洲人成在线观看一区二区| 日韩精品一二三| 成人精品免费视频| 717成人午夜免费福利电影| 精品国产亚洲在线| 亚洲色图色小说| 免费观看日韩av| 91一区在线观看| 欧美电影免费提供在线观看| 亚洲免费观看高清完整版在线观看| 日韩不卡在线观看日韩不卡视频| 成人免费毛片嘿嘿连载视频| 在线成人午夜影院| 亚洲欧洲成人av每日更新| 青娱乐精品在线视频| 99re热这里只有精品视频| 日韩亚洲欧美中文三级| 亚洲欧美区自拍先锋| 国产在线国偷精品免费看| 欧美特级限制片免费在线观看| 久久久久久久性| 婷婷亚洲久悠悠色悠在线播放| 99久久er热在这里只有精品15| 欧美一区二区大片| 亚洲一区二区三区视频在线 | 国产精品高清亚洲| 日韩影院免费视频| 91国偷自产一区二区开放时间 | 99re66热这里只有精品3直播| 亚洲风情在线资源站| 国产美女主播视频一区| 国产精品免费看片| 在线视频你懂得一区| 99久久国产综合精品女不卡| 欧美另类高清zo欧美| 国产乱码精品一区二区三区av| 91麻豆精品在线观看| www.日韩大片| 久久久.com| 国产综合久久久久久鬼色| 欧美日韩综合在线免费观看| 亚洲免费视频成人| 99热在这里有精品免费| 国产精品久久福利| 成人免费视频caoporn| 国产性色一区二区| 国产成人精品一区二区三区网站观看| 欧美一级久久久| 人人超碰91尤物精品国产| 这里只有精品电影| 美国十次了思思久久精品导航| 欧美日韩国产一二三| 性做久久久久久| 欧美日韩激情一区二区| 日韩成人dvd| 亚洲精品一区二区三区蜜桃下载| 国产一区二区三区四| 国产日韩欧美高清在线| 成人免费高清视频| 亚洲精品网站在线观看| 欧美性一区二区| 日韩国产欧美视频| 2022国产精品视频| 成人永久看片免费视频天堂| 国产精品久久看| 91麻豆福利精品推荐| 亚洲.国产.中文慕字在线| 欧美一区二区三区视频在线观看 | 成人免费电影视频| 亚洲综合小说图片| 日韩写真欧美这视频| 国产精品一区在线观看乱码| 国产欧美日韩综合精品一区二区| 91麻豆免费看片| 日韩二区在线观看| 日本一区二区三区在线不卡| 在线视频中文字幕一区二区| 青青草国产成人99久久| 欧美国产成人精品| 欧美日韩视频专区在线播放| 韩国女主播一区| 亚洲激情在线播放| 亚洲欧美经典视频| 日韩无一区二区| caoporm超碰国产精品| 日韩精品福利网| 国产日韩欧美制服另类| 欧美体内she精高潮| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美日韩二区三区| 国产风韵犹存在线视精品| 亚洲不卡一区二区三区| 国产精品三级电影| 欧美大片在线观看| 欧美在线观看视频在线| 国产一区美女在线| 日本不卡1234视频| 亚洲精品国产视频| www精品美女久久久tv| 欧美日韩成人综合天天影院| 国产凹凸在线观看一区二区 | 69成人精品免费视频| 成a人片亚洲日本久久| 久久精品国产免费| 久久精品人人做人人综合| 91高清在线观看| 成人高清视频在线观看| 久久99这里只有精品| 亚洲成人自拍一区| 亚洲欧美激情插| 国产精品网曝门| 久久网站热最新地址| 日韩一级二级三级| 91精品国产入口| 欧美日韩国产小视频在线观看| av在线播放不卡| a在线欧美一区| 成人午夜激情在线| 国内外成人在线视频| 青青草91视频| 日韩精品专区在线影院观看| 美女网站色91| 亚洲人吸女人奶水| 日韩欧美国产高清| 欧美刺激脚交jootjob| 成人高清免费在线播放| 成人av中文字幕| 婷婷激情综合网| 久久久久免费观看| 欧美视频一区在线| 成人欧美一区二区三区1314| 亚洲欧洲成人av每日更新| 国产日韩精品一区二区浪潮av| 91久久精品国产91性色tv| 99re66热这里只有精品3直播| 日韩情涩欧美日韩视频| 天使萌一区二区三区免费观看| 成人av中文字幕| 欧美一区二区美女| 久久久久99精品一区| 国产精品久线在线观看| 国产精品久久久久精k8| 国产精品久久网站| 国产三级三级三级精品8ⅰ区| 欧美体内she精视频| 日本精品视频一区二区| 色婷婷国产精品久久包臀| 欧美精品xxxxbbbb| 中文一区一区三区高中清不卡| 日韩美女一区二区三区四区| 91麻豆精品国产91久久久资源速度| 91精品国产一区二区三区蜜臀 | 午夜精品一区二区三区免费视频| 一级日本不卡的影视| 日日噜噜夜夜狠狠视频欧美人| 国产成人综合在线| 欧美日韩高清一区二区| 国产情人综合久久777777| 日日夜夜一区二区| 免费成人结看片| 国产原创一区二区三区| 在线电影欧美成精品| 国产精品无圣光一区二区| 亚洲精品伦理在线| 国产麻豆欧美日韩一区| 99在线精品一区二区三区| 99久久精品免费| 久久久精品免费观看| 亚洲一区免费在线观看| 99re在线视频这里只有精品| 精品噜噜噜噜久久久久久久久试看|