双向链表是非线性数据结构还是线性数据结构?

Posted

技术标签:

【中文标题】双向链表是非线性数据结构还是线性数据结构?【英文标题】:Is doubly linked list a non linear data structure or linear data structure? 【发布时间】:2015-08-09 18:29:06 【问题描述】:

线性数据结构按顺序遍历数据元素,其中只能直接到达一个数据元素。例如:数组、链表。

但是在双向链表中,我们可以使用前一个指针和下一个指针来访问两个数据元素。

那么我们可以说双向链表是一种非线性数据结构吗?

如果我错了,请纠正我。

谢谢。

【问题讨论】:

【参考方案1】:

非线性数据结构是那些元素以非线性方式出现的数据结构,它需要二维或多于二维的表示。元素可能或可能不(大部分)存储在连续的内存位置,而是以任何顺序/非线性存储,就好像您跳过了中间的元素一样。访问元素也是无序的。

示例:- 一棵树,这里可以从根迭代到右子节点,再到其右子节点,等等——从而跳过所有左节点。

但是,在双向链表中,您只能按顺序(线性)移动,向前移动(使用前向指针)或向后移动(使用前一个指针)。 在不遍历中间元素的情况下,你不能从列表中的任何元素跳转到任何远处的元素。

因此,双向链表是一种线性数据结构。在线性数据结构中,元素以线性方式排列(即一维表示)。

【讨论】:

注意:链表(单链表和双链表)是一种线性数据结构我们谈论访问策略时。然而,它们被视为基于存储的非线性数据结构。【参考方案2】:

你错了; 2 个理由:

    虽然您可以从任何节点获取 2 个元素,但其中一个是您用来获取此节点的元素,因此您只能获取一个 new每个节点。 它仍然是线性的,因为它必须按顺序或在一行中遍历。

【讨论】:

【参考方案3】:

它仍然是顺序的:与可以随机访问每个元素的数组相比,您需要遍历列表中的一些元素才能到达特定元素。

但是,您可以线性前进或后退,这可能会优化搜索。

【讨论】:

【参考方案4】:

链表基本上是一种线性数据结构,因为它以线性方式存储数据。线性数据结构是以线性格式存储数据,遍历是顺序的,而不是曲折的。

【讨论】:

【参考方案5】:

这取决于您打算在哪里应用链表。如果基于存储,链表被认为是非线性的。另一方面,如果你基于访问策略,那么链表被认为是线性的。

【讨论】:

以上是关于双向链表是非线性数据结构还是线性数据结构?的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性表双向链表

线性链表的双向链表——java实现

数据结构第四篇——线性表的链式存储之双向链表

数据结构线性表之双向带头循环链表

数据结构学习笔记二线性表之链表篇(双向链表)

第三章 线性表---链式存储结构(双向链表)