【数据结构】数据结构初识

前言:

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

Data Structure Visualization  数据结构可演示线上地址

一.线性结构

1.1  数组

     数组(Array)是一种线性表数据结构。它用于存储固定大小的相同类型的数据元素。在数组中,数据元素按照有序的方式进行排列,可以通过索引访问数组中的任意位置的元素。

//动态初始化:初始化时由程序员指定数组长度,由系统为数组元素分配初始值
char c1[] = new char[5];

//静态初始化:初始化由程序员显示指定每个数组的初始值,由系统决定数组的长度
char c2[] = new char[]{'A','B','C'};
char c3[] = {'D','E','E','U'}

数组的特点:

  1. 顺序存储:数组中的元素按照顺序存储在内存空间中,每个元素都有一个唯一的索引,可以通过索引快速访问。
  2. 大小固定:一旦定义了数组的大小,就不能改变。如果需要更大的存储空间,需要重新定义一个新的数组。
  3. 元素类型相同:数组中的所有元素必须是相同的类型。
  4. 无界数组:数组的长度可以是任意的整数,只要内存空间足够。

数组优点:

     1.访问速度快:由于数组是顺序存储,可以通过索引直接访问数组中的元素,复杂度为O(1)

     2.易于实现:数组是一种简单的数据结构,容易实现和操作

数组缺点:

     1.大小固定:数组大小固定,不能动态扩展。如果需要更多的存储空间,需要重新定义一个新的数组,会增加额外的开销。

     2.空间利用率低:由于数组是连续的的内存空间,即使某些位置没有被使用,也不能被其他数据结构使用,导致空间利用率较低。

1.2  队列

     队列是一种特殊的数据结构,其特点是先进先出(FIFO)原则。队列中的原色只能从一端(队尾)加入,队头 删除

     队列特点:

       1.先进先出:队列中的元素遵守先进先出的原则,即最早进入的最先被删除。

       2.插入和删除发生在两端:插入在队尾,删除在队头。

       3.无界队列:队列的长度可以是任意整数,只要内存空间够。

   public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        queue.add(2);
        queue.add(3);
        System.out.println("队列:" + queue);//队列:[1, 2, 3]
        System.out.println("访问队列头:" + queue.peek());//访问队列头:1
        System.out.println("队列:" + queue);//队列:[1, 2, 3]
        System.out.println("删除队列头:" + queue.poll());//删除队列头:1
        System.out.println("队列:" + queue);//队列:[2, 3]
    }

1.3  链表

    链表是一种常见的数据结构,通过指针将一组零散的内存块串联在一起。链表中的每个内存块被称为节点,每个节点除了存储数据外,还需要记录链上的下一个节点的地址。

    特点:

      1.不需要连续的内存空间

      2.有指针引用

      3.插入/删除数据效率高,时间复杂度O(1) [只需要更改指针指向即可];但是,随机访问效率低,时间复杂度O(n) 级别[需要从链头至链尾进行遍历]

      4.和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。

    链表包括 单向链表 ,双向链表和循环链表等类型。其中

              单向链表的节点只有一个后继指针next指向后面的节点;

              双向链表的节点除了有一个后继指针next指向后面的节点,还有一个前驱指针prev指向前面节点

             循环链表:与单向链表区别是尾节点的指针指向投节点,形成一个环

1.4  栈

     栈(stack)是一种后进先出(LIFO)的数据结构,它只能在一端进行插入和删除操作,这一端被称为栈顶,另外一端被称为栈底。栈的元素之间存在一种顺序关系,这种顺序关系由元素的插入和删除决定。

    栈的主要操作:

       1.入栈(push)

       2.出栈(pop):

       3.判断栈空(is_empty)

       4.获取栈顶元素(top)

二.非线性结构

2.1  树

2.2  二叉树

2.3  AVL树

2.4  2-3-4树

2.5 红黑树

2.6  B树

2.7  B+树

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

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

相关文章

BPM、低代码和人工智能:实现灵活、创新与转型的关键结合

随着零售业格局的不断演变&#xff0c;零售商正被迫在一个日益活跃、竞争日益激烈的客户驱动型市场中展开竞争。随着互联网上产品信息和评论的出现&#xff0c;消费者的态度发生了巨大的变化——购物者不再依赖销售人员来获取信息。他们现在知道的和许多零售销售人员一样多&…

uniapp 用css animation做的鲤鱼跃龙门小游戏

第一次做这种小游戏&#xff0c;刚开始任务下来我心里是没底的&#xff0c;因为我就一个‘拍黄片’的&#xff0c;我那会玩前端的动画啊&#xff0c;后面尝试写了半天&#xff0c;当即我就给我领导说&#xff0c;你把我工资加上去&#xff0c;我一个星期给你做出来&#xff0c;…

人机共融时代,节卡机器人如何持续“点亮智慧火花”?

近年来&#xff0c;协作机器人产品发展势头十分强劲&#xff0c;尤其在工业生产方面&#xff0c;由于更为灵活便捷&#xff0c;能够实现人机安全协作&#xff0c;已形成较为广泛的应用。 值得一提的是&#xff0c;协作机器人在消费场景的应用潜力也在逐步释放&#xff0c;比如…

GroupMixFormer:Advancing Vision Transformers with Group-Mix Attention论文学习笔记

