数据结构之线性表

文章目录

  • 1. 线性表的定义
  • 2. 线性表的抽象数据类型
  • 3. 线性表的顺序存储结构
  • 4. 线性表的链式存储结构
  • 5. 单链表结构和顺序存储结构优缺点
  • 6. 静态链表
  • 7. 循环链表
  • 8. 双向链表

1. 线性表的定义

零个或多个数据元素的有限序列

线性表的定义中强调有限序列两个方面。

  • 有限:事实上,计算机中处理的对象都是有限的,那种无限的数列,只存在于数学的概念中。
  • 序列:元素之间是有顺序的,若元素存在多个,则赐一个元素无前驱,最后一个元素无后继,其它每个元素都有且只有一个前驱和后继。

2. 线性表的抽象数据类型

在这里插入图片描述
在这里插入图片描述

3. 线性表的顺序存储结构

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

在这里插入图片描述
线性表顺序存储结构的优缺点:

  • 优点
    • 无须为表示表中元素之间的逻辑关系而增加额外的存储空间
    • 可以快速地存取表中任一位置的元素,时间复杂度为O(1)
  • 缺点
    • 插入和删除操作需要移动大量元素,时间复杂度为O(n)
    • 当线性表长度变化较大时,难以确定存储空间的容量
    • 造成存储空间的“碎片”

4. 线性表的链式存储结构

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这就意味着这些数据元素可以存在内存未被占用的任意位置。

