的同义词,此时只要新建一个叶子结点并连到分支结点上即可另一种情况有同 义词,此时要把同义词的叶子结点与树断开,在断开的部位新建一个下一层的分支 结点,再把同义词和新关键字的叶子结点连到新分支结点的下一层 943 Status Trie Tree Delete Key( TrieTree&r; String Type key)/在Trie树T中删除字符 串 while(p&&p->kind== BRANCH&&κ=keyo)∥查找待删除元素 p=p->bh. ptrlord(key oD] ifp&&p->kind=LEAF&&p->lfk=key)找到了待删除元素 last->bh ptrlord(key[i-IDENULL free(p); return OK: else return error,/没找到待删除元素 i/TrieTree Delete Ke 944 void print hash( HashTable h/按第一个字母顺序输出Hash表中的所有关键字, 其中处理冲突采用线性探测开放定址法 for(=1i<=26;计+) for(j=i; Helem[j]key严=(+1)% ohashsize [sizeindex])∥线性探测 if(H(H elem].key)i)printf("%sn", H elem 3//Print Hash intH(char*sy求Hash函数 fis) return s}-96,∥求关键字第一个字母的字母序号(小写) else return 0 945 typedef*LNodeMAXSIZE] HAshtAble;/链地址Hash表类型的同义词,此时只要新建一个叶子结点并连到分支结点上即可.另一种情况,有同 义词,此时要把同义词的叶子结点与树断开,在断开的部位新建一个下一层的分支 结点,再把同义词和新关键字的叶子结点连到新分支结点的下一层. 9.43 Status TrieTree_Delete_Key(TrieTree &T,StringType key)//在 Trie 树 T 中删除字符 串 key { p=T;i=1; while(p&&p->kind==BRANCH&&i<=key[0]) //查找待删除元素 { last=p; p=p->bh.ptr[ord(key[i])]; i++; } if(p&&p->kind==LEAF&&p->lf.k=key) //找到了待删除元素 { last->bh.ptr[ord(key[i-1])]=NULL; free(p); return OK; } else return ERROR; //没找到待删除元素 }//TrieTree_Delete_Key 9.44 void Print_Hash(HashTable H)//按第一个字母顺序输出 Hash 表中的所有关键字, 其中处理冲突采用线性探测开放定址法 { for(i=1;i<=26;i++) for(j=i;H.elem[j].key;j=(j+1)%hashsize[sizeindex]) //线性探测 if(H(H.elem[j].key)==i) printf("%s\n",H.elem[j]); }//Print_Hash int H(char *s)//求 Hash 函数 { if(s) return s[0]-96; //求关键字第一个字母的字母序号(小写) else return 0; }//H 9.45 typedef *LNode[MAXSIZE] CHashTable; //链地址 Hash 表类型