「链表」数据结构简析

news2024/10/5 19:15:39

前言

前言:研究一个数据结构的时候,首先讲的是增删改查。

文章目录

  • 前言
  • 一、链表简介
    • 1. 含义
    • 2. 节点组成
    • 3. 存储方式
      • 1)数据在内存中的存储方式
      • 2)单链表在内存中的存储方式
      • 2)双链表在内存中的存储方式
      • 2)循环链表在内存中的存储方式
    • 4. 特点
  • 二、链表的操作
    • 1. 插入数据
      • 1)头部插入
      • 2)中间插入
      • 3)尾部插入
    • 2. 删除数据
      • 1)删除头节点
      • 2)删除中间节点
      • 3)删除尾节点

一、链表简介

1. 含义

  • 链:链子。
  • 表:数据集合。按照一定顺序排列的元素集合为表。
  • 链表的概念:链表中存储的是数据,按照一定顺序排列,每一个数据的前面的数据叫做前驱,后面的数据叫做后继。

在这里插入图片描述

2. 节点组成

链表中的每个节点都是由两部分组成。一部分为数据(节点存放的值),另一部分为 地址(下一个节点的地址),节点与节点之间通过指针连接起来。

3. 存储方式

1)数据在内存中的存储方式

  • 每个数据在内存中存储都需要占据一块内存空间,任何一块内存空间都有相应的地址。

  • 根据元素首地址和数据类型,其中数据类型规定了占据的内存空间的字节大小。

  • 通过元素首地址和定义变量的数据类型就可以确定数据所占唯一的内存空间大小,同时找到对应的内存空间,然后从内存空间中读写数据即可。

在这里插入图片描述

2)单链表在内存中的存储方式

  • 链表区别于数组的存储方式,数组在内存中是集中存放的,链表在内存中是散乱存放的。

  • 只要内存中有位置,链表节点就可以存放,节点间通过指针连接。

在这里插入图片描述

2)双链表在内存中的存储方式

在这里插入图片描述
一个节点内部组成如下图所示。
在这里插入图片描述

2)循环链表在内存中的存储方式

在这里插入图片描述

4. 特点

  • 插入删除数据效率高,读取(查找)数据效率低。

  • 查找数据:需要从头结点开始,需要挨个进行判断,效率低。

  • 更新数据:需要先查找到数据(查找),从头结点开始依次判断,找到之后替换数据。

二、链表的操作

1. 插入数据

1)头部插入

新节点的 next 指向原链表的头结点,这样新节点就为当前新链表的头结点。
其中 “指向”是一个逻辑概念,怎么用代码实现,通过给 next 指针赋值的方式实现更改指向。
在这里插入图片描述

2)中间插入

将要插入的节点的 next 指向后一个节点,前一个节点 next 指向要插入的节点。

在这里插入图片描述

3)尾部插入

在这里插入图片描述

2. 删除数据

1)删除头节点

直接将头节点删除,第二节点成为头节点。将 Head 指针往后移动一位。

2)删除中间节点

将前一个节点的 next 指向后一个节点。

在这里插入图片描述

3)删除尾节点

直接将尾节点的前一个节点的 next 置为 NULL 即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序地址空间

目录 1. 验证程序地址空间布局图 2. 虚拟地址空间 什么是虚拟地址空间 3. 进程地址空间 4. 为什么要有虚拟地址空间 1. 有效保护物理内存 2. 使内存管理模块和进程管理模块实现解耦合 3. 将内存分布有序化 1. 验证程序地址空间布局图 下面我们写段代码验证一下上图中…

qt调用matlab生成的dll库

最近由于在项目中要用到matlab的算法,而用C转换matlab算法非常麻烦,所以采用qtmatlab混合编程的方法,在使用中遇到了些许问题,特记录如下。 一、生成matlab库 1、首先需要下载matlab完整版,之前在网上下载的简版&…

基于C#制作一个休息提醒闹钟

> 此文主要通过WinForm来制作一个休息提醒闹钟,通过设置时间间隔进行提醒,避免沉浸式的投入到工作或者学习当中,战斗的同时也要照顾好自己。 实现流程1.1、创建项目1.2、时间间隔配置页1.3、闹钟提醒页1.4、开机自启动配置1.5、日志记录1.…

一个数据库文档生成神器

Gitee项目地址,可以直接去开源项目查看(推荐) 简介 在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是…

MySql 5.7.40备份到腾讯云cos+从cos恢复

1 备份 1.1 安装coscli # wget https://github.com/tencentyun/coscli/releases/download/v0.12.0-beta/coscli-linux # mv coscli-linux /usr/bin/coscli # chmod 755 /usr/bin/coscli # coscli --version如果github慢可以使用国内镜像: wget https://cosbrowse…

数电相关知识

