当前位置: 首页 > news >正文

数据结构的概念大合集02(线性表)

概念大合集02

  • 1、线性表及其逻辑结构
    • 1.1 线性表的定义
    • 1.2 线性表的基本操作
  • 2、线性表的顺序存储结构
    • 2.1 顺序表
  • 3、线性表的链式存储
    • 3.1 链表
      • 3.1.1 头结点(头指针),首指针,尾指针,尾结点
      • 3.1.2 单链表
      • 3.1.3 双链表
      • 3.1.4 循环链表
        • 3.1.4.1 循环单链表
        • 3.1.4.2 循环双链表
  • 4、顺序表与链表的比较

1、线性表及其逻辑结构

1.1 线性表的定义

是具有相同特性的数据元素的一个有限序列(即有限,且有序)
一般表示为L = (a1,a2,a3,a4,…,an-1,an)
线性表是表示数据元素之间的逻辑结构,即不考虑在计算机中的具体实现。

1.2 线性表的基本操作

函数名函数作用
InitList(&L)初识化线性表,构造一个空列表
DestroyList(&L)销毁线性表,释放为线性表L分配的内存空间
ListEmpty(L)判断线性表是否为空表,若L为空表,则返回true,否则返回false
ListLength(L)输出线性表的长度,返回L中元素的个数
DisList(L)输出线性表,当线性表L不为空时,顺序输出L中的个元素值
GetElem(L,i,&e)按序号求线性表中的元素,用e返回L中第i(1~n-1)个元素值
LocateElem(L,e)按元素值查找,返回L中的第一个值与e相等的元素的序号
ListInsert(&L,i,e)插入元素,在L的第i个位置插入一个新元素e
ListDelete(&l,i,&e)删除元素,删除L的第i个元素,并用e返回该元素值

注:具体的函数表现会在另外的文章里说明,本文章只对概念进行阐述

2、线性表的顺序存储结构

2.1 顺序表

线性表的所有元素按照其逻辑顺序依次存储到计算机的一篇连续的存储空间当中,即在逻辑结构上面相邻的两个元素在内存空间上也相邻,通常把这种结构称为顺序表,通常用数组的方式表现。

请添加图片描述

3、线性表的链式存储

链式存储不需要在逻辑结构上相邻的元素在物理位置上也相邻,这是通过指针来实现的

3.1 链表

链表是将线性表中的元素通过指针连接起来的一种表现形式,链表中的每个元素称为结点,一个结点由数据元素(数据域)和指向后继结点的指针(指针域)构成,从而实现线性表的链式存储结构。

3.1.1 头结点(头指针),首指针,尾指针,尾结点

头结点:通常,链表都会带上一个头结点,来表示唯一标识,即头结点的存在,是为了区别链表,所以,头指针里面一般只有指向首结点的指针,不会存放链表的第一个元素

首指针:指向首节点的指针,而首节点用来存放链表的第一个元素

尾指针:指向尾结点的指针

尾结点:当尾结点的指针域不需要指向任何一个结点时,则将其后继指针指向NULL,比如单链表和双链表。

3.1.2 单链表

在单链表当中,每个结点由一个数据域和一个指针域构成,其中,头结点不存放元素,只存放指向首结点的指针,尾结点的指针指向NULL。
请添加图片描述

3.1.3 双链表

在双链表里面,每个结点含有一个数据域和两个指针域,一个指向后继结点,一个指向前驱结点
请添加图片描述

3.1.4 循环链表

3.1.4.1 循环单链表

将单链表改为循环单链表的过程,是将它的尾结点的next指针域由原来为空改为指向头结点,让整个单链表形成一个环。由此,从表中任一结点出发均可找到链表中其他结点
请添加图片描述

3.1.4.2 循环双链表

把双链表改为循环双链表的过程是将它的尾结点的next指针域由原来为空改为指向头结点,把头结点的prior指针域改为指向尾结点,使整个双链表形成两个环。
请添加图片描述

4、顺序表与链表的比较

顺序表:在完成插入或删除元素这类操作时,比较费时;

链表:在完成插入或删除元素这类操作时,只需要修改指针域的指向即可,方便省时

 
注:
本文将主要探讨线性表的概念,其中提及的各个函数操作已经发布,欢迎朋友们继续观看。

本篇文章的相关算法
数据结构大合集02——线性表的相关函数运算算法

上一篇文章
数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

下一篇文章
数据结构的概念大合集03(栈)

相关文章:

  • mysql转达梦的python脚本
  • vulhub中GitLab 远程命令执行漏洞复现(CVE-2021-22205)
  • Flink:使用 Faker 和 DataGen 生成测试数据
  • 【STL】stack栈容器与list链表容器
  • 剑指offer力扣题集
  • 芯片与针灸
  • 【微服务】分布式调度框架PowerJob使用详解
  • C语言字符函数和字符串函数详解
  • FDU 2018 | 1. 求众数
  • Flask学习(四):路由转换器
  • SQL server服务连接失败,通过端口1433连接到主机 localhost的 TCP/IP 连接失败
  • 计算机设计大赛 题目: 基于深度学习的疲劳驾驶检测 深度学习
  • Python和R的区别是什么,Python与R的应用场景是什么?
  • 首页效果炫酷的wordpress免费主题模板
  • 【leetcode】二叉树的前序遍历➕中序遍历➕后序遍历
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • “大数据应用场景”之隔壁老王(连载四)
  • 【技术性】Search知识
  • CAP 一致性协议及应用解析
  • Electron入门介绍
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Flannel解读
  • flask接收请求并推入栈
  • Git 使用集
  • java 多线程基础, 我觉得还是有必要看看的
  • Java小白进阶笔记(3)-初级面向对象
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Nacos系列:Nacos的Java SDK使用
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • quasar-framework cnodejs社区
  • React-Native - 收藏集 - 掘金
  • Spring Boot MyBatis配置多种数据库
  • yii2权限控制rbac之rule详细讲解
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何实现 font-size 的响应式
  • 山寨一个 Promise
  • 微服务核心架构梳理
  • 线上 python http server profile 实践
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # 数据结构
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (js)循环条件满足时终止循环
  • (独孤九剑)--文件系统
  • (多级缓存)缓存同步
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • .Net 6.0 处理跨域的方式
  • .NET Core 中的路径问题
  • .NET Core跨平台微服务学习资源
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 中让 Task 支持带超时的异步等待
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net6使用WebSocket与前端进行通信