Data structures 什么';链表和流的技术区别是什么?

Data structures 什么';链表和流的技术区别是什么?,data-structures,language-agnostic,Data Structures,Language Agnostic,它们似乎都以相同的方式做着相同的事情:以特定但不一定是索引顺序的惰性操作,并且不一定是回溯的。链表是表示内存中数据元素序列的一种特定方式,其中每个元素都与指向序列中下一个元素的排序指针配对。链表允许您对其子序列执行一系列操作:您可以剪切或插入整个元素链,或者以非常低的成本从中间删除元素 另一方面,流是按顺序访问数据的抽象,对其在内存中的表示没有任何特定要求。您可以使用链表来实现流,但也可以使用其他数据结构,例如普通数组或循环数组缓冲区。链表是表示内存中数据元素序列的一种特定方式,其中每个元素都与

它们似乎都以相同的方式做着相同的事情:以特定但不一定是索引顺序的惰性操作,并且不一定是回溯的。

链表是表示内存中数据元素序列的一种特定方式,其中每个元素都与指向序列中下一个元素的排序指针配对。链表允许您对其子序列执行一系列操作:您可以剪切或插入整个元素链,或者以非常低的成本从中间删除元素


另一方面,流是按顺序访问数据的抽象,对其在内存中的表示没有任何特定要求。您可以使用链表来实现流,但也可以使用其他数据结构,例如普通数组或循环数组缓冲区。

链表是表示内存中数据元素序列的一种特定方式,其中每个元素都与指向序列中下一个元素的排序指针配对。链表允许您对其子序列执行一系列操作:您可以剪切或插入整个元素链,或者以非常低的成本从中间删除元素


另一方面,流是按顺序访问数据的抽象,对其在内存中的表示没有任何特定要求。您可以使用链表实现流,但也可以使用其他数据结构,例如普通数组或循环数组缓冲区。

我认为这有点像尝试比较苹果和桔子


链表是一种数据结构,其中每个节点指向另一个节点。它们是一种有用的结构,因为从链表中插入和删除项只需重新指向一个节点,而不是使用需要分配更多洗牌的数组。有关更多信息,请参阅


流是用于表示一系列字节的抽象对象。在大多数框架(Java、.NET等)中,有几个具体的STEAM实现(内存流、文件流等),用于从相关源(内存、文件等)读取字节数组。

我认为这有点像试图比较苹果和橙子


链表是一种数据结构,其中每个节点指向另一个节点。它们是一种有用的结构,因为从链表中插入和删除项只需重新指向一个节点,而不是使用需要分配更多洗牌的数组。有关更多信息,请参阅


流是用于表示一系列字节的抽象对象。在大多数框架(Java、.NET等)中,有几种具体的流(内存流、文件流等)实现,用于从相关源(内存、文件等)读取字节数组。

链表是一种数据结构,其中每个元素都有指向下一个元素的指针,并且在另一个方向上可能相同。循环链表甚至有一个从最后一个元素到第一个元素的指针,反之亦然。这些指针(或没有指针的语言中的引用)定义了数据结构。他们暗示了一种特定的操作模式,但他们并不强制这样做。例如,Java中的
LinkedList
类可以像数组一样使用,尽管这样效果不是很好。它还可以用作(双端)队列或堆栈,具体取决于您调用的函数

另一方面,流不是定义为数据结构,而是定义为元素的源或汇。如果您想到文件流、套接字流或封装流的读写器类,这些元素可以是字节或字符。流提供的元素也可能更复杂,例如解析器的令牌。在这种情况下,流可能在内部使用某种队列,可以使用链表或某种数组结构来实现


只要确保理解这两件事是在不同的抽象层上定义的。链表是根据其内部工作方式定义的,而流是根据其外部工作方式定义的。

链表是一种数据结构,其中每个元素都有一个指向下一个元素的指针,可能在另一个方向上也有相同的指针。循环链表甚至有一个从最后一个元素到第一个元素的指针,反之亦然。这些指针(或没有指针的语言中的引用)定义了数据结构。他们暗示了一种特定的操作模式,但他们并不强制这样做。例如,Java中的
LinkedList
类可以像数组一样使用,尽管这样效果不是很好。它还可以用作(双端)队列或堆栈,具体取决于您调用的函数

另一方面,流不是定义为数据结构,而是定义为元素的源或汇。如果您想到文件流、套接字流或封装流的读写器类,这些元素可以是字节或字符。流提供的元素也可能更复杂,例如解析器的令牌。在这种情况下,流可能在内部使用某种队列,可以使用链表或某种数组结构来实现


只要确保理解这两件事是在不同的抽象层上定义的。链表定义在内部如何工作,而流定义在外部如何工作。

< P>在只读单链表和输入流之间有一个共同的抽象,C++将其形式化为<代码> InputIterator < /C> >:您可以读取值,并且可以向前移动。在许多流API中,你必须同时做这两个任务,但是如果给定API,那么很容易看到如何用一个缓存一个值的包装器来分离它们:C++调用这个类<代码> istrAMMyItReals< /C>

但是,单链表具有流不总是有的属性,其中C++