头指针与头结点的异同:
在这里插入图片描述

  • 头指针

    • 头指针是指链表指向物理第一个结点的指针,若链表有头结点,则是指向头结点的指针(上图可能存在错误,0900不是头指针,头指针指向头结点
    • 头指针具有标识作用,所以常用头指针冠以链表的名字
    • 无论链表是否为空,头指针均不为空。头指针是链表的必要元素(这里说的头指针不能为空,意思是说头指针一定要存在,而不是说头指针的值不能为NULL。举个例子,当链表为空时,如果有头结点,则头指针指向头结点。如果没有头结点,则头指针为NULL
  • 头结点

    • 头结点是为了操作的统一和方便而设立的,放在逻辑第一个结点之前,其数据域一般无意义(也可存放链表的长度)
    • 有了头结点,对在逻辑第一个结点前插入结点和删除逻辑第一个结点的操作与其它结点的操作就统一了
    • 头结点不一定是链表的必须要素

5. 单链表结构和顺序存储结构优缺点

存储分配方式

  • 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素
  • 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素

时间性能

  • 查找方面
    • 顺序存储结构时间复杂度为O(1)
    • 单链表结构时间复杂度为O(n)
  • 插入和删除
    • 顺序存储结构时间复杂度为O(n)
    • 单链表在找出某位置的指针后,插入和删除时间复杂度为O(1)

空间性能
- 顺序存储结构需要预分配存储空间,分大了浪费,分小了容易发生上溢
- 单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制

6. 静态链表

用数组描述的链表叫做静态链表

静态链表的优点

  • 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点

静态链表的缺点

  • 没有解决连续存储分配带来的表长难以确定的问题
  • 失去了顺序存储结构随机存取的特性

7. 循环链表

将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表

在这里插入图片描述

举例子:上图假设是某人出差的常规路线。有一次,他是先到南京开会,接下来要对以上的城市走一遍。此时有人对他说:你得从上海开始,因为上海是第一站。他一定会觉得这个人是个神经病。因为根本没有必要回上海,可以从南京开始,下一站蚌埠,直到北京,之后再考虑走完上海以及苏南的几个城市。

为什么要使用循环链表

  • 对于单链表,由于每个结点只存储了向后的指针,到了尾标志就停止了向后链的操作,这样,当中某一结点就无法找打它的前驱结点
  • 循环链表解决了一个很麻烦的问题,即如何从当中一个结点出发,访问到链表的全部结点

8. 双向链表

双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱

举例子:假设此人先到北京开会,接下来要对以上的城市走一遍。此时有人对他说:你得从上海开始,因为上海是第一站。他一定会觉得这个人是个神经病。因为根本没有必要回上海,直接从北京一路回去到上海就完事了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华硕ROG|玩家国度 冰刃7双屏 GX650PY Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原

华硕ROG|玩家国度 冰刃7双屏 GX650PY Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原 文件地址:https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件 需准备一个…

【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅲ

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

MySQL基础-变量/流程控制/游标/触发器

文章目录MySQL基础-变量/流程控制/游标/触发器一、变量1、系统变量2、用户变量二、流程控制1、分支语句2、循环语句3、跳转语句三、游标1、概念2、使用四、触发器1、触发器概念2、触发器使用3、触发器的优缺点MySQL基础-变量/流程控制/游标/触发器 一、变量 在MySQL数据库的存…

RocketMQ水平扩展及负载均衡详解

文章目录 Broker端水平扩展Broker负载均衡commit logProducer负载均衡Consumer负载均衡集群模式广播模式RocketMQ是一个分布式具有高度可扩展性的消息中间件。本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的。 Broker端水平扩展 Broker负载均衡…

前端项目-05-轮播图banner和Floor组件开发-全局轮播图组件抽取

目录 1-轮播图模块数据开发 2-floor组件开发 3-抽取全局轮播图组件 1-轮播图模块数据开发 轮播图需要用到swiper插件,先安装5.4.5版本的swiper:npm install --save swiper^5.4.5 --force 模拟从服务器获取数据; 1-编写mockRequests的js…

【ACWing算法课】二分查找

前言🍉 二分查找一个简单的算法,但是因为边界问题往往写不好。特此记录模板,以便快捷使用。 [二分查找]从列表q找到第一个>k的数,返回位置👑 [二分查找]从列表q找到第一个>k的数,返回位置def bsear…

three.js实现3d球体树状结构布局——树状结构的实现

目录系列文章安装依赖基本分析实体类场景相机渲染器辅助线环境光点光源球形几何体球形几何体的材质线几何体线几何体的材质物体文本轨道控制实现效果实现源码参考文档系列文章 three.js实现3d球体树状结构布局——添加入场、出场、点击放大等动画 安装依赖 npm i three three…

Adaptive AUTOSAR——Time Synchronization(VRTE 3.0 R21-11)

15 Time Synchronization 15.1 What is Time Synchronization? 时间同步是自适应平台基础中的一个功能集群。时间同步通过库向应用程序提供C API,该库作为RTA-VRTE入门套件的一部分提供,并与应用程序链接以访问该功能。 本版本包含非常少量的时间同步…

ASIC-WORLD Verilog(1)一日Verilog

写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。 这是网站原文&…

Helm学习笔记

文章目录概念定义helm组件helm的工作流程helm安装helm仓库helm部署应用helm应用的更新或回退或卸载概念 定义 学习helm首先得了解helm是什么,我们先来看一下helm的定义:helm是将kubernetes的各种资源对象打包,类似于Linux中的yum工具&#…

【HTML系列】第六章 · 框架标签、HTML实体、HTML全局属性和meta元信息

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

【前端面试题——微信小程序】

目录1.请谈谈wxml与标准的html的异同?2.请谈谈WXSS和CSS的异同?3.请谈谈微信小程序主要目录和文件的作用?4.请谈谈小程序的双向绑定和vue的异同?5.简单描述下微信小程序的相关文件类型?6.微信小程序有哪些传值(传递数据…

jsp+javaEE+mysql校园物品租赁系统dzkf5294程序

1.物品信息管理:管理员发布物品信息后,普通用户便可以查询到该物品信息,用户选择某个物品信息,查询物品信息,管理员审核添加,或删除物品信息。 2.租赁管理:管理员发布租赁…

ChatGPT大解密:带您探讨机器学习背后的秘密、利用与发展

一、什么是机器学习?二、ChatGPT 的运作原理三、ChatGPT 生活利用1、自然语言处理2、翻译3、自动回复四、ChatGPT vs 其他相关技术五、ChatGPT 的未来1、未来发展2、职业取代3、客服人员4、翻译人员5、语言学家6、机遇与挑战六、结语这篇文章,将带着各位…

ThreeJS-投影、投影模糊(十七)

无投影&#xff1a; 完整的代码&#xff1a; <template> <div id"three_div"></div> </template> <script> import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/Or…

再不转型为ChatGPT程序员,有遭受降维打击的危险

Open AI在演示GPT-4的时候&#xff0c;有这么一个场景&#xff1a;给一个界面草图&#xff0c;就可以生成网页代码。这个演示非常简单&#xff0c;如果界面原型比较复杂呢&#xff1f;像这样&#xff1a;ChatGPT能不能直接生成HTML, CSS,JavaScript代码&#xff0c;把这个网页给…

MongoDB副本集Command failed with error 10107 (NotMaster):on server

问题 通过DataGrip连接的MongoDB节点&#xff0c;之前可以新增或更新数据。某天突然不能新增或更新数据&#xff0c;报错信息如下&#xff1a; 具体的报错信息&#xff1a; Command failed with error 10107 (NotMaster): not master on server 10.19.21.11:30386. The full…

HNU-电路与电子学-实验3

实验三 模型机组合部件的实现&#xff08;二&#xff09;&#xff08;实验报告格式案例&#xff09; 班级 计XXXXX 姓名 wolf 学号 2021080XXXXX 一、实验目的 1&#xff0e;了解简易模型机的内部结构和工作原理。 2&#xff0e;分析模型机的功能&am…

【Linux】LVM与磁盘配额

文章目录1.LVM1.1 LVM概述1.2 LVM机制1.3 LVM管理命令1.4 LVM应用实例2. 磁盘配额2.1 磁盘配额概述2.2 磁盘配额管理2.3 启用磁盘配额支持2.4 磁盘配额应用实例1.LVM 1.1 LVM概述 Logical Volume Manager&#xff0c;逻辑卷管理 ● 能够在保持现有数据不变的情况下动态调整磁盘…

43掌握自动化运维工具 Puppet 的基本用法,包括模块编写、资源管理

Puppet是一种自动化配置管理工具&#xff0c;可以自动化地部署、配置和管理大规模服务器环境。本教程将介绍Puppet的基本用法&#xff0c;包括模块编写和资源管理。 模块编写 在Puppet中&#xff0c;模块是一组相关的类、文件和资源的集合。模块可以用于部署和配置应用程序、服…