c语言之链表学习

链表是C中的基本数据结构之一。

C程序员必须了解链表。本文通过示例C程序解释C链表的基本原理。

链表是一种动态数据结构,其长度可以在运行时增加或减少。

链接列表与数组的不同之处是什么?请考虑以下几点:

数组是静态数据结构。这意味着在运行时不能更改数组的长度。而链表是动态数据结构。
在阵列中,所有元素保持在连续的存储器位置,而在链表中,元素(或节点)可以保持在任何位置但仍然彼此连接。

何时更喜欢链接列表而不是数组?当您不知道要存储的数据量时,首选链接列表。例如,在员工管理系统中,不能使用数组,因为它们具有固定长度,而任何数量的新员工都可以加入。在这些场景中,使用链表(或其他动态数据结构),因为它们的容量可以在运行时增加(或减少)(如果需要)。

链接列表如何安排在内存中?

链表基本上由位于随机存储位置的存储块组成。现在,有人会问他们是如何联系的,或者他们如何被遍历?好吧,他们通过指针连接。通常,链表中的块通过如下结构表示:

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

正如您在此处所看到的,此结构包含值’val’和指向相同类型结构的指针。值’val’可以是任何值(取决于链表持有的数据),而指针’next’包含该链表的下一个块的地址。因此,通过包含下一个节点地址的“下一个”指针,可以实现链表遍历。最后一个节点(或单个节点链表)的“下一个”指针将包含NULL。

如何创建节点?

通过以下方式将内存分配给结构(如上所示)来创建节点:

struct test_struct * ptr =(struct test_struct *)malloc(sizeof(struct test_struct));

因此,正如我们上面所看到的,指针’ptr’现在包含新创建的节点的地址。如果链接列表为空并且创建了第一个节点,那么它也称为头节点。

创建节点后,可以为其分配值(创建它以保持),并为其下一个指针分配下一个节点的地址。如果没有下一个节点(或者如果它的最后一个节点),则如前所述,分配NULL。这可以通过以下方式完成:

...... 
... 
ptr-> val = val; 
ptr-> next = NULL; 
... 
...

如何搜索链表中的节点?

搜索节点意味着找到包含要搜索的值的节点。如果我们谈论线性搜索,这实际上是一个非常简单的任务(注意,可以有许多搜索算法)。只需要从第一个节点开始,然后将正在搜索的值与此节点中包含的值进行比较。如果值不匹配,则通过“下一个”指针(包含下一个节点的地址)访问下一个节点,并在那里进行相同的值比较。搜索继续进行,直到访问最后一个节点或找到其值等于被搜索值的节点。此代码段可能如下所示:

... ... 
... ... 
... ... 
   while(PTR!= NULL)
    { 
        if(ptr-> VAL == VAL)
        { 
            found= TRUE; 
            break; 
        } 
        else 
        { 
            ptr = ptr-> next; 
        } 
    } 
... 
... 
...

如何删除节点?

通过首先在链表中找到节点然后在包含其地址的指针上调用free()来删除节点。如果删除的节点是除第一个和最后一个节点之外的任何节点,则需要将删除的节点之前的节点的“下一个”指针指向刚好在删除的节点之后的节点的地址。就像一个人脱离人链一样,然后这两个人(他们之间)需要携起手来维持链条。

原文链接:链表的学习应用

你可能感兴趣的:(数据结构,c语言)