11-散列2 Hashing
2015-10-03 16:37
489 查看
#include <stdio.h> #include <stdlib.h> typedef struct HashTbl{ int TableSize; int *Elements; int *Staus; } *HashTable; int NextPrime(int x); HashTable InitializeTable(int TableSize); void DestroyTable(HashTable H); int Find(int Key, HashTable H); int Hash(int Key, int TableSize); int main(int argc, char const *argv[]) { // freopen("test.txt", "r", stdin); int MSize, N; scanf("%d %d", &MSize, &N); HashTable H = InitializeTable(MSize); int tmp, pos ; for (int i = 0; i < N; i++){ scanf("%d",&tmp); pos[i] = Find(tmp, H);//只需要找到位置就可以了,不用真的插入元素 } for (int i = 0; i < N; i++){ if (i != 0) printf(" "); if (pos[i] != -1) printf("%d", pos[i]); else if (pos[i] == -1) printf("-"); } DestroyTable(H); return 0; } int NextPrime(int x) { if (x < 2)//要注意1不是素数 x++; int i; for (int Next = x; ; Next++){ for (i = 2; i * i <= Next; i++) if (Next % i == 0) break; if (i * i > Next) return Next; } } HashTable InitializeTable(int TableSize) { HashTable H; H = (HashTable)malloc(sizeof(struct HashTbl)); H->TableSize = NextPrime(TableSize); H->Elements = (int*)malloc(sizeof(int)*H->TableSize); H->Staus = (int*)malloc(sizeof(int)*H->TableSize); for (int i = 0; i < H->TableSize; i++) H->Staus[i] = -1; return H; } void DestroyTable(HashTable H) { free(H->Elements); free(H->Staus); free(H); } int Find(int Key, HashTable H) { int CurrentPos, NewPos; int CNum = 0; NewPos = CurrentPos = Hash(Key, H->TableSize); for (int i = 0; H->Staus[NewPos] != -1 && i < H->TableSize; i++){ NewPos = CurrentPos + i*i; while(NewPos >= H->TableSize) NewPos -= H->TableSize; } if (H->Staus[NewPos] == 1) return -1; else{ H->Staus[NewPos] = 1; return NewPos; } } int Hash(int Key, int TableSize) { return (Key % TableSize); }
相关文章推荐
- 综合查询——字符串连接
- 转载 - Struts2 拦截器详细配置过程
- NSUserDefaults读取和写入自定义对象
- 数组转表格
- ROMLite框架(2)——最佳实践
- daemon reparented / init --user http://blog.csdn.net/ixidof/article/details/42806239
- 11-散列1 电话聊天狂人
- iOS9.0-Xcode7-UIWebView加载页面出错解决方法,适用于SDWebImage等一切BitCode和Https相关错误
- Cocoa编程开发者手册
- python学习笔记——自定义模块导入
- [AC自动机][HDU3065]
- Java死锁实例
- [AC自动机][HDU3065]
- POJ1469_COURSES(二部图最大匹配)
- 设置cookie倒计时让让表单自动提交
- 学习记录—yii2简单的登录功能实现
- Spring 别名的使用
- ORMLite框架(1)——入门用法
- 指针与数组
- android stdio中的project和module的概念