单链表的介绍

链表是一种常见的线性数据结构,用于存储一系列元素。它由一系列节点组成,每个节点包含两部分:数据域和指针域。其中,数据域用于存储元素的值,指针域用于指向下一个节点。

单链表的特点包括:

  1. 节点组成:单链表由多个节点组成,每个节点包含数据和指向下一个节点的指针。
  2. 头指针:单链表通常有一个头指针,指向链表的第一个节点。
  3. 尾节点指针:有些单链表会有一个尾节点指针,指向链表的最后一个节点,方便在尾部进行插入操作。
  4. 动态内存分配:单链表的节点在内存中可以动态分配,不需要连续的内存空间,因此可以方便地进行插入和删除操作。
  5. 灵活性:由于单链表的节点之间使用指针连接,因此可以根据需要在链表中间插入或删除节点,而不需要移动其他节点。

与顺序表一样,单链表也是一种线性表;和顺序表不同,链表在逻辑上连续,在物理上不连续。

如下:

单链表的实现:

1.与实现顺序表一样,创建SList.c  Slist.h  test.c  三个文件

.h用来包含实现方法所需的头文件以及所需方法的初始化。

test.c用来测试代码是否出错

.c用来实现各种方法

2.定义节点的结构:

实现链表的节点需要创建两个变量:数据域和指针域,利用结构体来是实现

利用typedef将struct SListNode简化为SLTNode。

3.方法声明:实现该链表所需头文件以及各种方法的声明

方法实现:在SList.c中对需要的方法进行实现。

顺序表的实现需要初始化并申请一块内存,而链表却不需要,这是因为链表存储的空间并不是连续的。

实现链表的功能:

1.打印

在main方法里实现即可

2.尾插:

在链表的插入操作中,我们需要修改的是当前节点的指针,需要传址调用。如果我们只传递指向当前节点的指针,那么在函数内部修改指针的值只会传值调用,而不会影响调用者传递给函数的原始指针。故就是二级指针(传址调用),修改当前节点指针。

测试:

头插的实现:

将赋值后的newnode的下一个节点赋给pphead,这样newnode就成为了新的头指针。

查找:

创建新节点pcur ,遍历,如果当前节点符合,返回,否则继续,若最后未找到,返回NULL

    测试:
    

在指定位置之前插入数据:

pos之前插入,将newnode节点指向pos,将prev->next指向newnode

在指定位置之后插入数据:

删除指定位置的节点:

删除指定位置之后的数据

销毁链表:

遍历链表,next接收pcur的下一个节点,之后释放pcur后,将保存的next再赋给pcur,简而言之,创建一个第三方节点保存数据,让后遍历释放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/637578.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flowable 基本用法

一. 什么是Flowable Flowable 是一个基于 Java 的开源工作流引擎,用于实现和管理业务流程。它提供了强大的工作流引擎和一套丰富的工具,使开发人员能够轻松地建模、部署、执行和监控各种类型的业务流程。Flowable 是 Activiti 工作流引擎的一个分支&am…

线程池中常见的几大问题

说说你对线程池的了解? 线程池,是对一系列线程进行管理的资源池,当有任务来时,我们可以使用线程池中的线程,完成任务时不需要被销毁,会重新回到池子中,等待下一次的复用。 为什么要使用线程池…

垃圾收集器ParNewCMS与底层三色标记算法详解

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都是采用分代收集算法,这种算法没有什么新思想,只是依据对象的存活周期不同将内存分为几块.一般将Java堆分为新生代和老年代,这样就可以根据各个年代的特点选择合适的垃圾收集算法. 比如在新生代中,每次收集都会有大量对象(近…

MKS GM50A MFC GUI 软件使用指南GE50A调零原理及步骤PPT

MKS GM50A MFC GUI 软件使用指南GE50A调零原理及步骤PPT

介绍与部署 Zabbix 监控系统

目录 前言 一、监控系统 1、主流的监控系统 2、监控系统功能 二、Zabbix 监控系统概述 1、Zabbix 概念 2、Zabbix 主要特点 3、Zabbix 主要功能 4、Zabbix 监控对象 5、Zabbix 主要程序 6、Zabbix 监控模式 7、Zabbix 运行机制 8、Zabbix 监控原理 9、Zabbix 主…

Mac 下安装PostgreSQL经验

使用homebrew终端软件管理器去安装PostgreSQL 如果没有安装brew命令执行以下命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 沙果开源物联网系统 SagooIoT | SagooIoT 1.使用命令安装postgreSQL brew i…

java的单元测试和反射

单元测试 就是针对最小的功能单元,编写测试代码对其进行正确性测试 Junit单元测试框架: 可以用来对方法进行测试 有点: 可以灵活的编写测试代码,可以针对某个方法进行测试,也支持一键完成对全部方法的自动发测试&a…

开源王者!全球最强的开源大模型Llama3发布!15万亿数据集训练,最高4000亿参数,数学评测超过GPT-4,全球第二!

本文原文来自DataLearnerAI官方网站: 开源王者!全球最强的开源大模型Llama3发布!15万亿数据集训练,最高4000亿参数,数学评测超过GPT-4,全球第二! | 数据学习者官方网站(Datalearner)https://ww…

使用Python比较两张人脸图像并获得准确度

使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。 一、原理 使用Face Recognition python 模块来获取两张图像的128 个面部编码,并比较这些编码。比较结果返回 True 或 False。如果结果为True ,那么两个图像将是相同的…

2024团体程序设计天梯赛L1-104 九宫格

题目链接L1-104 九宫格 #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int n, mapp[10][10], a[10]; int dx[10]{0, 1, 1, 1, 4, 4, 4, 7, 7, 7}; int dy[10]{0, 1, 4, 7, 1, 4, 7, 1, 4, 7}; b…

2、关于数据库事务那些事

目录 1、什么是事务&#xff1f; 2、介绍下数据库事务&#xff1f; 3、并发事务会带来什么问题&#xff1f; 3.1、不可重复读和幻读有什么区别&#xff1f; 4、数据库隔离级别有哪几种&#xff1f; 5、MySQL默认使用隔离级别是啥&#xff1f; 6、如何控制并发事务&#…

山东大学操作系统实验一(Linux虚拟机实现)

目录 实验题目 实验要求 示例程序 主程序 头文件 重点代码解析 一、main函数的参数 参数介绍 参数输入方式 本块代码 二、信号处理 本块代码 原理介绍 实现效果 三、kill函数 功能介绍 使用方式 本块代码 四、头文件处理 本块代码 代码作用 实验程序 …