C语言单链表常见操作汇总

C语言单链表常见操作汇总

单链表是C语言中常见的一种数据结构,其主要特点是动态内存分配和对元素的动态插入和删除操作。单链表的实现需要掌握以下几个常见的操作:

初始化链表

链表的初始化操作是将一个空链表初始化,此时该链表不包含任何元素。

typedef struct node
{
    int data;
    struct node *next;
}Node;

typedef struct
{
    Node *head;
    Node *tail;
}LinkedList;

void InitList (LinkedList *list)
{
    list->head = NULL;
    list->tail = NULL;
}

添加元素到链表尾部

链表的尾插法操作是将一个元素插入链表尾部,需要注意的是插入的元素实际上是一个新节点。

void InsertTail (LinkedList *list, int data)
{
    Node *newNode = (Node*) malloc (sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;

    if (list->head == NULL)
    {
        list->head = newNode;
    }
    else
    {
        list->tail->next = newNode;
    }

    list->tail = newNode;
}

示例1:插入元素2到链表尾部

LinkedList list;
InitList(&list);

InsertTail(&list, 1);
InsertTail(&list, 2);
InsertTail(&list, 3);

//此时链表作为一个整体的数据结构为:1 -> 2 -> 3 -> NULL

从链表中删除指定元素

链表的删除操作是将指定元素从链表中删除,此处首先需要找到该元素所在的节点,然后再进行删除操作。

void DeleteNode (LinkedList *list, int data)
{
    Node *p = list->head;
    Node *prev = NULL;

    while (p != NULL)
    {
        if (p->data == data)
        {
            if (prev == NULL)
            {
                list->head = p->next;
            }
            else
            {
                prev->next = p->next;
            }

            if (list->tail == p)
            {
                list->tail = prev;
            }

            free (p);
            return;
        }

        prev = p;
        p = p->next;
    }
}

示例2:从链表中删除元素2

LinkedList list;
InitList(&list);

InsertTail(&list, 1);
InsertTail(&list, 2);
InsertTail(&list, 3);

DeleteNode(&list, 2);

//此时链表作为一个整体的数据结构为:1 -> 3 -> NULL

以上是关于C语言单链表的常见操作,需要注意的是对链表的操作需要注意指针的使用,否则会引起内存泄漏或者其他问题。同时对于链表的操作还有其他更加高级的技术,例如双链表、循环链表等,需要针对实际情况进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言单链表常见操作汇总 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】

    PHP实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】 在PHP中,我们可以使用finfo_file函数结合二进制流来准确判断文件类型,而不依赖于文件的扩展名。下面是详细的攻略: 步骤1:安装和启用fileinfo扩展 首先,确保你的PHP环境已经安装并启用了fileinfo扩展。你可以通过在php.ini文件中取消注释exten…

    other 2023年8月6日
    00
  • C++实现LeetCode(83.移除有序链表中的重复项)

    下面是关于“C++实现LeetCode(83.移除有序链表中的重复项)”的完整攻略。 题目描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例1: 输入: 1->1->2 输出: 1->2 示例2: 输入: 1->1->2->3->3 输出: 1->2->3 解题思路 由于链表已经是…

    other 2023年6月27日
    00
  • iOS10.2.1正式版升级需要多大空间 苹果新系统iOS10.2.1正式版更新升级占用多大内存

    iOS 10.2.1正式版升级所需空间攻略 苹果的新系统iOS 10.2.1正式版已经发布,如果你想升级到这个版本,你需要确保你的设备有足够的可用空间。以下是一个详细的攻略,告诉你升级到iOS 10.2.1正式版所需的空间大小。 步骤1:检查可用空间 在升级之前,首先要检查你的设备上有多少可用空间。你可以按照以下步骤进行操作: 打开设备的设置应用程序。 点击…

    other 2023年8月1日
    00
  • Android ndk获取手机内部存储卡的根目录方法

    要在Android NDK中获取手机内部存储卡的根目录,可以使用Java层代码调用Android的API获取路径,再将该路径传递给NDK层。 第一步:在Java层获取存储卡路径 使用以下Java代码可以获取手机内部存储卡的根目录: File storageDir = Environment.getExternalStorageDirectory(); Str…

    other 2023年6月27日
    00
  • C语言编程深入理解取整取余取模问题示例分析

    C语言编程深入理解取整取余取模问题示例分析 什么是取整、取余、取模? 在C语言中,/ 可以用来进行整除(取整)操作,% 可以用来进行取余或取模操作。 当两个整数相除时,如果能够整除,则结果即为商;否则,结果则包括商和余数,其中商为取整结果,而余数则为取余或取模的结果。 取整:将一个浮点数四舍五入或向下取整成整数,例如: int a = 5.6 / 2; //…

    other 2023年6月26日
    00
  • vs2017安装步骤详解

    以下是详细讲解“VS2017安装步骤详解的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: VS2017安装步骤详解 Visual Studio 2017是微软推出的一款集成开发环境,支持多种编程语言和开发平台。本攻略将详细介绍VS2017的安装步骤,包括下载、安装和配置。同时,本攻略还提供了两个示例说明,助您更好地理解和应用这些技术。…

    other 2023年5月10日
    00
  • Linux内核链表实现过程

    首先我们需要知道链表是什么。链表是一种数据结构,它由一系列节点组成,其中每个节点都包含一个指向下一个节点的指针。链表可以动态地添加或删除节点,使其具有灵活性。接着,我们来看看如何在Linux内核中实现链表。 实现步骤 以下是Linux内核中实现链表的步骤: 定义链表节点结构体,通常包含两个成员:指向下一个节点的指针和一个数据成员。 c struct list…

    other 2023年6月27日
    00
  • Win9技术预览版下载地址页面曝光:32位版本积将超过3GB

    很抱歉,但我必须告诉您,关于\”Win9技术预览版下载地址页面曝光:32位版本积将超过3GB\”的攻略,我无法提供详细的信息。这是因为\”Win9技术预览版\”并不是一个真实存在的产品,而且在2023年的7月28日,我所了解的最新操作系统是Windows 11。 如果您有关于Windows 11的问题,我将非常乐意帮助您。请告诉我您需要了解的内容,我将尽力为…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部