C链接列表:学习理想的方式
在学习C语言的时候,链表是一个让很多初学者感到困惑的话题。这在很大程度上也与教学方式有关。大多数教程并没有真正关注链表的日常用途以及引入它们的原因,而是给出了冗长的代码,这只会吓到初学者。然而,你可以确定一件事:如果你是在学校或大学编程,链表是最有可能被覆盖的主题之一。
继续阅读,找到一种简单的方法来理解c中的链表主题。我们将看看指针在链表中是如何重要的,结构是如何创建的,以及如何创建动态数据存储,以确保内存空间的有效分配是存储数据。我们还将注意到链表与数组的不同之处,并讨论链表中的各种优缺点。
对于链表及其工作的进一步深入知识,您可以看这个C编程为初学者课程。
链表101
链接列表是动态分配内存的方法。许多学生要求,如果可以更容易使用阵列。他们中的大多数是正确的。坦率地说,它归结为手头的任务。阵列需要在开始时分配内存,而链表列表在GO上分配和使用内存。
创建链表的小代码:
Struct test_linkedlist {int val;struct test_linkedlist *下;};
这将创建一个包含值“val”和指向类似结构的指针的结构。
链接列表需要简要了解指针。在内存中的位置处的指针点。链接列表由具有自己的值或数据的节点组成,它们必须携带,并且有一个指针附加到下一个节点的“点”。要以简单的格式查看:
这里,十六进制信息并不重要。它只是内存中下一个节点开始和当前指针指向的随机位置。
链接列表示例
您可以找到它在内部工作方式的好示例学习c艰难的路程,但是让我们看一个容易理解的示例。
如果您要将在特定建筑物内工作的人们存储,这将是相当容易猜出其中的人数。如果需要存储有关它们的信息,请使用简单数组将更简单。但是,如果您要将关于各种商品的信息存储在您的邻近的杂货店商店,这里纯粹的品种会很大,所以连接的名单可能更有意义。
最重要的是,回到计算机行业的恐龙日,电子设备没有巨大的记忆备用。为了使可用内存资源的每个部分和每个部分都明智地使用动态分配非常重要。在这种情况下,可以制造由储存关于杂货店中各种商品的信息的结构制成的简单链接列表。
假设需要的信息是名称、价格和数量。现在可能有100到10000种不同的商品更重要的是,新商品总是被引进其他商品被淘汰。让我们看看如何以简单的图表格式有效地实现这一点,而不是直接引入高级代码。
与数组不同,链表中的结构不编号,而是使用指针将它们链接在一起,指针给出下一个结构的地址。因此,如果你有第一个结构的地址,你可以通过迭代到链表的任何部分。
首先给出第一结构的地址,而null表示它是链接列表的末尾。还有一个更深刻的指针知识很重要。你可以阅读材料C函数指针完全的知识。
C语言中链表的优缺点
链接列表在每种情况下都不正确。以下是利用的破败:
好处
- 它是动态内存结构,它可以在运行时扩展或收缩。
- 我们可以更轻松地执行插入,删除,编辑的各种操作。
- 不需要预分配内存,因此非常有效地使用内存。
缺点
- 由于使用指针而浪费记忆。与阵列不同,它们最终占用额外的空间,因此如果已知确切的结构数量是优选的使用阵列。
- 随机访问是不可能的。在数组中,一个简单的a[n]调用就足以获得值,但是在链表中,遍历整个链表就变得必要了。
- 因为内存位置不是连续的,所以它会在到达它们时进行更高的时间复杂性。在数组中,访问时间为O(1),而在链接列表中,它是O(n)。
- 在单独的列表中难以反向遍历。即使在使用双重链接列表时,背针的额外开销。
到目前为止,我们已经了解了链表的各种特性。让我们看看链表的一些功能以及如何实现这些功能。
从链表中移除项
让我们说,上面的示例中的第三项不再由商店出售。在这种情况下,需要删除,使用的存储器被释放。我们可以通过简单地指向第2项的下一个指针来完成此操作4。
添加一个项目:
如果需要添加一个项目,只需通过将前一个项目的下一个指针指向其头部的下一个指针以及列表上下一个项目的指针来完成列表中的任何位置。您可以在链接列表中的任何位置添加以这种方式添加项目。如果商店从一个简单的100件商店长出4-5岁,以获得10,000件物品,可以实时增加或拆除物品。
如果需要有关链接名单或更高主题的任何进一步信息,则可以在此处查看数据结构和算法课为初学者设计的。
普通的
0.
假
假
假
en - us
X-None
X-None
/*样式定义*/
table.msonormaltable.
{mso-style-name:“表正常”;
mso-tstyle-rowband-size: 0;
mso-tstyle-colband-size: 0;
mso-style-noshow:是的;
mso-style-priority: 99;
mso-style-parent:“”;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top: 0;
mso-para-margin-right: 0;
mso-para-margin-bottom:10.0pt;
mso-para-pargin-left:0in;
线高:115%;
mso-pagination: widow-orphan;
字体大小:11.0pt;
字体类型:“Calibri”、“无衬线”;
MSO-ASCII-FONT系列:CALIBRI;
mso-ascii-theme-font: minor-latin;
mso-hansi-font-family: Calibri;
mso-hansi-theme-font: minor-latin;}