当前位置:   article > 正文

数据结构之链表---单向链表_用单向链表(首尾为空节点)表示一组数组,

用单向链表(首尾为空节点)表示一组数组,

逻辑结构:

集合结构:所有数字可以看做一个整体

线性结构:一条有顺序的线把所有的数字串起来

树状结构:所有数字都是从一个数字开始向一个方向扩展出来的

网状结构:任何两个数字之间都有直接的联系,不同数字之间联系互相无关

物理存储结构:

1.顺序存储:内存空间开辟是连续
   例如数组,内存空间连续开辟,数据元素类型相同
2.链式存储:通过地址将数据元素联系在一起
3.索引存储:通过索引表找到数据元素存放位置,拿到数据
                     存在两个表格--》索引表  和  数据表
4.散列存储结构  (哈希存储):数据元素的存放和位置之间,存在一个关系,有一个关键key值,通过key值带入存在的关系函数,可以得到数据的存放位置。

链表属于一种线性链式结构,由多个结构体存储区构成,任意两个结构体存储区之间用指针连接,每个结构体存储区叫一个节点,链表不支持随机访问,适合插入和删除,节点动态分配,可任意改变个数

链表还分为单向链表,双向链表,单向循环链表,双向循环链表 

单向线性链表:是简单地链式物理结构,所有节点可用一条线串起来,任何两个节点之间都有前后顺序,每个节点需要一个指针,最后一个节点为空指针

无头单向链表,所有节点的数据域都是有效的,例如:

有头单向链表:存在一个头节点,数据域无效,指针域有效,也就是有一个空的头节点

遍历列表

单向链表由于只有一个指针,因此只支持向一个方向遍历,为了遍历链表可以申请两个空的无用的头节点和尾节点进行遍历,用三个指针分别指向第一个第二个第三个节点,然后依次往后+1指向,完成遍历,这仅仅为了方便后续对链表进行增删改查,因此申请了4个遍历节点,当然不申请这么多也是可以的,就要注意增删时链接的顺序,注意不要先让指针指向了新节点后,有没有存储后面链表的地址而丢失链接地址,到了需要使用时再申请指针需要暂时存放地址也没问题;

 用代码看一下:

插入删除节点:

 下面使用链表实现对线性链式结构的管理,有空的头节点和尾节点,个人较为习惯这种方法

 

 

 

仅申请一个空的头节点,无空尾结点的情况,先来看看头文件

 然后是各个函数的实现:

 

 

 

 

 

 测试函数以及运行结果

 

 单向循环链表实际上就是让尾节点指针不为空,指向头节点地址,这样就构成了一个首尾连接的状态,也就是单向循环链表,解决约瑟夫问题,也可以说是选猴王,其实有点像生成随机数 ,n像是随机数的种子

代码演示:

 

