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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 堆排序(簡(jiǎn)單的最大優(yōu)先隊(duì)列).txt

?? 最大堆的生成、堆排序
?? TXT
字號(hào):
//最大堆的調(diào)整
{邏輯結(jié)構(gòu):樹(shù)狀結(jié)構(gòu)--完全二叉樹(shù)}
{存儲(chǔ)結(jié)構(gòu):順序表--數(shù)組即可反映邏輯結(jié)構(gòu)}
算法思想:
1。前置條件:當(dāng)前結(jié)點(diǎn)i的左子樹(shù)和右子樹(shù)都已經(jīng)是最大堆;設(shè)堆的大小為n。
2。結(jié)點(diǎn)i左結(jié)點(diǎn)的下標(biāo)l=2*i;結(jié)點(diǎn)i右結(jié)點(diǎn)的下標(biāo)r=2*i+1。
3。在l<=n和r<=n的情況下考慮以下操作。
4。如果l結(jié)點(diǎn)的值大于i結(jié)點(diǎn)的值,則把largest記為l,否則記為i。
5。如果r結(jié)點(diǎn)的值大于i結(jié)點(diǎn)的值,則把largest記為r。
6。如果largest不等于i,則把i和largest指向的值進(jìn)行交換,然后對(duì)largest指向的結(jié)點(diǎn)遞歸調(diào)用本算法,
即重復(fù)跳轉(zhuǎn)至步驟2。


//算法描述
AdjustHeap( HeapList, i )  // HeapList為最大堆(順序表),i為要調(diào)整的子樹(shù)的根結(jié)點(diǎn)
	n = HeapSize(heapList);
	l = 2 * i;
	r = 2 * i + 1;
	if l <= n and HeapList[l] > HeapList[i]
		largest = l;
	else  largest = i;
	if r <= n and HeapList[r] > HeapList[largest]
		largest = r;
	if largest != i
	[
		exchange(largest, i);
		AdjustHeap(HeapList, largest);
	]	
{AdjustHeap end}

//算法時(shí)間復(fù)雜度(最壞)
O(lgn)

//代碼實(shí)現(xiàn)
// kernel_code
template< typename T >
void	AdjustHeap( 
				   T heapList[], 
				   int nCurrentNodePos, 
				   int nHeapLength 
				   )
{
	int  nSubLeftNodePos = 2 * nCurrentNodePos + 1;
	int  nSubRightNodePos = 2 * nCurrentNodePos + 2;
	int  nLargestNodePos = -1;

	if ( nSubLeftNodePos < nHeapLength && heapList[nSubLeftNodePos] > 
		heapList[nCurrentNodePos] )
	{
		nLargestNodePos = nSubLeftNodePos;
	}
	else  
		nLargestNodePos = nCurrentNodePos;

	if ( nSubRightNodePos < nHeapLength && heapList[nSubRightNodePos] > 
		heapList[nLargestNodePos] )
	{
		nLargestNodePos = nSubRightNodePos;
	}

	if ( nLargestNodePos != nCurrentNodePos )
	{
		T  tempElement = heapList[nLargestNodePos];  // T 要支持拷貝
		heapList[nLargestNodePos] = heapList[nCurrentNodePos];
		heapList[nCurrentNodePos] = tempElement;

		AdjustHeap( heapList, nLargestNodePos, nHeapLength );
	}
}

//測(cè)試代碼
void	testAdjustHeap( )
{
	const int nLen = 6;
	int  srcArray[nLen] = {2, 56, 4, 8, 30, 42};
	
	// 從底向上,對(duì)非葉子結(jié)點(diǎn)進(jìn)行調(diào)整
	int  nMidNodeAmount = nLen / 2;
	for ( int nPos = nMidNodeAmount-1; nPos >= 0; nPos -- )
	{
		AdjustHeap<int>( srcArray, nPos, nLen );
	}

	for ( int nPos = 0; nPos < nLen; nPos ++ )
		cout << srcArray[nPos] << " ";

	cout << endl;
}


//建最大堆
{邏輯結(jié)構(gòu):樹(shù)狀結(jié)構(gòu)--完全二叉樹(shù)}
{存儲(chǔ)結(jié)構(gòu):順序表}
算法思想:
從右往左、從底向上,對(duì)每個(gè)非葉子結(jié)點(diǎn)調(diào)用調(diào)整最大堆算法。

