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

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

?? hashavltree.c

?? 《多任務下的數據結構》隨書的源代碼。探討多任務下的常用數據結構的實現
?? C
字號:
/*
 * Copyright (c) 2000-2008
 * Author: Weiming Zhou
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  
 */

#include <windows.h>
#include "capiglobal.h"
#include "BinTree.h"
#include "AVLTree.h"
#include "HashAVLTree.h"

/**	哈希AVL樹的創建函數

	@param	UINT uBucketCount - 哈希AVL樹中BUCKET數量	
	@return	HASHAVLTREE * - 失敗返回NULL,成功返回創建的哈希AVL樹指針	
*/
HASHAVLTREE *HashAVLTree_Create(UINT uBucketCount)
{
    HASHAVLTREE	*pTree;
    
    if ( uBucketCount == 0 )
    {
        return NULL;
    }
    
    pTree = (HASHAVLTREE *)malloc( sizeof(HASHAVLTREE) );
    if ( pTree == NULL )
    {
        return NULL;
    }
    
    pTree->uNodeCount = 0;
    pTree->uBucketCount = uBucketCount;
    
    pTree->ppBucket = (AVLTREENODE **)malloc( uBucketCount 
        * sizeof(AVLTREENODE *));
    
    if (pTree->ppBucket == NULL)
    {
        free( pTree );
        return NULL;
    }
    
    memset(pTree->ppBucket, 0, uBucketCount * sizeof(AVLTREENODE *));
    
    pTree->pCurEntry = NULL;
    pTree->uCurBucketNo = 0;
    
    return pTree;
}

/**	哈希AVL樹的釋放函數
        將哈希AVL樹中所有數據和節點及整個哈希AVL樹整體釋放掉

	@param	HASHAVLTREE *pHashAVLTree - 要釋放的哈希AVL樹指針	
	@param	DESTROYFUNC DestroyFunc - 數據釋放回調函數	
	@return	void - 無	
*/
void HashAVLTree_Destroy(HASHAVLTREE *pHashAVLTree, DESTROYFUNC DestroyFunc)
{
    AVLTREENODE **ppBucket;
    AVLTREENODE  *pNode;
    UINT i;
    
    if ( pHashAVLTree == NULL )
    {
        return;
    }
    ppBucket = pHashAVLTree->ppBucket;
    for ( i = 0; i < pHashAVLTree->uBucketCount; i++ ) 
    {
        pNode = ppBucket[i];
        BinTreeBaseNode_Destroy(pNode, DestroyFunc);
    }
    free(ppBucket);
    
    /* 將ppbucket設成空指針以避免哈希表被重新使用時造成內存泄漏 */
    pHashAVLTree->ppBucket = NULL;
    
    free( pHashAVLTree );    
}


/**	哈希AVL樹的插入函數

	@param	HASHAVLTREE *pHashAVLTree - 哈希AVL樹指針	
	@param	void *pData - 要插入的數據指針	
	@param	HASHFUNC HashFunc - 哈希函數	
	@param	COMPAREFUNC CompareFunc - 數據比較回調函數	
	@return	INT - 失敗返回CAPI_FAILED,成功返回CAPI_SUCCESS.	
*/
INT HashAVLTree_Insert(HASHAVLTREE *pHashAVLTree, void *pData, 
                       HASHFUNC HashFunc, COMPAREFUNC CompareFunc)
{
    UINT	uIndex;
    
    if ( pHashAVLTree == NULL || pData == NULL || HashFunc == NULL )
    {
        return CAPI_FAILED;
    }
    
    uIndex = (*HashFunc)( pData, pHashAVLTree->uBucketCount );
    
    /* 將新節點插入到鏈表的頭部 */
    AVLTreeNode_Insert(&((pHashAVLTree->ppBucket)[uIndex]), pData, CompareFunc);
    
    pHashAVLTree->uNodeCount += 1;
    
    return CAPI_SUCCESS;
}

/**	哈希AVL樹的節點刪除函數

	@param	HASHAVLTREE *pHashAVLTree - 哈希AVL樹指針	
	@param	void *pData - 數據指針	
	@param	HASHFUNC HashFunc - 哈希函數	
	@param	COMPAREFUNC CompareFunc - 數據比較回調函數	
	@param	DESTROYFUNC DestroyFunc - 數據釋放回調函數	
	@return	INT - 失敗返回CAPI_FAILED,成功返回CAPI_SUCCESS.	
*/
INT HashAVLTree_Delete(HASHAVLTREE *pHashAVLTree, void *pData, 
                      HASHFUNC HashFunc, 
                      COMPAREFUNC CompareFunc,
                      DESTROYFUNC DestroyFunc)
{
    UINT	    uIndex;
    
    if ( pHashAVLTree == NULL || pData == NULL || HashFunc == NULL 
        || CompareFunc == NULL )
    {
        return CAPI_FAILED;
    }
    
    uIndex = (*HashFunc)( pData, pHashAVLTree->uBucketCount );

    if ( AVLTreeNode_Delete(&((pHashAVLTree->ppBucket)[uIndex]), pData, 
        CompareFunc, DestroyFunc) != CAPI_NOT_FOUND )
    {
        pHashAVLTree->uNodeCount -= 1;
    }

    return CAPI_SUCCESS;
}

