数据结构【线性表】

数据结构入门级

第二章 线性表

在这里插入图片描述

一、线性表的定义和基本操作

  • 线性表的定义:具有相同属性数据类型的数据元素组成的一个有限序列;除第一个元素外的元素都有直接前驱,除最后一个元素外的元素都有直接后继;存在一个唯一被称为“第一个”的元素,和唯一被称为“最后一个”的元素。

    • n为元素的个数,当n=0时为空表;n>0时,非空线性表记为:a1,a2…;a1是首结点,an是尾结点。
  • 基本操作:一维数组可以静态分配,也可以动态分配;

    • 静态分配:数组大小和空间是固定的,满了后再加新数据会奔溃;
    • 动态分配:可按照实际的储存数据大小动态分配空间。
  • 线性表特点:

    • 表中元素个数有限;
    • 表中元素具有相同逻辑上的顺序性,有先后次序;
    • 表中元素都是单个数据元素;
    • 表中元素数据类型相同,占的存储空间大小也一样;
    • 表中元素具有抽象性,只考虑逻辑关系,不需要考虑存储地址的关系(物理顺序)。

二、线性表的顺序操作

  • 线性表的顺序存储又称为顺序表,它是一组地址连续的存储单位;
  • 顺序表特点:逻辑顺序(元素间的关系)上相邻的两元素和物理顺序(内存地址,存储地址)上也相邻,随机访问,通过首地址和元素序号可以在O(1)的时间内找到指定元素;存储密度高,每个结点只存储数据元素;
  • 线性表操作:
    1.插入:将插入元素的位置后面的元素整体后移,从最后一个元素开始,表长L++;顺序表插入操作的时间复杂度为O(n);
    2.删除:将元素删除后,该元素后面的元素会依次向前移动,表长L–;时间复杂度为O(n);
    3.查找:在表中查元素值等于对应元素的位置序号,并返回其序号;时间复杂度为O(n);

三、线性表的链式表示

  • 链表概念:是动态分配存储空间的链式存储结构(顺序存取),又称为单链表;是通过一组任意的存储单位来存储线性表中的数据元素,通过指针来建立各数据元素之间的线性关系
  • 特点:从表中任何一个结点出发都能扫描到整个链表,表中元素散列的分布在存储空间中;head头结点放第一个结点地址,头结点的作用是方便运算。
    在这里插入图片描述
    1.单链表的基本操作:
    1.1.在链表的表头插入:时间复杂度O(1)
    在这里插入图片描述
    1.2.在链表中间插入:时间复杂度O(1)
    在这里插入图片描述
    1.3.删除链表第一个结点:时间复杂度O(1)
    在这里插入图片描述
    1.4.删除链表的其他结点:时间复杂度O(1)
    在这里插入图片描述2.单链表创建方法:
    2.1.头插法:时间复杂度O(n)
    在这里插入图片描述
    2.2.尾插法:时间复杂度O(n)
    在这里插入图片描述

结论:

  • 单链表按序号查找结点值的时间复杂度为O(n);
  • 单链表按值找表结点的时间复杂度为O(n);
  • 求表长的时间复杂度为O(n)。

四、双链表

  • 定义:每个数据结点中有两个指针,分别指向直接后继和直接前驱;
  • 双链表的基本操作:
    • 插入
      在这里插入图片描述

    • 删除
      在这里插入图片描述

五、循环链表
1.概念:与单链表的区别就是,循环链表最后一个节点的指针不是NULL,改为指向头节点,整个链表成环;而循环双链表不同于循环单链表的是,双链表的头节点的prior指针还要指向表尾节点。

在这里插入图片描述
六、静态链表
1.借助数组来表示,指针是节点相对地址(数组下标),又称游标;以next=1作为结束的标志,操作时不需要移动元素,只用修改指针。

