使用的实现类型
Type of implementation used?
有一个问题,我一直试图解决一段时间,但我很难掌握正确的实现。如果我们编写一个程序,它将处理数千条记录,每条记录包括产品名称、类型、序列号、零售价格等。在下面的每种情况下,解释您将使用哪种抽象数据类型(队列,堆栈,未排序和排序列表),以及哪种实现(数组或链接结构)。简要说明你的选择。
1)记录将按照它们存储的顺序被检索。事先不知道将处理多少记录以及如何处理。
- 我更喜欢Unsorted list用于此目的,它使用链表实现,因为我们一开始不知道记录的数量,并且数据将在存储时被检索,因此它们必须被链接,这也可以通过ADT(如Queue或Stack)实现,但它们使用数组实现,因此出现了内存分配问题。
2)所有记录将在开始插入一次,没有特定的顺序。它们将根据序列号被频繁检索。
- 即使在一次打印所有记录数据的情况下,也可以使用Unsorted列表。
3)当需要时,将插入大量但未知数量的产品记录。它们很少被单独检索。大多数操作将包括一次处理所有记录,例如,打印所有记录。
- 然而,这里排序和未排序的列表使用效率更高,但我更喜欢未排序的列表,因为排序需要时间,这会降低其效率。
你们觉得怎么样?
考虑每个数据结构打算做什么,问题中提供的访问模式以及第一个和第二个问题的答案就变得不言而喻了。第三点有点棘手,但你所拥有的信息是,你不知道这些数据将如何使用,除了所有这些数据都将被使用的高可能性。
<标题>队列Queue是一个管道。物品以同样的顺序从一边进去,从另一边出来(先进先出,又名先进先出)。除了即将出现的项目之外,您可能会也可能看不到队列中的任何内容。换句话说,为了查看队列中的下一个项目,您必须删除当前项目。搜索是一个非常糟糕的主意,因为很可能你无法搜索它,除非把所有的东西都拿出来再放回去。
<标题>堆栈h1> tack就是这样。一堆东西。你把东西放在一堆东西的上面,然后从这堆东西里拿东西。从堆栈中取出的东西的顺序与它们放入的顺序相反。这是先进后出,或者是FILO。同样,你可能只能看到堆栈中最顶部的项目,所以要获得下一个项目,你必须删除顶部的项目。搜索是一个坏主意,原因与队列相同。 未排序列表任何东西都可以放在任何地方。把东西放进清单是小菜一碟,因为你根本不在乎它放在哪里。在清单里找东西……这真是个遗憾。你必须一个一个地查看每一个项目(线性搜索),直到你找到你要找的东西。如果你不关心列表中有什么,也不需要搜索它,这就是你的数据结构。至少在您收集和使用统计数据并找到一些优化之前。
<标题> 分类列表根据指定的模式,一切都在其位置上。这使得找东西变得非常容易。有可能你可以直接找到要找的项目,如果不是,你通常可以一次又一次地细分列表,因为如果项目不在你选择的任何地方的一边,它一定在另一边(二分搜索)。寻找很容易,但无论你插入什么,都必须小心放置,这可能会相当昂贵。但是,如果你只建立一个列表,然后反复搜索,你几乎总是领先的。
标题>标题>标题>- 使用简单类型列表实现的指数编译时间.为什么
- 实现有界基元类型的c++
- 根据C++标准的定义实现"is_similar"类型特征
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- C ++类型特征:确保子类实现方法
- 为自定义打印调试实现传递任何类型的变量
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 在 OpenCL 内核中实现半精度浮点数据类型
- 在头文件中使用opencv类型来实现未定义的标识符
- 如何实现对参数顺序不可知的std::same_as的广义形式(即对于两个以上的类型参数)
- 在 C++11 标准中,为什么要依赖 char 类型实现?
- 为容器中的不同字符串类型实现编译时"static-if"逻辑
- 用TR1 :: Shared_ptr类型实现std ::相等
- C void*任何类型实现都会返回奇怪的结果
- C :执行模板类型实现方法
- C++基于运行时类型实现强制转换
- Qt:如何为所有小部件和小部件类型实现通用基类信号/插槽功能(通过虚拟基类插槽)
- C++具有自定义类的泛型类型实现