7

在有指针的 C++ 中很容易实现链表。但是它们是如何用其他语言(如 java、python 等)实现的。我不想将内置类(在 JAVA 中支持)用于链表,但我想要的是如何替换指针来创建链表?

4

7 回答 7

29

它们是使用引用来实现的,这些引用本质上是(不包括语法)指针,您不能使用这些指针进行指针运算(在某些语言中,它们也不能为空)。在许多语言中,引用是使用变量的默认方式,这与 C++ 的默认方式是按值不同。

于 2012-08-24T18:55:53.980 回答
5

对于其他语言,您处理与指针密切相关的引用。

于 2012-08-24T18:54:53.673 回答
2

如前所述,使用引用而不是指向内存块的指针。所以就像你在 C++ 中所做的那样

Struct Node {
  Node *last;
  Node *next;
}

它看起来像这样:

Struct Node {
  Node last;
  Node next;
  }
于 2012-08-24T18:59:45.897 回答
1

一个好的数据结构类会告诉你一个链表可以用任何使用数组的语言来实现,比如 FORTRAN。

您将使用其他方法来定位下一个链接,而不是使用指针。对于数组,您可以使用指向下一个元素的索引而不是指针。

因此,您可以通过使用文件位置而不是指针在随机访问文件中实现链表。

于 2012-08-24T19:09:04.723 回答
0

当您编写自己的类时,例如class node,并让每个类都node持有一个字段到下一个 node,您实际上持有对该下一个节点的引用(如果它是最后一个节点,则为 null)

于 2012-08-24T18:56:37.290 回答
0

您可能会在本书中找到一个很好的答案 - http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844 - 我将为您总结一下我记得的内容。

基本上,您将拥有两个大小相等的数组(希望大于 n,其中 n=要存储的元素数)。我们称它们为数组 A 和数组 B。

数组 A[i] 保存数据值。数组 B[i] 保存“下一个”值“k”,使得 A[i]->next = A[k]。

希望这会有所帮助。

于 2012-08-24T19:13:03.997 回答
0

记住链表的概念是你可以从一个元素到另一个元素。你如何做到这一点可能会非常不同。

例如,在 C++ 中,您提到可以使用指针。这表示另一种方式是您使用对象内存地址。

但这只是一种方式。如果您的所有对象都是从数组中引用的,那么您将能够通过它在该数组上的索引来引用一个对象。因此,链表中的每个元素都有一个整数,指定它所连接的对象的索引。

再举一个例子。如果您有一个字典,其中将对象与字符串相关联。然后你可以使用字符串来相互引用。

链表的核心概念不是指针,而是链表中的元素负责跟踪它所连接的元素。

于 2016-01-08T18:34:43.203 回答