使用的实施类型?

时间:2016-06-27 19:36:14

标签: c++ data-structures abstract-data-type

有一个问题我一直试图解决,但我很难掌握它的正确实现。如果我们编写一个程序来操作数千个记录,每个记录包括产品名称,类型,序列号,零售价等。在下面的每种情况下,解释您将使用哪种抽象数据类型(队列,堆栈,未排序和排序列表) ,以及哪种实现(数组或链接结构)。简要证明你的选择。

1)将按照存储的相同顺序检索记录。没有预先知道将处理多少记录以及如何处理。

  • 我更喜欢用于此目的的未排序列表,它使用链表实现,因为我们不知道开头的记录数,并且数据将在存储时被检索,因此它们必须链接,这也可以通过像Queue或Stack这样的ADT但它们使用数组实现,因此出现了内存分配问题。

2)所有记录将在开头插入,一次,无特定顺序。根据序列号,它们将被非常频繁地检索。

  • 即使在一次打印所有记录数据的情况下,也可以使用未排序列表。

3)将根据需要插入大量但未知数量的产品记录。它们很少单独检索。大多数操作将包括一次处理所有记录,例如全部打印。

  • 然而,这里排序和未排序列表的使用效率更高,但我更喜欢未排序列表,因为排序需要时间,这会降低效率。

你们有什么想法?

1 个答案:

答案 0 :(得分:0)

考虑每个数据结构的目的是什么,问题中提供的访问模式以及一个和两个的答案是不言而喻的。三是有点棘手,但你所掌握的信息是你没有关于如何使用这些数据的信息,除了所有数据的使用可能性很高。

队列

队列是一个管道。东西在一侧进入并以相同的顺序从另一侧出来(先进先出,AKA FIFO)。除了即将发布的项目之外,您可能会或可能看不到队列中的任何内容。换句话说,为了查看队列中的下一个项目,您必须删除当前项目。搜索是一个非常糟糕的主意,因为你可能无法搜索到所有内容并将其全部重新安装回来。

堆栈

Stack就是这样。一堆东​​西。你把东西放在堆上,然后你把东西堆起来。事物以与它们相反的顺序从堆栈中出来。这是第一个,最后一个或FILO。同样,您可能无法看到除堆栈中最顶层项目之外的任何内容,因此要获得下一个项目,您必须删除顶部项目。由于与队列相同的原因,搜索是个坏主意。

未排序列表

任何东西都可以放在任何地方。将东西放入列表是一件很小的事情,因为你不关心它的去向。在列表中查找内容...这真是太糟糕了。你必须逐个查看每个项目(线性搜索),直到找到你要找的东西。如果您不关心列表中的内容而不必搜索它,那么这就是您的数据结构。至少在收集和使用统计信息并找到一些优化之前。

排序列表

根据某些指定的架构,一切都在它的位置。这使得查找东西变得非常简单。您可以直接查看所需的项目,如果没有,您通常可以反复细分列表,因为如果项目不在您选择的任何一侧,那么它必须在另一侧(二进制搜索) 。寻找很容易,但无论你插入什么都必须小心放置,这可能非常昂贵。但是,如果您构建一次列表然后重复搜索它,那么您几乎总是领先一步。