数据结构问题,望高手帮忙

zc_0702 2003-06-19 01:30:40
设溢出Hash表中的关键字元素均为非负整数,其存储空间为数组H(1:m)。其中Hash表的长度为n(n<m),并使用数组H的前n个元素;溢出表为栈结构,存储空间使用数组H的后m-n个元素。Hash码为1=mod(k,n).
(1)你准备如何表示Hash表中的空表项
(2)给出Hash表与溢出表的初始状态。
(3)编写在溢出Hash表中填入关键字元素的算法。在此算法中应考虑关键字元素的合法性及表空间是否溢出
(4)编写在溢出Hash表中查找关键字元素的算法。在此算法中要求检查待查元素的合法性,并要求设置一个标志说明是否查到。
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
arfi 2003-06-19
  • 打赏
  • 举报
回复
Hash表可以实现数据(不重复)的快速插入查询等等,如果你采用较好的算法(即替换mod(k, n)),对于几十万的数据起平均查找次数也不会超过四、五次。
此题只是设计的溢出hash表,应该是最大要存储m个数据,给出了n个存储空间。m-n个用于处理索引冲突时的情况。对于hash表最重要的就是求索引的算法了,这个选好了,hash表的结构你可以随便定,当然可以动态进行分配。只是这里题目要求得是数组。
我不清楚对这段data[m]-->data[n-1]的溢出表理解是否正确。这样顺序进行查找效率并不好。

多谢genny(阿健)兄提醒,我的插入算法没考虑全面,下面重写一下:

(3):插入数据元素num;

1):算出索引,index = mod(num, n);
2):看看data[index]是否被占用(是否-1),如果是-1,则直接插入并返回。否则,执行下列步骤;
3):if(data[index] == num),报告已经插入,返回。否则,顺序将data[top+1](小心top为n-1时就不能+1了)至data[n-1]与num做比较,如果data[i] == num,报告已经插入,返回。否则执行4).
4):看栈是否溢出(若top == m-1 则表示溢出),如果没有,将数据插入到data[top]中,然后top--。如果溢出,报错。
genny 2003-06-19
  • 打赏
  • 举报
回复
可以先说说hash表和溢出表的功能吗?
按楼上的说法,可以在溢出表插入报溢出错误时,自动增长hash的空间吧?还有如果插入的数
本来已经存在了,就会继续插入,恶性操作,会使溢出表很快就溢出报错,而这时,hash表还有很多空间没有使用。
arfi 2003-06-19
  • 打赏
  • 举报
回复
第(4)个首先检查待查元素的合法性,即判断该元素是否为非负整数。
arfi 2003-06-19
  • 打赏
  • 举报
回复
数组定义为data[n],则栈空间为data[m] ... data[n-1],栈顶top初始记为n-1,向前增长。

(1):既然存储的是非负整数,空表项可以用-1来表示。
(2):初始状态都为空表项,所以整个数组data[n]初始化为-1即可。
(3):插入数据元素num;

1):算出索引,index = mod(num, n);
2):看看data[index]是否被占用(是否-1),如果是-1,则直接插入。否则,执行3)。
3):看栈是否溢出(若top == m-1 则表示溢出),如果没有,将数据插入到data[top]中,然后top--。如果溢出,报错。

(4):查找元素num,以flag作为查找结果标志,初始为0。

1):算出索引,index = mod(num, n);
2):查看是否data[index] == num,如果相等,flag置1,返回。否则,执行3)。
3):将data[top+1]直至data[n-1]顺序与num比较。如果相等,flag置1,返回。否则,表示未插入过该数据。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