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

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

?? minpq.c

?? 基于SIFT快速匹配算法
?? C
字號:
/*
Functions and structures for implementing a minimizing priority queue.

Copyright (C) 2006  Rob Hess <hess@eecs.oregonstate.edu>

@version 1.1.1-20070330
*/
#include "minpq.h"
#include "utils.h"

#include <limits.h>


/************************* Local Function Prototypes *************************/

void restore_minpq_order( struct pq_node*, int, int );
void decrease_pq_node_key( struct pq_node*, int, int );


/************************** Local Inline Functions ***************************/

/* returns the array index of element i's parent */
static __inline int parent( int i )
{
	return ( i - 1 ) / 2;
}


/* returns the array index of element i's right child */
static __inline int right( int i )
{
	return 2 * i + 2;
}


/* returns the array index of element i's left child */
static __inline int left( int i )
{
	return 2 * i + 1;
}


/********************** Functions prototyped in minpq.h **********************/


/*
Creates a new minimizing priority queue.
*/
struct min_pq* minpq_init()
{
	struct min_pq* min_pq;

	min_pq = malloc( sizeof( struct min_pq ) );
	min_pq->pq_array = calloc( MINPQ_INIT_NALLOCD, sizeof( struct pq_node ) );
	min_pq->nallocd = MINPQ_INIT_NALLOCD;
	min_pq->n = 0;

	return min_pq;
}



/**
Inserts an element into a minimizing priority queue.

@param min_pq a minimizing priority queue
@param data the data to be inserted
@param key the key to be associated with \a data

@return Returns 0 on success or 1 on failure.
*/
int minpq_insert( struct min_pq* min_pq, void* data, int key )
{
	int n = min_pq->n;

	/* double array allocation if necessary */
	if( min_pq->nallocd == n )
	{
		min_pq->nallocd = array_double( &min_pq->pq_array, min_pq->nallocd,
										sizeof( struct pq_node ) );
		if( ! min_pq->nallocd )
		{
			fprintf( stderr, "Warning: unable to allocate memory, %s, line %d\n",
					__FILE__, __LINE__ );
			return 1;
		}
	}

	min_pq->pq_array[n].data = data;
	min_pq->pq_array[n].key = INT_MAX;
	decrease_pq_node_key( min_pq->pq_array, min_pq->n, key );
	min_pq->n++;

	return 0;
}



/*
Returns the element of a minimizing priority queue with the smallest key
without removing it from the queue.

@param min_pq a minimizing priority queue

@return Returns the element of \a min_pq with the smallest key or NULL
if \a min_pq is empty
*/
void* minpq_get_min( struct min_pq* min_pq )
{
	if( min_pq->n < 1 )
	{
		fprintf( stderr, "Warning: PQ empty, %s line %d\n", __FILE__, __LINE__ );
		return NULL;
	}
	return min_pq->pq_array[0].data;
}



/*
Removes and returns the element of a minimizing priority queue with the
smallest key.

@param min_pq a minimizing priority queue

@return Returns the element of \a min_pq with the smallest key of NULL
if \a min_pq is empty
*/
void* minpq_extract_min( struct min_pq* min_pq )
{
	void* data;

	if( min_pq->n < 1 )
	{
		fprintf( stderr, "Warning: PQ empty, %s line %d\n", __FILE__, __LINE__ );
		return NULL;
	}
	data = min_pq->pq_array[0].data;
	min_pq->n--;
	min_pq->pq_array[0] = min_pq->pq_array[min_pq->n];
	restore_minpq_order( min_pq->pq_array, 0, min_pq->n );

	return data;
}


/*
De-allocates the memory held by a minimizing priorioty queue

@param min_pq pointer to a minimizing priority queue
*/
void minpq_release( struct min_pq** min_pq )
{
	if( ! min_pq )
	{
		fprintf( stderr, "Warning: NULL pointer error, %s line %d\n", __FILE__,
				__LINE__ );
		return;
	}
	if( *min_pq  &&  (*min_pq)->pq_array )
	{
		free( (*min_pq)->pq_array );
		free( *min_pq );
		*min_pq = NULL;
	}
}