//算法描述
CreateHeap( HeapList )  // HeapList為順序表
	n = HeapSize(heapList);
	k = LowInt(n/2);  // 向下取整
	for i=k DOWNTO 1
		AdjustHeap(HeapList, i);	
{CreateHeap end}

//算法時(shí)間復(fù)雜度(最壞)
O(nlgn)

//代碼實(shí)現(xiàn)
// kernel code
template< typename T >
void	CreateHeap( 
				   T heapList[], 
				   int nHeapLen
				   )
{
	int  nMidNodeMaxPos = nHeapLen / 2;
	for ( int nPos = nMidNodeMaxPos-1; nPos >= 0; nPos -- )
	{
		AdjustHeap<T>( heapList, nPos, nHeapLen );
	}
}


//堆排序
{邏輯結(jié)構(gòu):樹(shù)狀結(jié)構(gòu)--完全二叉樹(shù)}
{存儲(chǔ)結(jié)構(gòu):順序表}
// 算法思想:
1。創(chuàng)建最大堆。
2。設(shè)i=HeapSize()。
3。當(dāng)i>=2時(shí),執(zhí)行以下操作:
4。把順序表第一個(gè)元素跟第i個(gè)元素互換。{第一個(gè)元素的左右子樹(shù)都是最大堆}
5。調(diào)用最大堆調(diào)整算法:AdjustHeap(heapList, 1),對(duì)第一個(gè)元素進(jìn)行調(diào)整。
6。i = i -1,轉(zhuǎn)到步驟3。

//算法描述:
{采用順序存儲(chǔ)結(jié)構(gòu)}
HeapSort( HeapList )  // HeapList為順序表
	CreateHeap( HeapList );  // HeapList建成最大堆
	i = HeapSize( HeapList );
	while i>=2
	[
		exchange( HeapList[1], HeapList[i] );
		AdjustHeap( HeapList, 1 );
		i = i - 1;
	]
{HeapSort end}

//算法時(shí)間復(fù)雜度(最壞)
O(nlgn) 

//代碼實(shí)現(xiàn):
// kernel code
template< typename T >
void	HeapSort( 
				 T heapList[], 
				 int nHeapLen
				 )
{
	CreateHeap<T>( heapList, nHeapLen );
	
	int  nPos = nHeapLen - 1;
	while ( nPos >= 1 )
	{
		T  temp = heapList[nPos];
		heapList[nPos] = heapList[0];
		heapList[0] = temp;
		
		AdjustHeap<T>( heapList, 0, nPos );

		nPos --;
	}
}

///////////////////////////////////////////////

//最大優(yōu)先隊(duì)列--數(shù)據(jù)類型
{使用最大堆數(shù)據(jù)結(jié)構(gòu)}
//基本操作:
1。返回優(yōu)先級(jí)最高的元素GetMaximumElement。
2。返回優(yōu)先級(jí)最高的元素并從隊(duì)列中刪除ExtractMaxElement。
3。提高隊(duì)列中某一元素的優(yōu)先級(jí)InCreaseKey。
4。插入新元素到隊(duì)列InsertElement。

//GetMaximumElement
//算法思想:取得最大堆的第一個(gè)元素即可。
//算法描述:
{使用順序表存儲(chǔ)}
GetMaximumElement( heapList )
	return  heapList[1];
{GetMaximumElement end}
//算法時(shí)間復(fù)雜度(最壞)
O(1)

//ExtractMaxElement
//算法思想:
1。取得第一個(gè)元素并保存,作為返回值。
2。把最后一個(gè)元素賦給第一個(gè)元素。
3。堆長(zhǎng)度減1。
4。對(duì)第一個(gè)元素調(diào)用最大堆調(diào)整算法。

//算法描述:
{使用順序表存儲(chǔ)}
ExtractMaxElement( heapList )
	n = HeapSize( heapList );
	if n < 1
		Error("heap underflow");
	max = heapList[1];
	heapList[1] = heapList[n];
	n = n - 1;
	SetHeapListSize( n );
	AdjustHeap( HeapList, 1 );
{ExtractMaxElement end}

//算法時(shí)間復(fù)雜度(最壞)
O(lgn)