/**	哈希AVL樹的查找函數

	@param	HASHAVLTREE *pHashAVLTree - 哈希AVL樹指針	
	@param	void *pData - 要查找的數據指針	
	@param	HASHFUNC HashFunc - 哈希函數	
	@param	COMPAREFUNC CompareFunc - 數據比較回調函數	
	@return	void * - 失敗返回NULL,成功返回找到的節點中的數據指針	
*/
void * HashAVLTree_Find(HASHAVLTREE *pHashAVLTree, void *pData, 
                       HASHFUNC HashFunc, 
                       COMPAREFUNC CompareFunc )
{
    UINT            uIndex;
    AVLTREENODE *   pNode;
    
    if ( pHashAVLTree == NULL || HashFunc == NULL || CompareFunc == NULL )
    {
        return NULL;
    }
    
    uIndex = (*HashFunc)( pData, pHashAVLTree->uBucketCount );
    pNode = (pHashAVLTree->ppBucket)[uIndex];

    return BinTree_Find(pNode, pData, CompareFunc);
}


/**	哈希AVL樹的逐個節點遍歷開始函數

	@param	HASHAVLTREE *pHashAVLTree - 哈希AVL樹指針	
	@return	void - 無	
*/
void HashAVLTree_EnumBegin(HASHAVLTREE *pHashAVLTree)
{
    AVLTREENODE *pCursor;

    pHashAVLTree->uCurBucketNo = 0;
    pCursor = pHashAVLTree->ppBucket[0];
    
    if ( pCursor != NULL )
    {
        while ( pCursor->pLeft != NULL )
        {
            pCursor = pCursor->pLeft;
        }
    }
    pHashAVLTree->pCurEntry = pCursor;
}