七、顺序存储和链表的比较
1.顺序存储;链式存储

  • 空间性能
    • 存储密度:=1,更优;<1;
    • 容量分配:事先确定;动态改变,更为优;
  • 时间性能
    • 查找运算:O(n);O(n);
    • 读运算:更优,O(1);O(n);
    • 插入运算:O(n);O(1),更优;
    • 删除运算:O(n);O(1),更优;

2.顺序存储

  • 优点:空间利用率高,存取速度高;
  • 缺点:删除和插入较慢,不可增长长度,有空间限制;
  • 时间性能:查找O(1),插入和删除O(n)。

3.链表存储

  • 优点:插入和删除快,无空间限制,只和内存有关;
  • 缺点:需要额外空间存指针,查找速度慢;
  • 时间性能:查找O(n),插入和删除O(1)。

PS:可由一个尾指针唯一确定的链表有循环链表、循环双链表、双链表;

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

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

相关文章

从简单线性回归到TensorFlow深度学习

大家好&#xff0c;人工智能近年来变得越来越流行&#xff0c;学习人工智能的需求也随之增加&#xff0c;尤其是许多IT专业人士希望利用机器学习的强大功能&#xff0c;但面临不小的挑战&#xff0c;尤其是在理论和数学上。 步骤1&#xff1a;线性回归 线性回归是一种统计学中…

lucene、solr、es的区别以及应用场景

目录 1. Lucene:2. Solr:3. Elasticsearch: Lucene、Solr 和 Elasticsearch(ES) 都是基于 Lucene 引擎的搜索引擎&#xff0c;它们之间有相似之处&#xff0c;但也有一些不同之处。 Lucene 是一个低级别的搜索引擎库&#xff0c;它提供了一种用于创建和维护全文索引的 API&…

RNN架构解析——GRU模型

目录 GRU模型实现优点和缺点 GRU模型 实现 优点和缺点

【C语言day06】

逻辑或运算如果前表达式为真&#xff0c;后表达式不计算&#xff0c;第一次循环时i为0&#xff0c;执行i&#xff0c;第二次循环时i为1&#xff0c;是个真值&#xff0c;不再执行i&#xff0c;也就死循环了 在C语言中&#xff0c;一个函数如果不写返回值类型&#xff0c;那么就…

【MyBatis 学习三】子段不一致问题 多表查询 动态SQL

目录 一、解决Java实体类属性与数据库表字段不一致问题 &#x1f337;现象1&#xff1a;显示字段不对应&#xff1a;使用ResultType查询结果为null&#xff1b; &#x1f337;解决办法&#xff1a;字段不对应&#xff1a;使用ResultMap解决。 二、数据库的多表查询 &#…

Go整合ElasticSearch

go整合elasticsearch 基于docker搭建开发环境在开发之前我们首先需要借助docker来构建我们的开发环境,先创建一个文件名称为docker-compose.yaml, 里面写入下面的内容: ---version: "3"services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsea…

Centos 7 - Anaconda3 安装教程及报错集锦

序言 这里笔者下载清华镜像&#xff0c;总会有问题&#xff0c;例如 wget 下载报错 安全证书什么的&#xff0c;就算解决证书问题&#xff0c;还不能下载&#xff0c;直接报错 Forbidden 403 &#xff0c;但是中科大镜像就不会。 中科大镜像 1、报错 WARNING: cannot verify…

【Spring Cloud Alibaba】Sentinel运行原理

文章目录 前言1、基本原理2、SphU.entry()2.1、StringResourceWrapper2.2、Entry 3、entry.exit()4、Context 前言 本文基于sentinel-1.8.0版本 Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保…

AVFoundation - 音视频组合编辑