其实本质上是一种用结构体和指针的方式连接本不连续的存储区的思想,实现方法是不固定的,只要能实现这种思想即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/61309
推荐阅读
  • 数据结构队列基本操作C语言版)【数据结构队列基本操作C语言版)目录一、队列1、定义:2、优缺点:二、队列基本操作算法(C语言)    1、宏定义 &nbs... [详细]

  • 【数据结构】 常见的八大排序算法
    排序有内部排序和外部排序,这里八大排序就是内部排序,指直接插入,希尔,选择,堆排,冒泡,快排,归并,计数。附有动图解释和思维导图汇总_八大排序八大排序概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,这里八大排序就是内部排... [详细]

  • 【愚公系列】软考中级-软件设计师 016-数据结构(数组、矩阵和广义表)
    数组(Array)是一种用于存储多个相同类型的元素的数据结构。它可以被看作是一个容器,其中的元素按照一定的顺序排列,并且可以通过索引访问。数组的长度是固定的,一旦定义后,就不能再改变。矩阵(Matrix)是一个具有行列的二维数组。它是由一... [详细]

  • 注意:双链表不可随机存取,按位查找和按值查找操作都只能用遍历的方式实现,时间复杂度为。思路:从头结点开始,找到某个位序的前驱结点,对该前驱结点执行后插操作;思路:找到给定结点的前驱结点,再对该前驱结点执行后插操作;双链表的初始化(带头结点)... [详细]

  • 数据量的增长与程序运行时间增长所呈现的比例函数,则称为时间渐进复杂度函数简称时间复杂度。链式存储的表状结构,链表可以分为:单向链表、双向链表、循环链表、内核链表。1.只要空间足够,理论上可以存放无限个数据。1.数据访问不太方便(空间不连续)... [详细]

  • 性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1(度为0的结点数比度为2的结点数多1)二分搜索树的每个结点的值(大于其左子树的所有结点的值|小于其右子树的所有结点的值)性质1:在二叉树的第i层上至多... [详细]

  • 类型说明符数组名[常量表达式]说明:常量表达式中可以包含常量和符号常量(宏命名),不能包含变量。即C语言中不允许对数组大小作动态定义。线性表经常进行插入和删除操作长度可变而C中数组长度是不可变。数组名其实就是首元素地址所以也可以直... [详细]

  • /初始化//判断是否为空else。数据结构(队列Queue)文章目录一、队列1、队列的定义2、队列的顺序实现2.1、初始化2.2、入队2.3、出队2.4、查找2.5、判断队列满/空3、队列的链式实现3.1、初始化3.2、入队3.3、出队4、... [详细]

  • 【代码】数据结构.队列顺序表示。数据结构.队列顺序表示一、队列的定义二、队列顺序实现#include<iostream>usingnamespacestd;constintN=10;typedefstruct{intdat... [详细]

  • 【代码】数据结构.数据结构.一、的定义二、初始化#include<iostream>usingnamespacestd;constintN=10;typedefstruct{intdata[N];inttop;}SqSt... [详细]

  • 队列的定义,特点,队列的基本操作实现数据结构(队列)一.什么是队列1.队列定义    队列是一种特殊的线性表,特殊之处在于他只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入... [详细]

  • 的基本定义,顺序,链的介绍代码实现,力扣经典题分享数据结构()一.什么是1.的定义    是一种特殊类型的线性表,它的特点是仅允许在其一端进行插入(入)和删除(弹出)操作。这一端称为... [详细]

  • 之前我们已经学了数组和链表。它们是Arraylist和LinkedList的底层结构。【数据结构之前我们已经学了数组和链表。它们是Arraylist和LinkedList的底层结构。集合命名和数据结构的关系:1.**二叉这是一个普通二... [详细]

  • 数据结构是计算存储,组织数据的方式。数据结构是指相互间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据结构可演示线上地址。【数据结构】数据... [详细]

  • *树形结构:**数据元素之间是一对多关系**图结构:**数据元素之间是多对多关系。数据结构(绪论+算法基本概念)文章目录一、绪论1.1、数据结构基本概念1.2、数据结构三要素1.2.1、逻辑结构1.2.2、数据运算1.2.3、物理... [详细]

  • 该项目基于开发板Linux系统,利用文件IO数据结构制作了一个超市购物系统。程序通过检索目录下的图片信息,将商品信息保存到链表中,并能够根据用户选择自动跳转到商品详细界面。界面设计简陋但功能实现较为完整。项目主要突出了对数据结构文件IO... [详细]

  • 一、完美二叉又叫满二叉,即除了最后一个层级的叶子节点外,其余每个结点都有两个子结点二、完全二叉需要满足两个条件:(1)除了最后一层外,其它各层的结点个数都达到最大个数(2)最后一层的结点集中在左侧,且结点连续,只有右侧部分可以缺失结点... [详细]

  • 二叉定义、特点和常见分类_二叉分类二叉分类    一、基本概念专业术语中文描述Root根节点一棵顶点Child孩子结点一个结点含有根节点称为该结点子节点Leaf叶子结点没... [详细]

  • 数据结构二叉、二叉搜索、遍历二叉、先序遍历二叉、中序遍历二叉、后序遍历二叉、程序实现二叉_非空左子非空左子一、(1)的定义:(Tree):n(n≥0)个结点构成的有限集合当n=0时,称为空对于任一棵非空(n... [详细]

  • 二叉树:度最多为2的树二叉树特点:1>n0=n2+12>非空二叉树上第k层上至多有个结点(k>=1)3>高度为H的二叉树至多有个结点(H>=1)满二叉树:对于一棵高度为H的二叉树,将含有个结点的二叉树称为满二叉树满二叉树特点:满二叉树只有最... [详细]

相关标签
  

闽ICP备14008679号