/**	哈希AVL樹的逐個節點遍歷函數

	@param	HASHAVLTREE *pHashAVLTree - 哈希AVL樹指針	
	@return	void * - 返回遍歷的節點數據指針,如果遍歷完則返回NULL.	
*/
void *HashAVLTree_EnumNext(HASHAVLTREE *pHashAVLTree)
{
    void *pData;
    AVLTREENODE *pCursor;
    
    pCursor = pHashAVLTree->pCurEntry;
    while ( pCursor == NULL )
    {
        pHashAVLTree->uCurBucketNo += 1;
        if ( pHashAVLTree->uCurBucketNo >= pHashAVLTree->uBucketCount )
        {
            return NULL;
        }
        pCursor = pHashAVLTree->ppBucket[pHashAVLTree->uCurBucketNo];
    }
    
    if ( pCursor == NULL )
    {
        return NULL;
    }

    while ( pCursor->pLeft != NULL )
    {
        pCursor = pCursor->pLeft;
    }

    pData = pCursor->pData;
    
    if ( pCursor->pRight != NULL )
    {
        pCursor = pCursor->pRight;
        while ( pCursor->pLeft != NULL )
        {
            pCursor = pCursor->pLeft;
        }
    }
    else
    {
        AVLTREENODE *pParent = pCursor->pParent;
        while ( pParent != NULL && pParent->pRight == pCursor )
        {
            pCursor = pParent;
            pParent = pParent->pParent;
        }
        pCursor = pParent;
    }
    pHashAVLTree->pCurEntry = pCursor;
    
    return pData;    
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合亚洲91| 日韩免费一区二区| 欧美一区二区视频网站| 久久精品亚洲麻豆av一区二区| 一区二区高清视频在线观看| 国产激情视频一区二区在线观看| 7777女厕盗摄久久久| √…a在线天堂一区| 国产九色精品成人porny| 欧美日本国产一区| 一区二区欧美国产| 99r国产精品| 国产亚洲欧洲997久久综合| 丝袜国产日韩另类美女| 色狠狠av一区二区三区| 国产精品美女久久久久久久久 | 久久精品国产999大香线蕉| 在线免费观看视频一区| 亚洲欧美综合另类在线卡通| 成人永久免费视频| 久久综合999| 国产在线国偷精品免费看| 9191国产精品| 偷拍亚洲欧洲综合| 7777精品伊人久久久大香线蕉经典版下载 | 国产网站一区二区三区| 免费高清不卡av| 91精品国产综合久久久久久漫画| 亚洲夂夂婷婷色拍ww47| 色呦呦国产精品| 亚洲欧美偷拍另类a∨色屁股| 成人激情av网| 国产精品美女久久久久久久久久久 | 亚洲成a人片在线观看中文| 91丨九色丨尤物| 亚洲精品福利视频网站| 色婷婷久久综合| 亚洲国产精品天堂| 欧美天天综合网| 日韩影院免费视频| 欧美大度的电影原声| 精品一区二区三区在线观看国产 | 欧美日韩一级二级三级| 亚洲444eee在线观看| 91精品福利在线一区二区三区| 亚洲国产综合色| 在线播放国产精品二区一二区四区| 性久久久久久久| 欧美大肚乱孕交hd孕妇| 国产成人在线视频免费播放| 中文字幕中文字幕中文字幕亚洲无线 | 欧美日本一道本| 精品中文字幕一区二区| 国产精品国产自产拍在线| 91丨porny丨最新| 亚洲一二三四区不卡| 欧美一卡二卡在线| 大尺度一区二区| 亚洲高清在线精品| 欧美不卡123| 91视频在线观看免费| 日韩有码一区二区三区| 国产欧美日韩在线看| 欧美午夜电影一区| 国内精品久久久久影院色| 亚洲天堂2014| 精品电影一区二区三区| 99久久婷婷国产综合精品| 日本午夜精品一区二区三区电影| 国产精品少妇自拍| 欧美日韩国产首页| 成人丝袜视频网| 美女视频黄免费的久久 | 日韩国产在线观看| 国产精品乱码妇女bbbb| 日韩一区二区三区四区五区六区| 国产经典欧美精品| 日本人妖一区二区| 亚洲欧美国产高清| 久久综合色8888| 欧美色图在线观看| 色综合中文字幕国产| 日韩经典一区二区| 亚洲视频一二三区| 久久久国产精华| 欧美久久久久久久久中文字幕| 成人av网址在线观看| 久久99精品久久久久久| 亚洲3atv精品一区二区三区| 亚洲欧美日韩国产另类专区 | 精品国产青草久久久久福利| 色哦色哦哦色天天综合| 成人性生交大片免费看视频在线 | 精品一区中文字幕| 亚洲成人先锋电影| 亚洲精品高清在线| 亚洲男人的天堂网| 中文字幕在线一区免费| 欧美激情在线一区二区三区| 精品sm捆绑视频| 日韩一区二区视频| 国产精品麻豆欧美日韩ww| 欧美一级理论性理论a| 欧美日韩情趣电影| 欧美美女视频在线观看| 欧洲亚洲精品在线| 欧美日韩情趣电影| 在线播放中文字幕一区| 欧美一级一区二区| 91精品国产综合久久蜜臀| 欧美日韩不卡一区二区| 欧美肥大bbwbbw高潮| 91精品在线观看入口| 日韩午夜精品电影| 日韩精品专区在线| 欧美精品一区二区三| 久久久久久亚洲综合影院红桃 | 欧美成人一区二区三区片免费 | 欧美亚洲国产一区二区三区va | 懂色av一区二区夜夜嗨| 国产成人亚洲综合a∨婷婷| 国产精品中文欧美| 成人免费毛片嘿嘿连载视频| 91日韩精品一区| 欧洲精品在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 成人激情免费视频| 岛国精品一区二区| 91亚洲精华国产精华精华液| 在线观看三级视频欧美| 欧美一级久久久| 欧美激情一区不卡| 亚洲激情av在线| 天天av天天翘天天综合网色鬼国产 | 午夜成人免费视频| 久久99热99| 99久久99久久综合| 欧美日韩夫妻久久| 久久久久久久精| 亚洲一区二区三区视频在线 | 国产欧美日产一区| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲成在人线在线播放| 久久99热99| 色视频欧美一区二区三区| 日韩一区二区在线观看视频播放| 国产日韩高清在线| 午夜欧美视频在线观看| 国产一区二区免费看| 91成人看片片| 久久精品在线免费观看| a亚洲天堂av| 欧美日韩高清在线| 国产精品国产三级国产普通话三级 | 91精品国产91久久综合桃花| 国产日韩三级在线| 亚洲r级在线视频| 国产传媒日韩欧美成人| 欧美性xxxxxx少妇| 国产精品蜜臀在线观看| 麻豆成人久久精品二区三区红| 91网站最新地址| 久久久久一区二区三区四区| 午夜av一区二区| 99re亚洲国产精品| www激情久久| 三级久久三级久久久| 99精品视频在线播放观看| 日韩一区二区三区在线| 亚洲三级视频在线观看| 国精品**一区二区三区在线蜜桃| 欧美视频在线不卡| 亚洲欧美日韩国产手机在线| 国产91清纯白嫩初高中在线观看| 欧美放荡的少妇| 亚洲香肠在线观看| 99久久精品免费| 欧美国产1区2区| 国产精品一区二区久激情瑜伽| 欧美高清激情brazzers| 一区二区三区在线观看网站| 成人va在线观看| 国产片一区二区三区| 久久精品av麻豆的观看方式| 欧美日本视频在线| 亚洲一本大道在线| 欧美在线播放高清精品| 亚洲人精品午夜| 99vv1com这只有精品| 国产精品美女久久久久久久| 风间由美中文字幕在线看视频国产欧美 | 国产精品1024| 国产日韩欧美不卡在线| 国产曰批免费观看久久久| 欧美va亚洲va在线观看蝴蝶网| 日韩国产在线一| 日韩精品一区二区三区老鸭窝| 美日韩一区二区三区| 欧美不卡视频一区| 国产精品18久久久久|