首页 > 试题广场 >

某一系统功能,需要一次性加载N(N在1000左右)个随机数,

[单选题]
某一系统功能,需要一次性加载N(N在1000左右)个随机数,后续只对该集合进行遍历。最宜采用哪种结构存放?
  • Hash表
  • 二叉树
  • 链表
随机数,未经排序,二叉树不适合;
需要遍历,hash表不适合;
不强调数据之间的关系,图不适合;
随机数数据类型不一致,数组不适合。
综上所述,链表最适合。
发表于 2017-03-25 09:57:06 回复(2)
       首先说了 需要一次性加载N(N在1000左右) 个随机数。 随机数可能是用byte,char,short,int long float,double存储;最乐观的是byte存储才占一个字节长度 1000个约占用内存 1KB; 最悲观的是用 long 或double (8字节) ,以C语言为例 :long double(多精度浮点类型或长精度浮点类型)不同平台有不同的实现。有的是8字节,有的是10字节,有的是12字节或16字节 咱们用16字节来算 也才16*1000=16KB 内存也很少。
再来说说数据结构: 
数组:连续存储,遍历快且方便,长度固定,缺点移除和添加 需要迁移n个数据或者后移n个数据 
链表:离散存储,添加删除方便,空间和时间消耗大,双向链表比单向的更灵活,但是空间耗费也更大 
Hash表:数据离散存储,利用hash算法决定存储位置,遍历麻烦。以java的HashMap为例 
二叉树:一般的查找遍历,有深度优先和广度优先,遍历分前序、中序、后序遍历,效率都差不多,但是如果数据经过排序,二叉树效率还是不错。 
图:表示物件与物件之间的关系的数学对象,常用遍历方式深度优先遍历和广度优先遍历,这两种遍历方式对有向图和无向图均适用,遍历查找不及前面人一种数据结构。
 所以针对本道题 链表最适合。答案:C
编辑于 2016-02-25 23:48:37 回复(2)
链表适合便利不适合随机访问
发表于 2016-11-15 23:00:45 回复(0)

想问下 为什么大家都在强调“未排序所以不选二叉树”呢? 树中节点必须要经过排序吗?也没说是二叉排序树啊?

发表于 2019-08-05 07:31:28 回复(1)
A:hash表不适合遍历
B:随机数,没有经过排序,不适合
D:没有强调数据之间的关系之间
C:排除法选C
发表于 2017-06-07 22:24:07 回复(0)
hash表用空间换时间,适合查询
发表于 2017-08-27 17:54:36 回复(0)
本题应该选择链表,链表适合遍历。
发表于 2015-12-15 09:54:23 回复(6)
我的理解是 :hash不适合遍历,因为可能会隔很远有一个数,这样遍历的话会很浪费时间。
发表于 2021-11-25 21:26:16 回复(1)
为什么不是二叉树呢?
发表于 2016-03-15 08:16:23 回复(7)
这里主要考虑的是搜索的功能,图的话,当强调了元素之间的关系可以用,二叉树的话,当排好序了可以采用二叉搜索树,hash表为什么不适合用?其实不太清楚,
发表于 2022-11-14 17:17:23 回复(0)
hash表不适合遍历,原因有二,一是可能有冲突,二是最主要原因,可能有空
发表于 2022-07-25 10:59:11 回复(0)
Hash表不能遍历
发表于 2020-03-15 08:37:05 回复(0)
随机数的类型不一定一样
发表于 2017-05-16 20:17:57 回复(0)
这个题目只能说在这四个选项中选链表,其实这里没有任何删除元素的操作,那么用数组是不是更合适呢?
发表于 2016-09-20 00:07:24 回复(2)
还是没看出来 为啥不用二叉树
发表于 2016-09-03 18:02:57 回复(0)
我这题做错了,选择了二叉树,我的理由是:因为随机数个数不确定,因此选择数组并不合适,而哈希表在避免负载因子过大时长度也会很大,因此也不合适;题目中说后续只进行遍历操作,其实我觉得最好的数据结构是二叉线索树,它存储了某一种遍历的结果,直接就可以给出遍历结果,而链表则每次去遍历需要o(n)的时间复杂度,二叉线索树就只需遍历一次就行了。牛客的题有时候就这样,大范围可能会包含小范围,有时候又不包含,选错了我也很无奈
编辑于 2016-08-23 11:52:43 回复(1)
 首先说了 需要一次性加载N(N在1000左右) 个随机数。 随机数可能是用byte,char,short,int long float,double存储;最乐观的是byte存储才占一个字节长度 1000个约占用内存 1KB; 最悲观的是用 long 或double (8字节) ,以C语言为例 :long double(多精度浮点类型或长精度浮点类型)不同平台有不同的实现。有的是8字节,有的是10字节,有的是12字节或16字节 咱们用16字节来算 也才16*1000=16KB 内存也很少。
再来说说数据结构: 
数组:连续存储,遍历快且方便,长度固定,缺点移除和添加 需要迁移n个数据或者后移n个数据 
链表:离散存储,添加删除方便,空间和时间消耗大,双向链表比单向的更灵活,但是空间耗费也更大 
Hash表:数据离散存储,利用hash算法决定存储位置,遍历麻烦。以java的HashMap为例 
二叉树:一般的查找遍历,有深度优先和广度优先,遍历分前序、中序、后序遍历,效率都差不多,但是如果数据经过排序,二叉树效率还是不错。 
图:表示物件与物件之间的关系的数学对象,常用遍历方式深度优先遍历和广度优先遍历,这两种遍历方式对有向图和无向图均适用,遍历查找不及前面的任一种数据结构。
 所以针对本道题 链表最适合。
发表于 2016-03-05 20:59:00 回复(0)
hash表没冲突吗
发表于 2015-11-18 21:27:37 回复(2)
怎么答案变来变去的
发表于 2015-11-13 17:55:00 回复(0)
图不是逻辑结构么
发表于 2015-11-09 03:41:48 回复(1)