📄 6_2_7 哈希avl树的编码实现 - 《多任务下的数据结构与算法》 - 免费试读 - book_csdn_net.htm
字号:
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">成功返回找到的节点中的数据指针</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">失败返回</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">NULL</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">void *HashAVLTree_Find( HASHAVLTREE
*pHashAVLTree, void *pData, </SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
HASHFUNC HashFunc, COMPAREFUNC CompareFunc )</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> UINT
uIndex</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> AVLTREENODE
*pNode</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> if (
pHashAVLTree == NULL || HashFunc == NULL || CompareFunc == NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
return NULL</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> uIndex =
(*HashFunc)( pData, pHashAVLTree->uBucketCount )</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> pNode =
(pHashAVLTree->ppBucket)[uIndex]</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> return
BinTree_Find(pNode, pData, CompareFunc)</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US>/**
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">哈希</SPAN><SPAN lang=EN-US>AVL</SPAN><SPAN
style="FONT-FAMILY: 华康简宋">树的逐个节点遍历开始函数</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @param
HASHAVLTREE *pHashAVLTree</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">哈希</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">AVL</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">树指针</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @return
void</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">无</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">void HashAVLTree_EnumBegin(HASHAVLTREE
*pHashAVLTree)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> AVLTREENODE
*pCursor</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
pHashAVLTree->uCurBucketNo = 0</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> pCursor =
pHashAVLTree->ppBucket[0]</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> if ( pCursor
!= NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
while ( pCursor->pLeft != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
pCursor = pCursor->pLeft</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
pHashAVLTree->pCurEntry = pCursor</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US>/**
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">哈希</SPAN><SPAN lang=EN-US>AVL</SPAN><SPAN
style="FONT-FAMILY: 华康简宋">树的逐个节点遍历函数</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @param
HASHAVLTREE *pHashAVLTree</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">哈希</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">AVL</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">树指针</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @return
void *</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">返回遍历的节点数据指针,如果遍历完则返回</SPAN><SPAN
lang=EN-US style="FONT-SIZE: 9pt">NULL</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">void *HashAVLTree_EnumNext(HASHAVLTREE
*pHashAVLTree)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> void
*pData</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> AVLTREENODE
*pCursor</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> pCursor =
pHashAVLTree->pCurEntry</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> while (
pCursor == NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
pHashAVLTree->uCurBucketNo += 1</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
if ( pHashAVLTree->uCurBucketNo >= pHashAVLTree->uBucketCount
)</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.2pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
return NULL</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
pCursor = pHashAVLTree->ppBucket[pHashAVLTree->uCurBucketNo]</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> if ( pCursor
== NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
return NULL</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> while (
pCursor->pLeft != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
pCursor = pCursor->pLeft</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> pData =
pCursor->pData</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> if (
pCursor->pRight != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 15pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> &n
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -