【问题标题】:please can some one help me explain linked list?请有人帮我解释一下链表吗?
【发布时间】:2023-03-08 08:52:02
【问题描述】:

我已经尝试了很多学习链表。但是我所有的努力都白费了。请有人通过提供他/她自己的代码来帮助我理解链表吗?提前谢谢。

【问题讨论】:

  • 不,获取代码无济于事。 (除非你只是想为你的作业偷它,这仍然无济于事。)你需要了解链表的概念,以及如何将它放入 C 中。你坚持哪个?
  • 您在哪些方面遇到了具体问题?
  • 我什至没有要学习的代码。我在youtube上看了一些视频,但我不知道如何实现链表。
  • @fahad:所以你知道链表的概念了吗?你卡在代码的哪一部分?
  • @fahad google 获取“C 链表”?

标签: c linked-list


【解决方案1】:

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

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

您可以通过使用指向第一个节点(“头”)的指针来跟踪列表,并让最后一个节点指向null

每个元素都指向下一个和前一个节点的链表称为双向链表。

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

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

请参阅Wikipedia 了解更多信息。

【讨论】:

  • 这些图表是您自己制作的吗?它们看起来不错 - 如果您自己制作它们,您使用什么工具?
  • 哦,吹毛求疵:它们不指向 NULL,它们有一个值为 NULL 的指针。 (顺便说一下+1)
  • 哦,你应该在这里添加另一件事 - 虽然删除是 O(1),但你必须使用 O(n) 遍历才能到达需要删除的元素。
【解决方案2】:

你玩过这些拉力赛吗?主办方在全城都留下了这个提示,你必须得到一个提示,然后解开谜题才能获得下一个提示的位置。现在,想象一下每一个提示都带有一个小奖品。

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

【讨论】:

    【解决方案3】:

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

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

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

    双向链表也有前一个元素指针,使您可以双向遍历列表。

    这个:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      如果您具体告诉我们您的问题是什么,我们可以为您提供更多帮助...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-21
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-20
        • 2011-04-24
        • 2017-10-03
        相关资源
        最近更新 更多