数据结构面试问题

时间:2009-12-09 19:21:09

标签: data-structures

我被问到以下问题: 您将如何存储下面给出的数据(您将选择哪种数据结构):

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 ++中寻找答案

7 个答案:

答案 0 :(得分:6)

我要问的第一个问题是数据。 出现是一个简单的案例,可以在哪里打破一系列连续数字。鉴于我只会存储断点。这些类型的问题旨在测试您提出问题并深入了解潜在问题的能力。

答案 1 :(得分:1)

我认为这个问题的目的是让您了解数据结构。

如果每个节点实际上只有一个char和6个整数,则不需要存储两个列表。此外,如何使用它将是重要的考虑因素。也许即使是字符和数字范围就足够了,这取决于数据到底是什么。

答案 2 :(得分:1)

在C#中你可以使用string / int array的字典:

Dictionary<string,int[]> 

答案 3 :(得分:0)

为了更好的遍历和内存使用,您可以考虑使用可变长度数组列表(Java ArrayLists)

答案 4 :(得分:0)

如果它们的字面意思是“存储范围#s从N到N + x”,那么您可以将其压缩到从字母到范围开始和结束范围元组的映射;)

答案 5 :(得分:0)

我会问如何使用这些数据。面试官要么透露他最初保留的内容,看看你是否要求,或者做些什么。然后我会问什么样的更新以及它将如何更新。他不太可能想到这么远,所以奖金面试点。否则,组成一个内存存储结构,其结构复杂到足以说明所有事实,或者可能将其放在关系数据库中。

答案 6 :(得分:0)

我想以一种更简单的方式说,您应该使用列表。

A = [1,2,3,4,5,6]

B = [7,8,9,10,11]

C = [12,14,15,16,17]