使用的实现类型

Type of implementation used?

本文关键字:类型 实现      更新时间:2023-10-16

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

1)记录将按照它们存储的顺序被检索。事先不知道将处理多少记录以及如何处理。

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

2)所有记录将在开始插入一次,没有特定的顺序。它们将根据序列号被频繁检索。

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

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

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

你们觉得怎么样?

考虑每个数据结构打算做什么,问题中提供的访问模式以及第一个和第二个问题的答案就变得不言而喻了。第三点有点棘手,但你所拥有的信息是,你不知道这些数据将如何使用,除了所有这些数据都将被使用的高可能性。

<标题>队列

Queue是一个管道。物品以同样的顺序从一边进去,从另一边出来(先进先出,又名先进先出)。除了即将出现的项目之外,您可能会也可能看不到队列中的任何内容。换句话说,为了查看队列中的下一个项目,您必须删除当前项目。搜索是一个非常糟糕的主意,因为很可能你无法搜索它,除非把所有的东西都拿出来再放回去。

<标题>堆栈h1> tack就是这样。一堆东西。你把东西放在一堆东西的上面,然后从这堆东西里拿东西。从堆栈中取出的东西的顺序与它们放入的顺序相反。这是先进后出,或者是FILO。同样,你可能只能看到堆栈中最顶部的项目,所以要获得下一个项目,你必须删除顶部的项目。搜索是一个坏主意,原因与队列相同。 未排序列表

任何东西都可以放在任何地方。把东西放进清单是小菜一碟,因为你根本不在乎它放在哪里。在清单里找东西……这真是个遗憾。你必须一个一个地查看每一个项目(线性搜索),直到你找到你要找的东西。如果你不关心列表中有什么,也不需要搜索它,这就是你的数据结构。至少在您收集和使用统计数据并找到一些优化之前。

<标题> 分类列表

根据指定的模式,一切都在其位置上。这使得找东西变得非常容易。有可能你可以直接找到要找的项目,如果不是,你通常可以一次又一次地细分列表,因为如果项目不在你选择的任何地方的一边,它一定在另一边(二分搜索)。寻找很容易,但无论你插入什么,都必须小心放置,这可能会相当昂贵。但是,如果你只建立一个列表,然后反复搜索,你几乎总是领先的。