//InCreaseKey
//算法思想:
1。設(shè)要提升key的元素的位序?yàn)閕,i的父結(jié)點(diǎn)記為parent(i)。
2。List[i] = key。 // key為提升后的key值
2。當(dāng)i>1 and List[parent(i)]<List[i] 時(shí),進(jìn)行如下操作:
3。交換parent(i)和i對(duì)應(yīng)的元素。
4。i = parent(i)。轉(zhuǎn)到步驟2。

//算法描述:
{使用順序表存儲(chǔ)}
InCreaseKey( heapList, i, key )
	if heapList[i] > key
		Error("new key is smaller than current key");
	heapList[i] = key;
	while i>1 and heapList[parent(i)]<heapList[i]
	[
		exchange( heapList[i], heapList[parent(i)] );
		i = parent(i);
	]
{InCreaseKey end}

//算法時(shí)間復(fù)雜度(最壞)
O(lgn)

//InsertElement
算法思想:
1。堆長(zhǎng)度加1。
2。在堆最后加一個(gè)值無(wú)窮小的元素。
3。對(duì)堆最后一個(gè)元素調(diào)用InCreaseKey算法:InCreaseKey(List, n, key)。//n為堆長(zhǎng)度,key為新元素的key值

//算法描述:
{使用順序表存儲(chǔ)}
InsertElement( heapList, key )
	n = HeapSize( heapList );
	n = n + 1;
	SetHeapSize( n );
	heapList[n] = SMALL_VALUE;
	InCreaseKey(heapList, n, key);
{InsertElement end}

//算法時(shí)間復(fù)雜度(最壞)
O(lgn)


//代碼實(shí)現(xiàn)一個(gè)簡(jiǎn)陋的最大優(yōu)先隊(duì)列:
//MaxPriorityList.h
#pragma  once
#include <cassert>

template< typename T >
void	AdjustHeap_ptrArray( 
							T* heapList[],  // 傳遞的是指針數(shù)組
							int nCurrentNodePos, 
							int nHeapLength 
				   )
{
	int  nSubLeftNodePos = 2 * nCurrentNodePos + 1;
	int  nSubRightNodePos = 2 * nCurrentNodePos + 2;
	int  nLargestNodePos = -1;

	if ( nSubLeftNodePos < nHeapLength && *(heapList[nSubLeftNodePos]) > 
		*(heapList[nCurrentNodePos]) )  
	{
		nLargestNodePos = nSubLeftNodePos;
	}
	else  
		nLargestNodePos = nCurrentNodePos;

	if ( nSubRightNodePos < nHeapLength && *(heapList[nSubRightNodePos]) > 
		*(heapList[nLargestNodePos]) )
	{
		nLargestNodePos = nSubRightNodePos;
	}

	if ( nLargestNodePos != nCurrentNodePos )
	{
		T*  tempPtr = heapList[nLargestNodePos];
		heapList[nLargestNodePos] = heapList[nCurrentNodePos];
		heapList[nCurrentNodePos] = tempPtr;

		AdjustHeap_ptrArray( heapList, nLargestNodePos, nHeapLength );
	}
}


const  int nInitSize = 1000;  // 指針數(shù)組初始大小
template<typename ElementType>
class MaxPriorityList
{
	typedef  ElementType  _T;
public:
	MaxPriorityList( );
	virtual ~MaxPriorityList( );

public:
	bool	GetMaximumElement( 
		_T & maxElement
		);

	bool	ExtractMaxElement(
		_T * & pMaxElement
		);

	bool	InCreaseKey(
		int nTargetPos,
		_T &  element
		);

	bool	InsertElement(
		_T * pNewElement
		);

private:
	_T **	m_pMaxHeapList;
	int		m_maxHeapSize;
};

template<typename T>
MaxPriorityList<T>::MaxPriorityList(): m_pMaxHeapList( NULL ),
m_maxHeapSize( 0 )
{
	m_pMaxHeapList = new T*[nInitSize];
	assert( m_pMaxHeapList > 0 );
}

template<typename T>
MaxPriorityList<T>::~MaxPriorityList()
{
	if ( m_pMaxHeapList != NULL )
	{
		for ( int nPos = 0; nPos < m_maxHeapSize; nPos ++ )
		{
			T * pElement = m_pMaxHeapList[nPos];
			if ( pElement != NULL )
			{
				delete pElement;
				pElement = NULL;
			}
		}
		m_pMaxHeapList = NULL;
	}
	delete [] m_pMaxHeapList;
	m_pMaxHeapList = NULL;
}