论文地址&#xff1a;https://arxiv.org/pdf/2311.15157.pdf 代码地址&#xff1a;https://github.com/AILab-CVC/GroupMixFormer 摘要&#xff1a;ViT 已被证明可以通过使用多头自注意力 &#xff08;MHSA&#xff09; 对远程依赖关系进行建模来增强视觉识别&#xff0c;这通常…

C++ 之LeetCode刷题记录(十七)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&…

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新&#xff1a;正常刷新网页&#xff0c;网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新&#xff1a;忽略缓存刷新&#xff0c;重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据

Tomcat Notes: Web Security, HTTPS In Tomcat

This is a personal study notes of Apache Tomcat. Below are main reference material. - YouTube Apache Tomcat Full Tutorial&#xff0c;owed by Alpha Brains Courses. https://www.youtube.com/watch?vrElJIPRw5iM&t801s 1、Overview2、Two Levels Of Web Securi…

《深入解析Java虚拟机:从JVM体系结构到垃圾回收算法》

文章目录 JVM体系结构JVM的组成 类加载器Class Loader类加载器的作用双亲委派机制JVM自带三个类加载器Bootstrap ClassLoader-根加载器ExtClassLoader-扩展加载器AppClassLoader-应用类加载器 Java历史-沙箱安全机制沙箱概念沙箱的作用本地代码和远程代码沙箱安全机制模型JDK1 …

js执行字符串代码

js将字符串作为代码执行 一、适用场景二、具体实现1. eval2. new Function() 三、两者差异 一、适用场景 在业务中我们很少去将一个字符串作为代码执行&#xff0c;因为出于安全考虑&#xff0c;尽量不要直接在客户端执行用户输入的代码。但是在造轮子或者框架开发中&#xff…

鸿蒙常用UI效果及一些处理方式总结

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 详细使用介绍 1、Text的一些常用设置 Text(this.message).fontSize(50)//字体大小.fontColor(Color.White)//字体颜色.fontWeight(FontWeight.Bold)//字体加粗.backgroundColor(Color.Black)//背景颜色.fontStyle(…

将Python打包为exe+inno setup将exe程序封装成向导安装程序

为什么要打包&#xff1f; Python脚本不能在没有安装Python的机器上运行。如果写了一个脚本&#xff0c;想分享给其他人使用&#xff0c;可她电脑又没有装Python。如果将脚本打包成exe文件&#xff0c;即使她的电脑上没有安装Python解释器&#xff0c;这个exe程序也能在上面运行…

简单易懂带你入门Spring框架,循序渐进,帮助你理解IOC思想---(一)入门实验一,教你如何使用spring框架

目录 1.1 、Spring概述 1.2 、Spring家族 1.3 、Spring Framework 1.3.1 、Spring Framework特性 1.3.2 、Spring Framework五大功能模块 IOC容器 IOC思想 IOC容器在Spring中的实现 基于XML管理bean 实验一&#xff1a;入门案例 如何获取bean 1.1 、Spring概述 官网…

爬虫笔记(二):实战58二手房

第一&#xff1a;给大家推荐一个爬虫的网课哈&#xff0c;码起来 第二&#xff1a;今夜主题&#xff1a;通过xpath爬取58二手房的title信息&#xff0c;也就是标红的位置~ 第三&#xff1a;先分析一波title所在的位置 打开按下f12打开抓包工具&#xff0c;即可看到网站的源码…

代码随想录算法训练营29期|day30 任务以及具体安排

332.重新安排行程 class Solution {private LinkedList<String> res;private LinkedList<String> path new LinkedList<>();public List<String> findItinerary(List<List<String>> tickets) {Collections.sort(tickets, (a, b) -> a.…

【必剪】拼字怎么使用?哪些素材能使用拼字?

1-1 点击需要编辑文字&#xff0c;在给定的人物中选择 其中一个&#xff0c;选择【拼字】选项&#xff0c;以下的字母表 的字母读音&#xff0c;是当前人物在他的鬼畜原版里的 全部读音&#xff0c;你可以打出自己专属独特的语句 ! 1-2 在字母表中继续寻找想要的读音&#xff…

利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(4.0) —— 动态创建队列

前言 &#xff08;1&#xff09;FreeRTOS是我一天过完的&#xff0c;由此回忆并且记录一下。个人认为&#xff0c;如果只是入门&#xff0c;利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后&#xff0c;再去学习网上的一些其他课程也许会简单很多。 &#xff08;2&am…

基于YOLOv8的摔倒行为检测系统(Python源码+Pyqt6界面+数据集)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:通过实战基于YOLOv8的摔倒行为检测算法&#xff0c;从数据集制作到模型训练&#xff0c;最后设计成为检测UI界面 人体行为分析AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算…

MATLAB知识点:mode :计算众数

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.1节 mode &#xff1a;计算众数 众数是指一…

log4j2配置文件命名及优先级

log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式&#xff0c;2.x版本配置文件后缀名只能为".xml",“.json"或者”.jsn"。 命名规则 默认配置文件名&#xff1a; log4j2.xml 或 log4j2.json 测试或特定环境配置文件名&#xff1a;可以以 -t…

(blender学习)blender和vscode联合编写代码

文章目录 一、建立联合二、代码1.做一个小panel2. 给选定的物体更换好多好多材质 一、建立联合 按照这个文档做&#xff1a; 【Blender】使用 Microsoft Visual Studio Code 作为外部 IDE 来编写 Blender 脚本/附加组件 二、代码 下面几个代码的学习视频来自&#xff1a;ht…