?? p362.cpp
字號(hào):
const int MaxKeySize = 25; typedef enum { branch, element } NODETYPE; class KeyType { //關(guān)鍵碼的類型定義 public: char ch[MaxKeySize]; //存放關(guān)鍵碼的字符數(shù)組 int currentSize; //關(guān)鍵碼的長(zhǎng)度 int operator == (const KeyType &); } ; template <class RecordNode> class Trie; template <class RecordNode> class TrieNode { //Trie樹(shù)結(jié)點(diǎn)的類定義 friend class Trie<RecordNode>; //友元類 protected: NODETYPE NodeType; //結(jié)點(diǎn)分類 union NodeType { //結(jié)點(diǎn)結(jié)構(gòu)定義 struct { //分支結(jié)點(diǎn) int num; //在分支結(jié)點(diǎn)中非空指針個(gè)數(shù) TrieNode *link[27]; //下標(biāo)為'b', 'a', 'b', …, 'z'的指針數(shù)組 } brch; struct { //元素結(jié)點(diǎn) KeyType key; //關(guān)鍵碼 RecordNode *recptr; //指向?qū)嶋H數(shù)據(jù)記錄的指針 } elem; }data; }; template <class RecordNode> class Trie { //Trie樹(shù)的類定義 private: TrieNode<RecordNode> *root, *current; //Trie的根指針和當(dāng)前指針 public: RecordNode* Search ( const KeyType & ); int Insert ( const KeyType & ); int Delete ( const KeyType & ); }; template <class RecordNode> RecordNode* Trie<RecordNode>::Search ( const KeyType & x ) { //在一棵Trie樹(shù)上搜索關(guān)鍵碼x。設(shè)第i-1層的分支是由關(guān)鍵碼的第i個(gè)字符決定的。 KeyType k = x; concatenate ( k, 'b' ); //在搜索值后面連接一個(gè)結(jié)束符'b' current = root; int i = 0; //從根開(kāi)始,先在結(jié)點(diǎn)中判斷 while ( (current) && (current->NodeType != element) && (i <= k.ch[i]) ) { current = current->data.brch.link[k.ch[i]]; i = i++; }; //從根向下逐層比較, ord (k.ch[i])是字符k.ch[i]在字母表中的序號(hào), 'b'是第0個(gè) if ( (current) && current->NodeType == element && current->data.elem.key == x ) return current->data.elem.recptr; //找到, 返回對(duì)應(yīng)記錄位置 else return 0; //沒(méi)有找到, 返回空地址 } int KeyType:: operator == (const KeyType & d) { if (currentSize!=d.currentSize) return 0; for (int i=0;i<currentSize;i++) if (ch[i]!=d.ch[i]) return 0; return 1; };
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -