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

前言:

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

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());//访问队列头:1System.out.println("队列:" + queue);//队列:[1, 2, 3]System.out.println("删除队列头:" + queue.poll());//删除队列头:1System.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.mzph.cn/news/646089.shtml

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

相关文章

H.264数据解析

什么是H.264 H264 是 MPEG-4 标准所定义的最新编码格式&#xff0c;同时也是技术含量最高、代表最新技术水平的视频编码格式之一&#xff0c;标准写法应该是H.264 H264 视频格式是经过有损压缩的&#xff0c;但在技术上尽可能做的降低存储体积下获得较好图像质量和低带宽图像…

劳特巴赫的基础使用(二)

一、基本介绍 LAUTERBACH是世界领先的微处理器开发工具厂商&#xff0c;成立于1979年&#xff0c;总部位于德国慕尼黑。 JTAG Debugger由PowerDebug和Debug Cable组成。PowerDebug是通用控制模块&#xff0c;支持所有Cable&#xff0c;没有License。Debug Cable绑定License&a…

26、江科大stm32视频学习笔记——I2C读写W25Q64

一、W25Q64简介 1、W25Q64的内存空间结构: 一页256字节&#xff0c;4K(4096 字节)为一个扇区&#xff0c;16个扇区为1块&#xff0c;容量为8M字节&#xff0c;共有128个块&#xff0c;2048 个扇区。 2、W25Q64每页大小由256字节组成&#xff0c;每页的256字节用一次页编程指…

保姆级:Palworld幻兽帕鲁32人服务器一键部署

创建幻兽帕鲁服务器1分钟部署教程&#xff0c;阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程&#xff0c;4核16G和4核32G配置可选&#xff0c;阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程&#xff1a; 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

【模拟通信】AM、FM等的调制解调

调制相关的概念 调制&#xff1a;控制载波的参数&#xff0c;使载波参数随调制信号的规律变化 已调信号&#xff1a;受调载波&#xff0c;含有调制信号的全部特征 调制的作用: 提高发射效率多路复用&#xff0c;提高信道利用率提高系统抗干扰能力 两种调制方式 线性调制&a…

​第20课 在Android Native开发中加入新的C++类

​这节课我们开始利用ffmpeg和opencv在Android环境下来实现一个rtmp播放器&#xff0c;与第2课在PC端实现播放器的思路类似&#xff0c;只不过在处理音视频显示和播放的细节略有不同。 1.压缩备份上节课工程文件夹并修改工程文件夹为demo20&#xff0c;将demo20导入到Eclipse或…

RBD —— 简介

目录 General workflow Tips RBD SOP inputs and outputs Clustering Importing a fractured object into DOPs RBD SOP support nodes Related SOPs Low-level SOPs 通常在刚体模拟中&#xff0c;希望实体对象会因某些碰撞或力而破碎&#xff1b;Houdini内大多数破碎…

C# Bitmap类学习1

Bitmap对象封装了GDI中的一个位图&#xff0c;此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using …

教你如何低成本自建「幻兽帕鲁」服务器,快速一键部署

创建幻兽帕鲁服务器1分钟部署教程&#xff0c;阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程&#xff0c;4核16G和4核32G配置可选&#xff0c;阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程&#xff1a; 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

EF core连接数据库的前期完整配置流程-开发环境搭建

EF core连接数据库完整流程-开发环境搭建 前置&#xff1a;.net6 core webapi不勾选任何配置 声明&#xff1a;这里是以两个配置类来做的&#xff0c;一个T_Books表&#xff0c;一个T_Person表 Book&#xff1a;创建属性及类型 BookConfig&#xff1a;对创建的进行属性数据表…

66.Spring是如何整合MyBatis将Mapper接口注册为Bean的原理?

原理 首先MyBatis的Mapper接口核心是JDK动态代理 Spring会排除接口&#xff0c;无法注册到IOC容器中 MyBatis 实现了BeanDefinitionRegistryPostProcessor 可以动态注册BeanDefinition 需要自定义扫描器&#xff08;继承Spring内部扫描器ClassPathBeanDefinitionScanner ) 重…

物业app开发实战:10大功能必备,打造智能社区生活

随着智能科技的快速发展&#xff0c;物业管理也逐渐迈入数字化时代。物业app开发成为了提升社区管理效率、改善居民生活质量的重要途径。在本文中&#xff0c;我将分享10大必备功能&#xff0c;帮助开发者打造智能社区生活的物业app。 1. 便捷的社区公告发布功能 通过物业app…

R语言VRPM包绘制多种模型的彩色列线图

列线图&#xff0c;又称诺莫图&#xff08;Nomogram&#xff09;&#xff0c;它是建立在回归分析的基础上&#xff0c;使用多个临床指标或者生物属性&#xff0c;然后采用带有分数高低的线段&#xff0c;从而达到设置的目的&#xff1a;基于多个变量的值预测一定的临床结局或者…

免费畅享,打破写作瓶颈:星火写作助手覆盖全面,助你轻松创作

啰嗦几句 最近年终岁末&#xff0c;公司的各种文案各种总结&#xff0c;写得人是头晕脑胀&#xff0c;所以好多小伙伴最近在求智能写作的软件&#xff0c;最好是ChatGPT。 ChatGPT是国外产品&#xff0c;在国内并不能访问。而就智能写作来说&#xff0c;我们何必舍近求远呢&am…

1.新建项目

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 1.新建项目 打开VS2022,点击“创建新项目”。 新建项目 2.选择项目类型 在搜索框输入“Maui”&#xff0c;选择“NET MAUI应用”&#xff0c;配置项目名称、保存地址等&#xff0c;并选择框架版本。 项目…

精准监测,守护城市脉搏:管网压力、流量监测设备

在繁忙的城市中&#xff0c;每一个管道都如同城市的血脉&#xff0c;承载着重要的使命。为了确保城市的正常运行&#xff0c;我们提供精准的管网压力、流量监测设备&#xff0c;用科技守护城市的脉搏。 我们的设备采用最新的技术&#xff0c;可以实时监测管网的压力和流量&…

【11.PWM捕获】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) PWM捕获 系列文章目录一、STM32CUBEMX配置二、项目代码1.mian.c --> HAL_TIM_IC_CatureCallback 总结 一、STM32CUBEMX配置 STM32CUBEMX PA15 ->TIM2_CH1; PB4-> TIM3_CH1 预分频设置为79,自动重装载设置…

HTML实战

HTML实战 标题 标题排版 img标签路径书写的两种方式&#xff1a; 绝对路径 绝对磁盘路径&#xff1a;C:\User…绝对网络路径&#xff1a;https://i2.sinaimg.cn/dy/deco/2012/0613/yocc20120613img01/news_logo.png 相对路径 ./ : 当前目录 ../ &#xff1a; 上一级目录宽…

Spring基于dynamic-datasource实现MySQL多数据源

目录 多数据源实现 引入依赖 yml配置文件 业务代码 案例演示 多数据源实现 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamicdatasourcespringbootstarter</artifactId><version>3.5.0</version> &…

Programming Abstractions in C阅读笔记:p248-p253

《Programming Abstractions in C》学习第69天&#xff0c;p248-p253总结&#xff0c;总计6页。 一、技术总结 “A generalized program for two-player games”如标题所示&#xff0c;该小节强调要学会从一个复杂的程序中抽象出通用的内容——这也是本书的主旨——“Program…