分离链表法解决冲突的散列表ADT实现

数据结构定义如下:

 struct ListNode;
typedef struct ListNode *Position;
struct HashTbl;
typedef struct HashTbl *HashTable; HashTable InitializeTable(int TableSize);
void DestroyTable(HashTable H);
Position Find(ElementType Key, HashTable H);
void Insert(ElementType Key, HashTable H); struct ListNode{
ElementType Element;
Position Next;
}; typedef Position List; struct HashTbl{
int TableSize;
List *TheLists;
};

初始化散列表实现代码如下:

 HashTable InitializeTable(int TableSize){
HashTable H;
int i; if(TableSize < MinTableSize){
printf("Table size too small\n");
return NULL;
}
H = malloc(sizeof(struct HashTbl));
H->TableSize = TableSize;
H->TheLists = malloc(H->TableSize * sizeof(List));
for(i=; i<H->TableSize; i++){
H->TheLists[i] = malloc(sizeof(struct ListNode));
H->TheLists[i]->Next = NULL;
}
return H;
}

Find的实现代码如下:

 Position Find(ElementType Key, HashTable H){
Position P;
List L;
L = H->TheLists[Hash(Key, H->TableSize)];
P = L->Next;
while(P!=NULL && P->Element!=Key)
P = P->Next;
return P;
}

Insert的实现代码如下:

 void Insert(ElementType Key, HashTable H){
Position Pos, NewCell;
List L; Pos = Find(Key, H);
if(Pos != NULL){
NewCell = malloc(sizeof(struct ListNode));
L = H->TheLists[Hash(Key, H->TableSize)];
NewCell->Element = Key;
NewCell->Next = L->Next;
L->Next = NewCell;
}
}

Delete的实现代码如下:

 void Delete(ElementType Key, HashTable H){
Position P;
List L; L = H->TheLists[Hash(Key, H->TableSize)];
while(L->Next!=NULL && L->Next->Element!=Key)
L = L->Next; if(L->Next == NULL)
printf("Key not in the hashtable\n");
else{
P = L->Next;
L->Next = P->Next;
free(P);
}
}

最新文章

  1. LinkedHashMap及其源码分析
  2. [Leetcode] Permutations II
  3. 有向图的拓扑排序算法JAVA实现
  4. js格式化日期 年月日
  5. 请求webservice接口的某方法数据
  6. Svn win7系统下状态图标不显示-转载
  7. linux 命令之系统活动报告sar
  8. Controltemplate datatemplate
  9. 使用ncc分析代码
  10. Hadoop管理员的十个最佳实践(转)
  11. [未完成]关于POI的使用
  12. JAVA GUI学习 - JSplitPane分屏组件学习
  13. Python进阶之函数式编程
  14. Python 笔记 v1 - json和字符串互转
  15. Nginx编译安装lua-nginx-module
  16. 使用cocoa捕获dock栏中的“退出”事件,解决qt开发的应用程序退出异常的问题
  17. 在linux系统中安装VSCode(Visual Studio Code)和图标的创建方式
  18. Java指定保留小数位数的方法
  19. c# 设计模式 之:装饰模式
  20. Sailing

热门文章

  1. SWT开发工具
  2. Deep Learning 资料总结
  3. springmvc pager-taglib 分页,bootstrap样式
  4. Linux常用系统命令大全
  5. 【轮子狂魔】抛弃IIS,打造个性的Web Server - WebAPI/Lua/MVC(附带源码)
  6. 动态加载与插件系统的初步实现(四):解析JSON、扩展Fiddler
  7. 【转】将Centos的yum源更换为国内的阿里云源
  8. pdo的用处,用法
  9. oracle vm virtualbox 保存虚拟系统,重装后使用
  10. 【SIKIA计划】_04_C#中级教程 (2015版)笔记