C语言单向链表的表示与实现实例详解

C语言单向链表的表示与实现实例详解

介绍

单向链表是一种常见的数据结构,它由若干个节点构成,每个节点包含一个数据域和一个指向下一个节点的指针。单向链表通常用于需要频繁插入、删除节点的场景,如操作系统的进程调度、内存管理等。

本文将介绍C语言中单向链表的表示和实现,包括链表的定义、插入节点、删除节点等操作。

链表的定义

在C语言中,链表通常由一个结构体表示,该结构体包含一个数据域和一个指向下一个节点的指针。如下所示:

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

其中,data为节点的数据域,next为指向下一个节点的指针。当next为空指针NULL时,表示链表结束。

插入节点

插入节点是链表中最常见的操作之一。它需要在链表中找到一个指定的位置,将新节点插入到该位置。在C语言中,插入节点的代码示例如下:

void insert_node(struct node* head, int data, int pos) {
    struct node* new_node = (struct node*)malloc(sizeof(struct node));
    new_node->data = data;
    new_node->next = NULL;

    struct node* current = head;
    int i = 0;
    while (current != NULL && i < pos - 1) {
        current = current->next;
        i++;
    }

    if (current == NULL) {
        printf("Error: invalid position");
        return;
    }

    new_node->next = current->next;
    current->next = new_node;
}

该函数接受三个参数:链表头指针head、新节点的数据data和新节点需要插入到的位置pos。首先,该函数分配一个新节点,并将数据data存储到该节点的数据域中。然后,遍历链表,找到需要插入的位置,将新节点插入到该位置。

删除节点

删除节点是链表中另一个常见的操作。它需要找到链表中一个指定的节点,并将其从链表中删除。在C语言中,删除节点的代码示例如下:

void delete_node(struct node* head, int pos) {
    struct node* current = head;
    int i = 0;
    while (current != NULL && i < pos - 1) {
        current = current->next;
        i++;
    }

    if (current == NULL || current->next == NULL) {
        printf("Error: invalid position");
        return;
    }

    struct node* temp = current->next;
    current->next = temp->next;
    free(temp);
}

该函数接受两个参数:链表头指针head和需要删除的节点的位置pos。首先,该函数遍历链表,找到需要删除的节点的前一个节点。然后,将需要删除的节点从链表中断开,并释放该节点所占用的内存。

示例说明

假设我们有一个整数类型的单向链表,包含以下几个节点:

1 -> 2 -> 3 -> 4 -> 5

现在要在第三个节点的后面插入一个新节点6,代码示例如下:

insert_node(head, 6, 3);

执行代码后,链表变成:

1 -> 2 -> 3 -> 6 -> 4 -> 5

然后,我们要将第四个节点删除,代码示例如下:

delete_node(head, 4);

执行代码后,链表变成:

1 -> 2 -> 3 -> 4 -> 5

总结

本文介绍了C语言中单向链表的表示和实现,包括链表的定义、插入节点、删除节点等操作。单向链表是一种常见的数据结构,掌握它的基本操作对于理解其他数据结构也是非常有益的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言单向链表的表示与实现实例详解 - Python技术站

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

相关文章

  • 详解python字符串相关str

    当涉及到 Python 中字符串类型时,str 类型是最常用的。str 类型允许存储文本,而且是不可变对象,这表示一旦你建立了字符串,你就不能改变它。 创建字符串 单引号和双引号 在 Python 中,我们可以使用单引号或双引号两种方式定义字符串。例如: # 使用单引号创建字符串 str1 = ‘This is a string.’ # 使用双引号创建字符串…

    other 2023年6月20日
    00
  • 常用的9个网络命令 非常实用

    常用的9个网络命令 非常实用 作为网络管理和维护的人员,掌握一些常用的网络命令和工具非常重要。本文将介绍9个常用的网络命令,让你能更好的了解网络的运作和维护。 1. ping ping命令用于测试网络连接并检测网络延迟。其语法为: ping [options] <host> 其中,options是可选的参数,host是需要测试的主机名或IP地址。…

    other 2023年6月26日
    00
  • 详解java封装继承多态

    详解Java封装、继承、多态 Java是一种非常流行的面向对象编程语言,其中最核心的概念就是封装、继承和多态。在使用Java进行开发过程中,掌握这三个概念是非常重要的。本文将详细讲解Java封装、继承、多态的含义、原理、应用和示例,以帮助读者加深对这三个概念的理解。 什么是封装 封装是面向对象编程的一个重要原则,它是指将数据和对数据的操作封装在一个类中,并且…

    other 2023年6月25日
    00
  • CDR中输入小写字母按确定变大写怎么办?

    CDR中输入小写字母按确定变大写攻略 如果你在CDR(CorelDRAW)中输入小写字母后按下确定键,字母不会自动转换为大写。然而,你可以使用以下两种方法将小写字母转换为大写: 方法一:使用文本工具和字母转换功能 打开CDR文件并选择文本工具(T)。 在画布上创建一个文本框,并输入你想要转换的小写字母。 选中文本框中的字母,然后在顶部菜单栏中找到“文本”选项…

    other 2023年8月18日
    00
  • oracle mysql 拼接值遇到的坑及双竖线 || concat详解

    标题:Oracle MySQL 拼接值遇到的坑及双竖线 || CONCAT 详解 介绍 拼接字符串在数据库操作中是一个常用的操作。在 Oracle MySQL 中,一般使用 MySQL 自带的 CONCAT 函数拼接字符串。但是使用 CONCAT 函数的时候,可能会遇到一些坑,本篇攻略将代码示例和文字详细说明,帮助读者更好地理解使用 CONCAT 函数拼接字…

    other 2023年6月25日
    00
  • 魔兽世界7.3.5奶萨怎么堆属性 wow7.35奶萨配装属性优先级攻略

    魔兽世界7.3.5奶萨怎么堆属性 作为一名奶萨,属性的堆叠非常重要。在 7.3.5 版本中,奶萨的主要属性包括精通、急速和全能,其次是暴击和耐力。 属性分析 精通 精通是奶萨非常重要的一个属性,它可以提升治疗量并且在装备到一定程度后还能额外提供全能属性。对于奶萨来说,精通的数值越高,治疗输出就越高。 急速 急速也是奶萨很重要的属性之一,它可以提升施法速度和法…

    other 2023年6月27日
    00
  • connectby用法

    connectby用法 connectby是Oracle数据库的一个非常有用的函数,用于查询树形结构数据并返回它们的层级关系。这个函数可以很方便地把一颗树形结构的数据转换成平面化的表格数据。 使用connectby函数时,需要指定一个起始节点(connect by <column> = <value>),然后通过prior关键字指定它…

    其他 2023年3月28日
    00
  • 浅析BootStrap栅格系统

    浅析BootStrap栅格系统 什么是BootStrap栅格系统? BootStrap栅格系统是一种用于构建响应式网页布局的前端框架。它基于栅格系统的概念,将页面划分为12个等宽的列,通过在不同屏幕尺寸下的列的组合来实现灵活的布局。 栅格系统的基本原理 BootStrap栅格系统的基本原理是将页面划分为12个等宽的列,并通过CSS样式来控制每个列在不同屏幕尺…

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