哈希表的C实现(二)
摘要:上次大致分析了一下哈希表的链地址法的实现,今天来分析一下另一种解决哈希冲突的做法,即为每个Hash值,建立一个Hash桶(Bucket),桶的容量是固定的,也就是只能处理固定次数的冲突,如1048576个Hash桶,每个桶中有4个表项(Entry),总计4M个表项。其实这两种的实现思路雷同,就是对Hash表中每个Hash值建立一个冲突表,即将冲突的几个记录以表的形式存储在其中;废话不多说,上代码和图示基本能说明清楚:完整的代码,请看:这里,一位圣安德鲁斯大学的讲师:KRISTENSSON博客这里截取几个主要的片段:主要的数据结构:struct Pair { char *key; c...
阅读全文
treap(树堆)
摘要:一棵treap是一棵修改了结点顺序的二叉查找树,如图,显示一个例子,通常树内的每个结点x都有一个关键字值key[x],另外,还要为结点分配priority[x],它是一个独立选取的随机数。假设所有的优先级是不同的,所有的关键字也是不同的。treap的结点排列成让关键字遵循二叉查找树性质,并且优先级遵循最小堆顺序性质:1.如果v是u的左孩子,则key[v] < key[u].2.如果v是u的右孩子,则key[v] > key[u].3.如果v是u的孩子,则priority[u] > priority[u].这两个性质的结合就是为什么这种树被称为“treap”的原因,因为它同时具
阅读全文
转:在数组中编辑定长字符串
摘要:以下代码实现了在数组中存储、查询、删除字符串功能,存储的每个字符串最长长度为9(不包含字符串结束符\0)。新增用户输入字符串时,依次扫描以10字节为基数的数组空间,如果标志位为1,说明是有效字符,直到找到标志位为0的空间,然后存储。删除一个字符串之后,此字符串存放空间释放(标志置为0),可以存入用户输入的新字符串。查询字符串时,标志为1则显示,标志位为0则为已删除的无效字符串,不显示。?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
阅读全文