文章目录 一、简要说明二、使用1、音频和视频合成2、视频的拼接一、简要说明 相关类 AVMutableCompositionAVMutableCompositionTrack二、使用 1、音频和视频合成 - (void)testCom1{AVMutableComposition *mutableComposition = [AVMutableComposition composition];AVMu

ajax axios json

目录 一、ajax概述 1. 概念 2. 实现方式 &#xff08;1&#xff09;原生的JS实现方式&#xff08;了解&#xff09; &#xff08;2&#xff09; JQeury实现方式 二、axios 介绍 三、axios使用 1. axios 发送get/post请求 2. axios验证用户名称是否存在 四、json 1. …

设计模式——观察者模式

文章目录 1 概述2 实现3 总结 1 概述 观察者模式可以分为观察者和被观察者&#xff0c;观察者通过注册到一个被观察者中&#xff0c;也可视为订阅&#xff0c;当被观察者的数据发生改变时&#xff0c;会通知到观察者&#xff0c;观察者可以据此做出反应。 可以类比订阅报纸&am…

vue3+ts+elementui-plus二次封装弹框

一、弹框组件BaseDialog <template><div classmain><el-dialog v-model"visible" :title"title" :width"dialogWidth" :before-close"handleClose"><!-- 内容插槽 --><slot></slot><template…

每天一个linux小技巧

1.nohup no hang up&#xff0c;用nohup运行命令可以使命令永久的执行下去&#xff0c;和用户终端没有关系&#xff0c;例如我们断开SSH连接都不会影响他的运行&#xff0c;注意了nohup没有后台运行的意思。 加&的作用是将&#xff0c;命令放到后台运行&#xff0c;使得终端…

【Docker】Consul的容器服务更新与发现

目录 一、Consul二、什么是服务注册与发现1.2什么是consul1.3consul提供的一些关键特性 二、Consul部署2.1环境配置2.2Consul服务器配置1. 建立 Consul 服务2. 查看集群信息3. 通过 http api 获取集群信息 2.3 registrator服务器配置1. 安装 Gliderlabs/Registrator2. 测试服务…

代码随想录算法训练营第四十九天|动态规划part10|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

● 121. 买卖股票的最佳时机 Best Time to Buy and Sell Stock - LeetCode dp[i][0] 持有股票得到的最大现金 dp[i][1] 不持有股票得到的最大现金 dp[i][0] max(dp[i - 1][0], -price[i]); dp[i - 1][1] dp[i - 1][0] price[i] dp[i][1] max(dp[i - 1][0], dp[i - 1] pric…

【数据挖掘】PCA/LDA/ICA:A成分分析算法比较

一、说明 在深入研究和比较算法之前&#xff0c;让我们独立回顾一下它们。请注意&#xff0c;本文的目的不是深入解释每种算法&#xff0c;而是比较它们的目标和结果。 如果您想了解更多关于PCA和ZCA之间的区别&#xff0c;请查看我之前基于numpy的帖子&#xff1a; PCA 美白与…

Leetcode-每日一题【114.二叉树展开为链表】

题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例…

JavaEE——Spring中存取Bean的注解

目录 一、存储Bean对象 1、定义 2、存储方式 &#xff08;1&#xff09;、类注解 【1】、Controller&#xff08;控制器存储&#xff09; 【2】、Service&#xff08;服务存储&#xff09; 【3】、Repository&#xff08;仓库存储&#xff09; 【4】、Component&#xf…

9个可用于图片转文本的最佳免费 OCR 软件

光学字符识别 (OCR) 软件可帮助将不可编辑的文档格式&#xff08;例如 PDF、图像或纸质文档&#xff09;转换为可编辑和可搜索的机器可读格式。 OCR 应用程序通常用于从 PDF 和图像中捕获文本&#xff0c;并将文本转换为可编辑格式&#xff0c;例如 Word、Excel 或纯文本文件。…

Unity小游戏——武士打怪兽(总)

Unity小游戏——武士击杀小怪兽&#xff08;无限滚动的背景&#xff09;_七七喝椰奶的博客-CSDN博客 Unity小游戏——无限滚动的背景的改良_七七喝椰奶的博客-CSDN博客 Unity小游戏——怪物出现模式的管理_七七喝椰奶的博客-CSDN博客 Unity小游戏——武士和怪物的碰撞检测_七…