散列技术之线性探测法
来源:互联网 发布:2016淘宝有前景的类目 编辑:程序博客网 时间:2024/04/30 21:04
源代码如下:
#include <stdlib.h>#include <stdio.h>#define hash(v,M) (v % M)#define null(A) (key(st[A]) == key(NULLitem)) typedef char Key;struct Item{Key key;};static struct Item NULLitem ;static struct Item *st;static int N , M ;Key key(Item item){return item.key;}//初始化 void STinit(int max){int i ;N = 0; M = 2 * max;st = (Item *)malloc(M*sizeof(Item));for(i=0;i<M;i++)st[i] = NULLitem;}//节点个数 int STcount(){return N; } //搜索主程序 Item STsearch(Key v){int i = hash(v,M) ;while(!null(i))if(v == key(st[i]))return st[i];else i = (i+1) & M;return NULLitem;}//插入主程序 void STinsert(Item item){int i = hash(key(item),M) ;printf("%d %d %d\n",key(item),M, i) ;while(!null(i)) i = (i+1) & M;st[i] = item; N++;}//删除主程序void STdelete(Item item){int j, i = hash(key(item),M) ; Item v;while(!null(i))if(key(item) == key(st[i]))break;else i = (i+1) & M;st[i] = NULLitem; N--;for(j = i+1;!null(j);j=(j+1)%M,N--){v = st[j]; st[j] =NULLitem; STinsert(v);}}void p(){struct Item *tmp = st;int i ;for(i=0;i<M;i++)if(!null(i)) printf("%c ",key(st[i]));printf("\n");}main(){STinit(13);struct Item item[13] ={'a','s','e','r','c','h','i','n','g','x','m','p','l'};int i;for(i = 0; i<13;i++)STinsert(item[i]);p();printf("search: %c \n",key(STsearch('e')));STdelete(item[10]);p();}
0 0
- 散列技术之线性探测法
- Javascript数据结构算法之散列(霍纳算法,开链法,线性探测-寻址法)
- 数据结构与算法之散列(线性/平方/双平方探测法)<八>
- 散列(2)线性探测法和双重散列法
- 线性探测可再散列的散列
- 散列表--线性探测法
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
- 哈希表的构造之线性探测法
- 哈希之线性探测法
- 哈希表-开放地址法之线性探测
- 4C的练习5-39 整型关键字的散列映射 <线性探测法>
- 基于线性探测法的散列表
- 哈希表---线性探测法
- 线性探测法hash
- 数据结构:散列2(探测法)
- hash冲突之线性探测
- 哈希表,开放地址法之线性探测代码(JAVA)
- 搜索结构之哈希表(线性探测法)
- iOS打IPA包
- Qt汉字得到汉字拼音首字母
- 黑马程序员07 IO流
- 快学Scala习题解答—第十一章 操作符
- tiny_mce
- 散列技术之线性探测法
- php---魔术方法(__wakeup和__sleep)
- POJ 3304 - Segments【计算几何 - 直线线段相交判断】
- 文章标题
- 从上往下打印二叉树
- docker/compose项目笔记
- 卷积的物理意义
- C#实现磁性窗体(吸附、剥离、移动)
- Beginning Auto Layout Tutorial in iOS 7: Part 2