【发布时间】:2009-12-09 19:21:09
【问题描述】:
我被问到以下问题: 你将如何存储下面给出的数据(你会选择哪种数据结构):
A-1-2-3-4-5-6
|
B-7-8-9-10-11
|
C-12-14-15-16-17
我的回答: 因为这看起来像一堆列表,其头节点链接在一起。 使用两种节点类型,一种是具有以下定义的常规节点类型:
Struct node1
{
int val;
struct node*next;
};
// to store the numerical part of the data
struct node2
{
int val;
struct node *down;
struct node* next;
};
//this is the heads of each list.. for the alphabet part of the question.
面试官的反应: 这是你能想到的最好的数据结构吗? 每个节点所需的遍历和内存如何?
我对此的回答: 如果我们创建某种哈希表,我们可以更好地遍历。
我对你们同志的问题: 我们能做得更好吗??有没有更好的方法来存储此类数据?
我们假设数据都是数字(甚至是每个头节点的数字)并且是非连续的,可能有重复。什么是正确的答案? 在 C/C++ 中寻找答案
【问题讨论】:
-
@xtofl .. 感谢您的编辑。
-
这是一个愚蠢的问题,因为没有提供足够的信息来得出“正确”的答案。我的答案是字符串,因为您没有告诉我数据是什么、如何使用或如何修改数据。您想快速找到 15 吗?这是 --> 15. O(1) 查找。
-
如果面试官认真地想得到一个有用的答案,他们可能希望你就数据的性质提出问题,例如它使用的上下文,内存/CPU性能权衡它应该撒谎,等等。
-
您实际上并没有在任何地方指定应该用什么语言/语言系列来实现它。对于 C、C++、Scala 和 Perl,我的答案会非常不同。 :)
-
@Erik:当我建议上面的答案时,他们告诉我我将无法轻松遍历列表。所以我认为任何 node 的值都可以随时更改。假设我需要将值为 6 的节点更改为 999。我应该能够快速完成。所以我们正在寻找比内存权衡更快的遍历。
标签: data-structures