/************************ Functions prototyped here **************************/

/*
Decrease a minimizing pq element's key, rearranging the pq if necessary

@param pq_array minimizing priority queue array
@param i index of the element whose key is to be decreased
@param key new value of element <EM>i</EM>'s key; if greater than current
	key, no action is taken
*/
void decrease_pq_node_key( struct pq_node* pq_array, int i, int key )
{
	struct pq_node tmp;

	if( key > pq_array[i].key )
		return;

	pq_array[i].key = key;
	while( i > 0  &&  pq_array[i].key < pq_array[parent(i)].key )
	{
		tmp = pq_array[parent(i)];
		pq_array[parent(i)] = pq_array[i];
		pq_array[i] = tmp;
		i = parent(i);
	}
}



/*
Recursively restores correct priority queue order to a minimizing pq array

@param pq_array a minimizing priority queue array
@param i index at which to start reordering
@param n number of elements in \a pq_array
*/
void restore_minpq_order( struct pq_node* pq_array, int i, int n )
{
	struct pq_node tmp;
	int l, r, min = i;

	l = left( i );
	r = right( i );
	if( l < n )
		if( pq_array[l].key < pq_array[i].key )
			min = l;
	if( r < n )
		if( pq_array[r].key < pq_array[min].key )
			min = r;

	if( min != i )
	{
		tmp = pq_array[min];
		pq_array[min] = pq_array[i];
		pq_array[i] = tmp;
		restore_minpq_order( pq_array, min, n );
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品在线| 美美哒免费高清在线观看视频一区二区| 色哟哟国产精品免费观看| 美女被吸乳得到大胸91| 亚洲精品乱码久久久久久| 久久精品亚洲精品国产欧美| 欧美日产国产精品| 欧美人狂配大交3d怪物一区| 激情文学综合网| 午夜欧美一区二区三区在线播放| 国产精品国产三级国产普通话三级| 日韩精品最新网址| 日韩精品中文字幕一区| 日韩欧美成人激情| 欧美xxxx在线观看| 91精品婷婷国产综合久久性色 | 亚洲免费观看高清| 亚洲免费观看高清完整版在线观看 | 在线综合亚洲欧美在线视频| 国产精品系列在线播放| 国产精品一区二区男女羞羞无遮挡 | 日韩欧美国产综合一区| 欧美xxxxx牲另类人与| 欧洲精品一区二区三区在线观看| 欧美又粗又大又爽| 欧美r级在线观看| 26uuuu精品一区二区| 欧美激情一区不卡| 亚洲柠檬福利资源导航| 国产欧美日韩精品a在线观看| 亚洲伦理在线免费看| 五月综合激情日本mⅴ| 日韩电影免费在线看| 国产成人av电影在线播放| 欧美三级在线视频| 久久网站最新地址| 日韩专区一卡二卡| 99v久久综合狠狠综合久久| 欧美一级欧美三级| 亚洲三级在线看| 国产精品99久久久久久似苏梦涵 | 国产精品成人网| 日本欧美一区二区三区乱码| 成人高清在线视频| 日韩精品一区二区三区在线播放 | 亚洲精品国产a| 国产精品中文字幕日韩精品| 欧美日韩在线播放| 一区二区三区欧美日韩| 成人的网站免费观看| 色综合中文综合网| 日韩久久免费av| 秋霞影院一区二区| 欧美疯狂做受xxxx富婆| 亚洲黄色片在线观看| 99久久久精品| 亚洲欧美一区二区三区极速播放 | 久久婷婷综合激情| 成人黄色777网| 偷拍日韩校园综合在线| 欧美成人精精品一区二区频| 国产成人一区在线| 亚洲人被黑人高潮完整版| 欧美性受极品xxxx喷水| 精久久久久久久久久久| 亚洲香肠在线观看| 久久精品在线免费观看| 欧美午夜电影网| 国产精品资源网| 午夜精品福利一区二区三区av| 日韩精品一区二区三区swag| 国产精品18久久久久久久久久久久| 国产精品久99| 国产欧美一区二区精品秋霞影院| 欧美日韩在线播放三区| 成人99免费视频| 丁香激情综合五月| 精品一区二区三区免费播放| 樱花影视一区二区| 国产婷婷色一区二区三区| 欧美日韩一卡二卡三卡| 波多野结衣精品在线| 成人午夜私人影院| 东方欧美亚洲色图在线| 国产电影精品久久禁18| 国产伦精一区二区三区| 黑人巨大精品欧美一区| 久久精品999| 日本sm残虐另类| 韩国女主播一区| 国产电影精品久久禁18| 粉嫩av一区二区三区在线播放| 国内一区二区在线| 国产激情一区二区三区四区| 国内精品视频666| 国产成人在线观看免费网站| www.欧美.com| 99久久精品国产导航| 91啦中文在线观看| 91精品国产综合久久精品| 日韩亚洲欧美在线| 国产精品伦一区| 亚洲成a人v欧美综合天堂| 视频一区在线播放| 国模套图日韩精品一区二区| 丁香桃色午夜亚洲一区二区三区| 成人av免费在线| 91精品久久久久久蜜臀| 欧美国产亚洲另类动漫| 一区二区三区自拍| 韩国av一区二区| 欧美在线不卡一区| 欧美哺乳videos| 亚洲激情男女视频| 国产成人av一区二区三区在线 | 欧美性猛交一区二区三区精品| 在线一区二区三区四区五区| 日韩欧美国产电影| 一区二区高清视频在线观看| 国产一区二区精品久久99| 色一情一伦一子一伦一区| 精品久久人人做人人爽| 综合欧美一区二区三区| 国产成人精品三级| 久久久久久久久伊人| 日本va欧美va瓶| 欧美一区二区三区四区久久| 综合久久给合久久狠狠狠97色| 蜜臀久久久久久久| 欧洲在线/亚洲| 亚洲精品美腿丝袜| jizz一区二区| 中文字幕在线不卡一区二区三区| 久久99在线观看| 欧美熟乱第一页| 亚洲精品网站在线观看| 国产成人免费视| 亚洲天堂av老司机| 91国偷自产一区二区使用方法| 一色屋精品亚洲香蕉网站| aaa国产一区| 亚洲六月丁香色婷婷综合久久| 色综合天天做天天爱| 亚洲免费观看高清在线观看| 在线这里只有精品| 日日欢夜夜爽一区| 2023国产精品| 高清不卡一区二区在线| 3atv在线一区二区三区| 激情五月婷婷综合网| 国产精品乱人伦| 欧美猛男男办公室激情| 国产精品原创巨作av| 亚洲欧美日韩国产一区二区三区| 成人的网站免费观看| 午夜精品aaa| 亚洲色图一区二区三区| 欧美一卡二卡三卡| 成人avav影音| 激情深爱一区二区| 一区二区三区四区在线播放| 欧美电影免费提供在线观看| 成人亚洲一区二区一| 免费高清成人在线| 亚洲免费在线电影| 亚洲欧洲无码一区二区三区| 欧美蜜桃一区二区三区 | 久久综合久久综合久久| 欧美视频第二页| 91原创在线视频| 国产不卡视频在线观看| 九九视频精品免费| 亚洲成a人片在线观看中文| 亚洲精品videosex极品| 精品久久久三级丝袜| 欧美一区二区三区影视| 在线播放日韩导航| 欧美做爰猛烈大尺度电影无法无天| 国产精品一区二区免费不卡 | 正在播放亚洲一区| 欧美三级视频在线| 欧美人与性动xxxx| 欧美人xxxx| 欧美xxxxxxxx| 国产精品久久久久婷婷| 国产精品久久久久久久久动漫 | 国产在线精品不卡| 国产麻豆日韩欧美久久| 黄色资源网久久资源365| 国产精品一二三在| 国产精品自在在线| 国产成人在线色| 成人高清视频免费观看| 色婷婷精品大在线视频| 欧美福利电影网| 国产精品久久久久久久久搜平片| 亚洲天堂成人在线观看| 免费视频一区二区| 成人小视频在线| 制服丝袜在线91|