template<typename T>
bool	MaxPriorityList<T>::GetMaximumElement( 
	_T & maxElement
	)
{
	if ( m_maxHeapSize < 1 )
		return false;

	maxElement = *(m_pMaxHeapList[0]);
	return true;
}

template<typename T>
bool	MaxPriorityList<T>::ExtractMaxElement(
	_T * & pMaxElement
	)
{
	if ( m_maxHeapSize < 1 )
		return false;

	pMaxElement = m_pMaxHeapList[0];

	m_pMaxHeapList[0] = m_pMaxHeapList[m_maxHeapSize - 1];
	m_maxHeapSize --;
	AdjustHeap_ptrArray<T>(m_pMaxHeapList, 0, m_maxHeapSize );

	return true;
}

template<typename T>
bool	MaxPriorityList<T>::InCreaseKey(
										int nTargetPos, // 位序
										_T & element  // 目標(biāo)元素
										)
{
	assert( nTargetPos >= 0 && nTargetPos < m_maxHeapSize );
	if ( nTargetPos < 0 || nTargetPos >= m_maxHeapSize )
		return false;

	if ( *(m_pMaxHeapList[nTargetPos]) > element ) // 實(shí)際比較的是key
		return false;

	*(m_pMaxHeapList[nTargetPos]) = element;  // be careful: 拷貝
	int  nCurrentPos = nTargetPos;
	while ( nCurrentPos > 0 && 
		*(m_pMaxHeapList[nCurrentPos/2]) < *(m_pMaxHeapList[nCurrentPos]))
	{
		T  temp = *(m_pMaxHeapList[nCurrentPos/2]);
		*(m_pMaxHeapList[nCurrentPos/2]) = *(m_pMaxHeapList[nCurrentPos]);
		*(m_pMaxHeapList[nCurrentPos]) = temp;

		nCurrentPos = nCurrentPos / 2;
	}

	return true;
}

template<typename T>
bool	MaxPriorityList<T>::InsertElement(
	_T * pNewElement
	)
{
	m_maxHeapSize ++;
	const double	MIN_VALUE = -35698.23;
	m_pMaxHeapList[m_maxHeapSize - 1] = pNewElement;
	// 調(diào)整
	int nCurrentPos = m_maxHeapSize - 1;
	while ( nCurrentPos > 0 &&
		*(m_pMaxHeapList[nCurrentPos/2]) < *(m_pMaxHeapList[nCurrentPos]) )
	{
		T  temp = *(m_pMaxHeapList[nCurrentPos/2]);
		*(m_pMaxHeapList[nCurrentPos/2]) = *(m_pMaxHeapList[nCurrentPos]);
		*(m_pMaxHeapList[nCurrentPos]) = temp;

		nCurrentPos = nCurrentPos / 2;
	}

	return true;
}

// .cpp 測(cè)試代碼
#include "stdafx.h"

#include "MaxPriorityList.h"  
#include <iostream>
using namespace std;

// 假設(shè)數(shù)據(jù)元素包含兩個(gè)域: double key; int handle;
class	ElementNode
{
public:
	ElementNode( )
	{
		m_key = 0.0;
		m_realObjectHandle = 0;
	}

	ElementNode( double key, int nRealObjectHandle ):
	m_key( key ), m_realObjectHandle( nRealObjectHandle )
	{
	}

	virtual ~ElementNode( ){};

public:
	bool	operator<( const ElementNode & otherElementNode ) const
	{
		return m_key < otherElementNode.m_key;
	}

	bool	operator>( const ElementNode & otherEelmentNode ) const
	{
		return m_key > otherEelmentNode.m_key;
	}

	bool	operator<( double key )
	{
		return m_key < key;
	}

	void	operator=( double key )
	{
		m_key = key;
	}

	double	GetKey( ) 
	{
		return m_key;
	}

	int		GetHandle( )
	{
		return m_realObjectHandle;
	}

private:
	double  m_key;
	int		m_realObjectHandle;
};

