分离链接散列表--C语言实现
来源:互联网 发布:java视频压缩技术 编辑:程序博客网 时间:2024/04/20 04:29
hashtable.h
#ifndef _HASHTABLE_H_#define _HASHTABLE_H_#define MinTableSize 100#define Prime 10007struct ListNode;typedef struct ListNode* Position;struct HashTbl;typedef struct HashTbl* HashTable;typedef int ElementType;typedef Position List;HashTable InitializeTable(int TableSize);void DestroyTable(HashTable H);Position Find(ElementType Key, HashTable H);void Insert(ElementType Key, HashTable H);ElementType Retrieve(Position P);#endif
hashtable.c
#include<stdio.h>#include<stdlib.h>#include"hashtable.h"struct ListNode{ ElementType Element; Position Next;};struct HashTbl{ int TableSize; List* TheLists;};int Hash(ElementType Key,int TableSize){ return Key%TableSize;//简化问题,把Key当做数字处理}HashTable InitializeTable(int TableSize){ HashTable H; int i; if (TableSize < MinTableSize) { printf("ERROR!\n"); return NULL; } H = (HashTable)malloc(sizeof(struct HashTbl)); if (H == NULL) { printf("FAILURE!\n"); exit(EXIT_FAILURE); } H->TableSize = Prime;//Prime 最好是一个根据TableSize变化的质数。 H->TheLists = (List *)malloc(sizeof(List)*H->TableSize); if (H->TheLists == NULL) { printf("FAILURE!\n"); exit(EXIT_FAILURE); } for (i = 0; i < H->TableSize;i++) { H->TheLists[i] = (List)malloc(sizeof(struct ListNode)); if (H->TheLists[i] == NULL) { printf("FAILURE!\n"); exit(EXIT_FAILURE); } else H->TheLists[i]->Next = NULL; } return H;}void DestroyTable(HashTable H){ for (int i = 0; i < H->TableSize; i++) { Position temp=H->TheLists[i]->Next; H->TheLists[i]->Next = NULL; while (temp != NULL) { Position t = temp->Next; free(temp); temp = t; } }}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;}void Insert(ElementType Key, HashTable H){ Position Pos, NewCell; List L; Pos = Find(Key, H); if (Pos == NULL) { NewCell = (Position)malloc(sizeof(struct ListNode)); if (NewCell == NULL) { printf("FAILURE!\n"); exit(EXIT_FAILURE); } else { L = H->TheLists[Hash(Key, H->TableSize)]; NewCell->Element = Key; NewCell->Next = L->Next; L->Next = NewCell; } }}ElementType Retrieve(Position P){ if(!P) return P->Element; return 0;}
0 0
- 分离链接散列表--C语言实现
- 分离链接散列表实现文件C语言
- 散列表的C语言实现-分离链接法
- 分离链接散列表头文件C语言
- 散列表实现(分离链接法)
- 分离链接法实现散列表
- 分离链接散列表
- 分离链接散列表
- 分离链接散列表
- c语言分离链接法
- 分离链接法解决hash冲突问题(C语言实现)
- 数据结构与算法分析-分离链接散列表的实现
- js-数据结构-实现散列表(分离链接)
- 数据结构与算法——散列表类的C++实现(分离链接散列表)
- 分离链接散列表的删除例程
- 散列表数据结构之一:分离链接法
- 散列表——分离链接法
- 散列表分离链接法初始化、插入、删去等操作(c)
- View滑动效果的七种实现方式
- android开发技巧——仿新版QQ锁屏下弹窗
- VC++6.0显示cannot compile the file***:no compile tool is associated with the file extension.
- YUV420P格式分析
- Java list的用法排序及遍历
- 分离链接散列表--C语言实现
- delphi中register, pascal, cdecl, stdcall, safecall
- RIENX格式(中):2.10版本文件实例及展示
- Extjs4.2 表单上传success : function没执行
- “Ceph浅析”系列
- this.parent() update必须有
- jquery ezUI 双击行记录弹窗查看明细
- Keymob:移动广告的潜力无限
- 详解YUV数据格式