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

yizhihongxing

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日

相关文章

  • Android ToolBar控件详解及实例

    Android ToolBar控件详解及实例 简介 ToolBar是Android系统提供的一个工具栏控件,它可以用来代替ActionBar,具有更强的定制性和扩展性。使用ToolBar可以帮助我们更容易地实现不同样式的界面,从而提升用户体验。 使用 添加依赖 在项目的build.gradle文件中添加以下依赖: implementation ‘com.go…

    other 2023年6月27日
    00
  • Python数据预处理:使用Dask和Numba并行化加速

    下面是关于使用Dask和Numba并行化加速Python数据预处理的完整攻略,包括Dask和Numba的介绍、使用方法和两个示例说明。 Dask和Numba的介绍 Dask是一个用于并行化Python程序的工具包,可以在单机或分布式环境下运行。Dask提供了类似于Pandas和NumPy的API,可以处理大规模数据集,并且可以自动并行化计算过程。 Numba…

    other 2023年5月6日
    00
  • iso14229简介转载

    ISO14229简介转载 ISO14229是一项国际标准,为汽车电子系统中的诊断通信定义了统一的协议和服务。其通信协议基于CAN总线,并支持多种传输层协议,如ISO9113等。 ISO14229协议定义了一些诊断服务和协议,如诊断会话控制服务,ECU诊断服务和ECU编程/配置服务等。这些服务为车辆制造商和维修机构提供了一种标准化的方式来操作汽车电子系统,并且…

    其他 2023年3月28日
    00
  • Windows7下安装使用MySQL8.0.16修改密码、连接Navicat问题

    下面我将为您详细讲解“Windows7下安装使用MySQL8.0.16修改密码、连接Navicat问题”的完整攻略,步骤如下: 安装MySQL8.0.16 首先,在MySQL官网下载MySQL8.0.16安装文件,并安装到Windows7系统中。然后可以按照以下步骤修改密码: 打开命令行界面(如Windows+R,cmd),输入以下命令进入mysql: my…

    other 2023年6月27日
    00
  • android实现系统分享

    当用户在Android应用程序中想要分享内容时,可以使用系统分享功能。系统分享功能允许用户将内容分享到其他应用程序中,例如社交媒体、电子邮件、信等。本文将详细讲解如何在Android应用程序中实现系统分享功能。 实现步骤 以下是实现系统分享功能的步骤: 创建一个Intent对象。 在Android中,Intent对象用于在应用程序之间传递数据。要创建一个分享…

    other 2023年5月9日
    00
  • Java配置win10环境变量过程图解

    当我们想要开发Java程序或者运行Java应用时,需要在我们的操作系统中配置Java环境变量。这样操作系统才能正确找到Java运行时环境。在Windows 10中,配置Java环境变量需要经过以下步骤: 1. 下载Java JDK 首先需要下载Java JDK(Java开发工具包)。可以从Java官网中下载JDK安装包,也可以在第三方网站上下载。 2. 安装…

    other 2023年6月27日
    00
  • JS构造函数和实例化的关系及原型引入

    JS中,构造函数是用于创建对象的特殊函数,用更直白的语言解释,构造函数其实就是一个模板,可以用来创建具有相同属性和方法的多个对象。 在JS中,我们可以通过函数的方式来创建一个构造函数,代码如下: function Person(name, age) { this.name = name; this.age = age; this.getInfo = func…

    other 2023年6月26日
    00
  • 怎么隐藏文件夹

    隐藏文件夹的方法会因操作系统不同而有所不同,我会为您提供Windows和MacOS两个操作系统的方法。 Windows 在Windows上,隐藏文件夹需要进行以下步骤: 首先找到要隐藏的文件夹,右键单击它并选择“属性”。 在“属性”窗口的“常规”选项卡中,勾选“隐藏”。 点击“应用”按钮,然后点击“确定”按钮。 这样就能隐藏文件夹了。要查看隐藏的文件夹,需要…

    其他 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部