void	testMaxPriorityList()
{
	MaxPriorityList<ElementNode>  maxPriorityList;

	const int  nCount = 10;
	for ( int nPos = 1; nPos <= nCount; nPos ++ )
	{
		ElementNode * pNewElement = new ElementNode( nPos * 4.35, nPos );
		assert( pNewElement != NULL );
		if ( pNewElement == NULL )
			return;
		maxPriorityList.InsertElement( pNewElement );
	}

	const int  nExtractAmount = 5;
	for ( int nPos = 1; nPos <= nExtractAmount; nPos ++ )
	{
		ElementNode * pTempElement = NULL;
		bool bIsOk = maxPriorityList.ExtractMaxElement( pTempElement );
		if ( bIsOk )
		{
			assert( pTempElement != NULL );
			if ( pTempElement != NULL )
			{
				cout << pTempElement->GetKey() << " " << pTempElement->GetHandle() << endl;
				delete pTempElement;
				pTempElement = NULL;
			}
		}
		else
		{
			cout << nPos << " no extract" << endl;
		}
	}
	cout << "*******************" << endl;

	// add new node
	const int nNewAddAmount = 6;
	for ( int nPos = 1; nPos <= nNewAddAmount; nPos ++ )
	{
		ElementNode * pNewElement = new ElementNode( nPos * 10.23, nPos*10 );
		assert( pNewElement != NULL );
		if ( pNewElement == NULL )
			return;
		maxPriorityList.InsertElement( pNewElement );
	}

	// extract again
	const int  nExtractAmountTwice = nNewAddAmount + nCount - nExtractAmount;
	for ( int nPos = 1; nPos <= nExtractAmountTwice; nPos ++ )
	{
		ElementNode * pTempElement = NULL;
		bool bIsOk = maxPriorityList.ExtractMaxElement( pTempElement );
		if ( bIsOk )
		{
			assert( pTempElement != NULL );
			if ( pTempElement != NULL )
			{
				cout << pTempElement->GetKey() << " " << pTempElement->GetHandle() << endl;
				delete pTempElement;
				pTempElement = NULL;
			}
		}
		else
		{
			cout << nPos << " no extract" << endl;
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	testMaxPriorityList( );

	return 0;
}

//****************************************




?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜一区二区三区免费大片| 久久久久亚洲综合| 91丝袜呻吟高潮美腿白嫩在线观看| 国产一区二区免费看| 久久99热国产| 极品少妇一区二区三区精品视频 | 日韩一卡二卡三卡| 欧美电影一区二区| 91精品欧美一区二区三区综合在| 欧美日韩高清一区| 91精品国产综合久久香蕉的特点| 在线综合视频播放| 日韩一区二区三区高清免费看看| 欧美日韩高清一区二区不卡| 777亚洲妇女| 亚洲精品一区二区三区影院| 久久综合九色综合欧美亚洲| 久久久久国产精品人| 久久久久久影视| 中文字幕欧美激情一区| 欧美国产精品久久| 亚洲日本在线看| 亚洲一区二区三区四区五区黄| 一区二区三区视频在线看| 一区二区激情视频| 视频在线观看91| 久久不见久久见中文字幕免费| 日韩精品国产欧美| 精品一区免费av| 成人黄色av网站在线| av电影在线观看一区| 欧美三级乱人伦电影| 91精品国产日韩91久久久久久| 精品国产一区二区三区av性色| 久久久久久久综合狠狠综合| 国产精品网站在线播放| 亚洲精品日韩一| 日韩高清中文字幕一区| 国产伦精品一区二区三区视频青涩| 成人av动漫网站| 欧美日韩不卡视频| 国产精品国产三级国产普通话99 | 国产亚洲一二三区| 亚洲人亚洲人成电影网站色| 亚洲国产综合在线| 精品一区二区三区免费观看| 94-欧美-setu| 91精品国产综合久久久久久久| 日韩欧美精品在线| 91.com视频| 国产精品免费视频一区| 亚洲一级不卡视频| 男人的天堂亚洲一区| 国产精品一二三| 色屁屁一区二区| 欧美一级二级在线观看| 国产精品久久久久久亚洲毛片| 亚洲一区二区不卡免费| 久久se精品一区精品二区| 成a人片国产精品| 欧美老女人在线| 国产日韩精品一区二区三区在线| 亚洲精品欧美在线| 久久99精品久久久久久动态图| 成人免费高清在线| 欧美一区二区三区日韩| 国产日韩欧美高清在线| 亚洲你懂的在线视频| 久久99精品国产麻豆婷婷| 不卡一区中文字幕| 日韩一级二级三级| 自拍偷拍国产精品| 精品一区二区三区的国产在线播放| 成人免费视频视频| 欧美一区二区播放| 中文字幕五月欧美| 久久国产剧场电影| 99精品一区二区三区| 日韩精品一区二区三区视频播放| 国产精品久久免费看| 日韩国产欧美一区二区三区| 99re成人在线| 欧美videofree性高清杂交| 亚洲国产另类精品专区| 成人黄色a**站在线观看| 欧美精品九九99久久| 中文字幕一区二区三区乱码在线| 蜜臀av一区二区在线观看| 色久综合一二码| 国产精品网站导航| 老司机精品视频在线| 91黄色在线观看| 欧美国产日韩精品免费观看| 精品一区二区三区久久久| 欧美人狂配大交3d怪物一区| 国产亚洲视频系列| 国产一区二区三区蝌蚪| 91麻豆精品国产91久久久使用方法| 亚洲欧美日本在线| 成人国产在线观看| 国产亚洲成年网址在线观看| 免费成人美女在线观看.| 91黄色免费版| 亚洲婷婷综合久久一本伊一区 | 色成人在线视频| 国产精品女同互慰在线看| 精品亚洲国产成人av制服丝袜| 欧美妇女性影城| 亚洲精品一二三区| 97国产精品videossex| 日本一区二区综合亚洲| 国产一区中文字幕| 日韩免费观看2025年上映的电影| 亚洲国产成人tv| 欧美午夜片在线看| 亚洲午夜精品网| 91久久精品国产91性色tv| 一区二区三区四区不卡在线| 欧美中文字幕一区二区三区亚洲| 亚洲情趣在线观看| 色婷婷亚洲精品| 亚洲精选在线视频| 欧美性大战久久久久久久蜜臀| 亚洲人成亚洲人成在线观看图片| 色综合色综合色综合色综合色综合 | 在线观看av不卡| 亚洲制服丝袜一区| 欧美日韩免费观看一区三区| 日韩理论电影院| 欧美日韩国产免费一区二区| 日本成人在线网站| 欧美一区二区二区| 国产在线国偷精品免费看| 久久久久久久久久久黄色| 国产成人av电影在线| 国产精品亲子伦对白| 99这里只有久久精品视频| 亚洲女女做受ⅹxx高潮| 在线精品视频一区二区| 日韩在线a电影| 精品国产伦一区二区三区观看方式 | 午夜国产精品影院在线观看| 欧美色视频一区| 免费在线看一区| 国产午夜亚洲精品不卡| 99在线热播精品免费| 国产精品盗摄一区二区三区| 欧美丝袜自拍制服另类| 麻豆一区二区三区| 国产日韩视频一区二区三区| 91小视频免费观看| 亚洲第一搞黄网站| 欧美电影免费观看高清完整版在 | 国产精品亚洲一区二区三区妖精 | 亚洲女与黑人做爰| 欧美丰满嫩嫩电影| 国产一区激情在线| 亚洲三级电影网站| 4438亚洲最大| 国产九色精品成人porny| 亚洲靠逼com| 日韩精品一区二区三区老鸭窝| 成人精品gif动图一区| 国产精品色婷婷| 欧美日韩黄视频| 国内外成人在线| 亚洲品质自拍视频| 日韩一区二区三区视频在线| 风间由美一区二区三区在线观看| 亚洲最大色网站| 久久久三级国产网站| 欧美午夜宅男影院| 福利一区二区在线| 久久国产精品第一页| 亚洲精品你懂的| 久久久蜜桃精品| 欧美日高清视频| k8久久久一区二区三区| 日本aⅴ免费视频一区二区三区| 国产精品福利一区二区三区| 欧美欧美欧美欧美首页| fc2成人免费人成在线观看播放| 日韩成人精品在线| 亚洲精品一卡二卡| 国产午夜精品理论片a级大结局| 欧美日韩精品专区| 91小视频免费观看| 国产成人午夜视频| 午夜伦欧美伦电影理论片| 中国色在线观看另类| 中文字幕一区av| 日韩免费看的电影| 69久久夜色精品国产69蝌蚪网| proumb性欧美在线观看| 国产麻豆91精品| 美腿丝袜亚洲三区| 日韩电影一二三区| 一区二区三区在线视频播放 | 国产精品久久久久久亚洲毛片| 欧美精品久久一区二区三区|