文章目录 逻辑电路与或非异或 门电路与的物理电路电压比较器D型锁存器优先编码器边沿触发器RS触发器施密特触发器基本原理555定时器数电电平TTL器件CMOS器件逻辑电路 与或非异或 门电路 与乘大于1或加大于1异或异性为1,异吗? 与的物理电路

Leetcode:17. 电话号码的字母组合(C++)

目录 问题描述: 实现代码与解析: 回溯: 原理思路: 问题描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&…

【数据库】必须知道的MySQL优化

文章目录SQL语言有哪几部分组成为什么要进行MySQL优化?优化方法有哪些?SQL层面优化MySQL配置方面架构设计方面硬件和操作系统方面.SQL语言有哪几部分组成 数据定义语言,简称DDL:DROP,CREATE,ALTER等语句。数据操作语言&#xff0…

【Java|golang】2299. 强密码检验器 II

如果一个密码满足以下所有条件,我们称它是一个 强 密码: 它有至少 8 个字符。 至少包含 一个小写英文 字母。 至少包含 一个大写英文 字母。 至少包含 一个数字 。 至少包含 一个特殊字符 。特殊字符为:“!#$%^&*()-” 中的一个。 它 不…

VMware 安装 OpenWrt 旁路由并配置 PassWall

准备 OpenWrt 镜像包,本例使用的是在恩山论坛上面下载的https://www.right.com.cn/forum/thread-8271618-1-1.html网络选择 NAT 模式创建虚拟机一直下一步至一直下一步至,这里选择 NAT 方式一直下一步至,这里选择“使用现在虚拟磁盘”&#x…

高并发系统设计 -- 粉丝关注列表如何设计

粉丝关注列表如何设计和落地 业务场景 上图我们简称relation页。relation页展示用户的关系相关信息,包含两个子页面: follower页,展示关注该用户的所有用户信息。attention页,展示该用户关注的所有用户信息 主要操作 用户可以…

数论之欧拉筛法(含朴素筛选、埃式筛选详细代码)

文章目录前言朴素筛法(纯暴力,O(n^2^))埃式筛法(找出合数来确认质数, O(n*log(logn)))欧拉筛法(线性筛选,O(n))参考文章前言 在学习Acwing c蓝桥杯辅导课第八讲数论-1295. X的因子链…

Linux常用命令——tcpdump命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tcpdump 一款sniffer工具,是Linux上的抓包工具,嗅探器。 补充说明 tcpdump命令是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,…

【MySQL】CentOS7 卸载以及安装 MySQL 详细流程

一、卸载 MySQL 查看 MySQL 安装版本 mysqladmin --version通过 rpm 查找 MySQL rpm -qa|grep -i mysql查看 MySQL 运行状态 systemctl status mysqld.service关闭 MySQL 服务 systemctl stop mysqld.service通过 yum remove 删除 MySQL 安装包 把上面所有的安装包挨个删除…

用友U8和旺店通·企业奇门单据接口对接

对接系统旺店通企业奇门旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化智能化管理升级。为零售电商企业的订单管理及仓储管理提供解决方案&a…

Java寒假作业——编程题

二、编程题(ACM模式)1-2题1 (2022蚂蚁金服)一个字母可以拆分成两个字母表顺序的前一个字母,例如,b可以拆分成aa,c可以拆分成bb。打印出最短的可以拆分成 K 个 a 的字符串,字母顺序无…

Spring的三种装配机制(XML、JavaConfig、自动装配)

Spring中bean有三种装配机制一、在xml中显示装配二、 在java中显式装配&#xff0c;都需要在Config配置类重写三、自动装配1. xml方式自动装配2. 使用注解装配等于依赖关系注入&#xff0c;即一个Bean作为属性&#xff0c;装配到另一个Bean。 一、在xml中显示装配 <!--1. …

GCC是什么

GCC是什么 说到 GCC&#xff0c;就不得不提 GNU&#xff0c;“GNU”是“GNUs Not Unix!”&#xff08;GNU并非Unix&#xff01;&#xff09;的首字母递归缩写&#xff0c;中文名“革奴计划”。GNU 计划的最终目标是打造出一套完全自由&#xff08;即自由使用、自由更改、自由发…

Java基础之《netty(28)—TCP粘包拆包原理》

一、基本介绍 1、TCP是面向连接的&#xff0c;面向流的&#xff0c;提供高可靠性服务。收发两端&#xff08;客户端和服务器端&#xff09;都要有一一成对的socket&#xff0c;因此&#xff0c;发送端为了将多个发给接收端的包&#xff0c;更有效的发给对方&#xff0c;使用了…

C++语法复习笔记-第6章 c++指针

文章目录1. 计算机内存1. 储存层次2. 内存单元与地址3. 指针定义2. 左值与右值1. 数组与指针1. 概念3. C中的原始指针1. 数组指针与指针数组2. const pointer 与 pointer to const3. 指向指针的指针4.关于野指针4.1 指向指针的指针4.2 NULL指针4.3 野指针5. 指针的基本运算5.1 …