请有人帮我解释一下链表吗?

时间:2010-08-21 19:22:18

标签: c linked-list

我已经尝试过很多东西来学习链接列表。但是我所有的努力都被浪费了。请允许一些人通过提供他/她自己的代码来帮助我理解链接列表吗?提前感谢。

4 个答案:

答案 0 :(得分:12)

链表只是一个元素列表(通常称为节点),其中每个节点都有一个引用(或指向C)的指针到下一个节点:

http://img837.imageshack.us/img837/5613/ll1s.png

通过指向第一个节点(“head”)并让最后一个节点指向null

来跟踪列表

alt text

每个元素指向下一个节点和上一个节点的链接列表称为双向链接列表。

alt text

通过遵循这些引用,您可以遍历列表并获取任何节点。

链接列表相对于数组的一个共同优点是,您可以在O(1)(常量)时间内插入和删除元素。缺点是你有O(N)随机访问。

有关详情,请参阅Wikipedia

答案 1 :(得分:2)

你玩过一些这些拉力赛吗?组织者在城市周围留下了这些提示,你必须得到一个提示然后解决谜语以获得下一个提示的位置。现在,想象一下每个提示都带有一点奖励。

好吧,链表就是这样的:每个元素都有“内容”,以及获取下一个项目的内存地址(提示)。当然,下一个项目还有另一个奖项和另一个提示。

答案 2 :(得分:1)

链接列表是一系列对象,每个对象都指向列表中的下一个对象。列表中的最后一个元素是NULL,因为它是next指针。

您可以跟踪程序中列表的头部,以便从一开始就遍历列表。

您可能希望跟踪列表中的当前位置,但这取决于您的应用程序。

双向链表还有一个前一个元素指针,使您可以在两个方向上遍历列表。

此:

typedef struct tagProp
{
   rtPropertyKey   key;
   rtProperty      property;
   struct tagProp *next;
} TProperty;

定义属性键/值查找列表。

答案 3 :(得分:1)

链表实现为“节点”列表。节点使用指针链接在一起。以下代码描述了一个节点。接下来调用指向下一个节点的指针。在我的示例中,每个节点都包含一个整数值作为其数据。


struct node {
   int val;
   struct node * next;
};

有趣的是如何实际创建列表。您必须使用malloc来创建新节点。 malloc新节点时,必须使用下一个指针绑定到列表中。

如果您明确告诉我们您的问题,我们可以为您提供更多帮助......