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日

相关文章

  • Android自定义控件之日期选择控件使用详解

    关于Android自定义控件之日期选择控件使用详解的完整攻略,我们需要涉及以下几个方面: 一、前置条件1. Android Studio 环境搭建2. 对自定义控件的基础知识了解 二、创建日期选择控件1. 布局XML文件2. 创建控件类3. 初始化属性4. 自定义绘制5. 实现点击事件 三、使用日期选择控件1. 在布局中引用控件2. 设置控件属性3. 监听日…

    other 2023年6月27日
    00
  • Java 找不到或无法加载主类的修复方法

    修复 Java 找不到或无法加载主类的方法 简介 当你在运行 Java 程序时,如果遇到“找不到或无法加载主类”的错误,这通常表示 JVM(Java 虚拟机)无法找到指定的主类。这种问题可以由于多种原因引起,但是通过以下方法可以修复它。 方法一:检查类路径 主类是 Java 程序的入口点,JVM 依靠类路径来找到主类。因此,首先检查类路径是否正确。 确保你已…

    other 2023年6月28日
    00
  • python使用 __init__初始化操作简单示例

    当我们创建一个Python类时,我们有时需要在实例化对象时进行一些初始化操作。这就是使用Python的__init__函数的地方。在这篇文章中,我将详细讲解如何使用__init__函数进行初始化操作。下面是完整攻略: 1. __init__函数的基本用法 __init__函数是Python类的构造函数,它用于初始化新创建的对象。当我们实例化一个类时,__in…

    other 2023年6月20日
    00
  • 详解Angular开发中的登陆与身份验证

    当我们在进行Web应用程序开发时,登录和身份验证是其中非常重要的一部分。Angular作为一种流行的前端框架,提供了许多功能和工具,可以帮助我们轻松地实现登录和身份验证。本文将详细讲解如何在Angular开发中实现登录和身份验证。 1. 创建Angular应用程序 首先,我们需要创建一个Angular应用程序。使用以下命令来创建一个新的Angular应用程序…

    other 2023年6月27日
    00
  • 解析android中的帮助、about、关于作者、HELP等提示页面

    解析Android中的帮助、About、关于作者、HELP等提示页面攻略 在Android应用中,帮助、About、关于作者、HELP等提示页面通常用于提供应用的相关信息、功能说明和联系方式等。下面是解析这些页面的完整攻略: 1. 帮助页面 帮助页面通常用于向用户提供应用的功能说明和使用指南。以下是解析帮助页面的步骤: 创建帮助页面布局:使用XML布局文件创…

    other 2023年9月6日
    00
  • python类中super() 的使用解析

    下面我来详细讲解一下python类中super()的使用解析。 什么是super()函数 在python中,使用 super() 函数可以让我们在子类中调用父类的方法和属性,实现多重继承时也可以保证实例化调用的先后顺序。 简单来说,super() 函数是用来调用父类中定义的方法的工具,它可以帮助我们避免硬编码(Hard Coding),同时提高代码的重用性。…

    other 2023年6月27日
    00
  • 详解PHP框架EasySwoole

    详解PHP框架EasySwoole的完整攻略 简介 EasySwoole是一款基于Swoole扩展的高性能HTTP框架,支持TCP/UDP服务器,同时内置了Websocket服务器以及RPC服务器。EasySwoole具有高性能、高灵活性、高可靠性等特点,可以快速地实现高并发的Web应用和API。 安装和配置 安装 EasySwoole可以通过Compose…

    other 2023年6月27日
    00
  • 深度理解Python中Class类、Object类、Type元类

    深度理解Python中Class类、Object类、Type元类 在 Python 中,所有的对象都是基于类(Class)创建的。Class 是一种特殊的对象,它拥有创建其他对象的能力。在本文中,我们将深入学习Python中的 Class、Object类 和 Type元类。 Class类 在 Python 中,我们可以用 Class 来定义一个新的类型,通过…

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