初阶数据结构速成

本篇文章算是对初阶数据结构的总结,内容较多,请耐心观看

基础概念部分

顺序表

线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使
⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...
顺序表的底层结构 是数组,对数组的封装,实现了常⽤的增删改查等接⼝

链表

概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表
中的指针链接次序实现的 。

栈和队列

概念:进行数据 插入和删除 操作的一端 称为栈顶,另一端称为栈底。

特点

1. 输入和输出都在同一端
2. 先进后出

队列

概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为 队头

特点

先进先出

树是一种 非线性 的数据结构,它是由 n n>=0 )个有限结点组成一个具有层次关系的集合

这两个图只是方便大家理解的。

堆 

根结点最大 的堆叫做最 大堆 或大根堆,根 结点最小的堆 叫做最 小堆 或小根堆。

二叉树

几个重要概念

1. 满二叉树:一个二叉树的层数为K,且结点总数是2的k次 - 1,则它就是满二叉树。

2. 完全二叉树:当且仅当其每一个结点都与深度为K的满二叉树中编号从1n的结点一一对应时称之为完全二叉树

3.结点的度: 结点含有的子树的个数

4. 结点的层次: 从根节点开始数

二叉树的特性
1. 若规定根结点的层数为 1 ,则一棵非空二叉树的 i 层上最多有
个结点 .
2. 若规定根结点的层数为 1 ,则 深度为 h 的二叉树的最大结点数是
.
3. 对任何一棵二叉树 , 如果度为 0 其叶结点个数为 , 度为 2 的分支结点个数为 , 则有 = + 1

实操部分

顾名思义,数据结构是又有数据又有结构体因此初阶数据结构的每一部分内容的结构体给大家放在下方

各种初阶数据结构的结构体部分

顺序表

结构体内的元素:数组、有效的元素个数、空间大小

链表

结构体内的元素: 数、指向下一个节点的next指针

队列

初始化以及销毁的思路部分

这里呢我也是找了以前写过的文章,给大家串一串这个部分该怎么写代码

初始化部分

将结构体内的元素进行初始化,eg. 结构体内的数组、指针之类的置为空,剩余的如空间、计数器等整型变量置为0即可,注意初始化前必须声明结构体不为空

销毁部分

先声明结构体以及需要释放的不为空,然后还原回与初始化相同即可。

当然这里的销毁具体情况还需要具体分析,如链表就是需要具体情况具体分析

插入部分

插入的前置条件

这个部分则是判断空间是否充足,那么这里的逻辑我就不继续讲解了,相信学到这里的小伙伴都是可以靠自己看懂这个代码的,当然啦如果又不懂的小伙伴可以评论区留言

插入数据

在空间充足的情况下 通过赋值的方式将数据插入,同时别忘了有效数字个数要加一哦。

当然除了上面那种写法外也可以写成:ps->arr[ps->size++] = x;

删除部分

首先需要声明你所要删除的结构体、有效长度、指针等等不为空,通过覆盖、释放函数等手段对其进行删除,有有效长度的需要减一,如果是指针,则需要释放并置空后,在指向下一个节点。

查找部分

这个部分先前是没怎么讲解过,那么我们先来看下实现这个函数,它的新参有哪些

从图中我们可以看出需要的有结构体和需要查找的参数,那么只需要遍历即可(如遍历数组,遍历链表等等)。当找到与我们所要寻找的参数数值相同时,即可返回(该结点等等)即可

以上这些仅仅是思路,如果你是属于那种没有思路,那么这篇文章就很适合你,此外光有这些还不够,最主要的就是画图,需要根据要求进行画图分析,然后将图解转换成代码

那么初阶数据结构系列的文章正式完结

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

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

相关文章

C语言 错题本

C语言 错题本 文章目录 C语言 错题本77月11号整数求逆--掌握 7月12号求符合给定条件的整数集水仙花数打印九九口诀表--掌握统计素数并求和--掌握 7月13号凑硬币前n项和(一加一减)最大公约数 7月14号正序整数分解 7月17号简单计算器 217月26号求符合给定条件的整数集水仙花数 旨…

【安全设备】上网行为管理

一、什么是上网行为管理 上网行为管理是对企业内部员工使用互联网行为的监视和管理,旨在规范网络使用者的上网行为,提高网络安全性,保护企业信息安全,同时提高员工的工作效率。上网行为管理通过对员工的上网行为进行监控、记录和…

机器学习——关于极大似然估计法的一些个人思考(通俗易懂极简版)

最近在回顾机器学习的一些相关理论知识,回顾到极大似然法时,对于极大似然法中的一些公式有些迷糊了,所以本文主要想记录并分享一下个人关于极大似然估计法的一些思考,如果有误,请见谅,欢迎一起前来探讨。当…

单元测试实施最佳方案(背景、实施、覆盖率统计)

1. 什么是单元测试? 对于很多开发人员来说,单元测试一定不陌生 单元测试是白盒测试的一种形式,它的目标是测试软件的最小单元——函数、方法或类。单元测试的主要目的是验证代码的正确性,以确保每个单元按照预期执行。单元测试通…

合肥高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

合肥高校大学智能制造实验室近日迎来了一项重要时刻,数字孪生可视化系统平台建设项目顺利通过了验收。这一项目的成功实施,不仅标志着合肥高校在智能制造领域取得新的突破,为我国智能制造技术的发展注入新活力。 合肥高校智能制造实验室作为…

T972 切换至pdm 声音输入的方法

1.在hardware/amlogic/audio/audio_hal/audio_hw.c下,直接切换 在 static unsigned int select_port_by_device(struct aml_audio_device *adev) 中先强制切换为pdm 2.在device mk 配置文件中 #add fof fix the mic bug by jason 20230621 PRODUCT_PROPERTY_OVE…

MySQL 数据库基础概念

一、什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中&…

浅析Kafka Streams中KTable.aggregate()方法的使用

KTable.aggregate() 方法是 Apache Kafka Streams API 中用于对流数据进行状态化聚合的核心方法之一。这个方法允许你根据一个键值&#xff08;通常是<K,V>类型&#xff09;的流数据&#xff0c;应用一个初始值和一个聚合函数&#xff0c;来累积和更新一个状态&#xff0…

MSPM0G3507(三十六)——超声波PID控制小车固定距离

效果图&#xff1a; 波形图软件是VOFA&#xff0c;B站有教程 &#xff0c;虽然有缺点但是非常简单。 视频效果&#xff1a; PID控制距离 之前发过只有超声波测距的代码&#xff0c;MSPM0G3507&#xff08;三十二&#xff09;——超声波模块移植代码-CSDN博客 SYSCFG配置&#…

Ubuntu下如何设置程序include搜索路径及链接路径

添加库的include及lib路径 linux下系统默认路径为 /usr/include, /usr/local/include, gcc在编译程序时会按照当前目录路径->系统默认路径->系统环境变量的路径方式去查找&#xff0c;所以当我们想调用的库未安装在系统默认路径时&#xff0c;我们可以通过手动添加环境变…

数据压缩的艺术:Kylin Cube设计中的自动压缩特性

数据压缩的艺术&#xff1a;Kylin Cube设计中的自动压缩特性 在大数据的浩瀚宇宙中&#xff0c;Apache Kylin以其卓越的数据立方体&#xff08;Cube&#xff09;技术&#xff0c;为企业提供快速的多维数据分析能力。随着数据量的不断增长&#xff0c;存储效率成为了一个关键问…

用友NC Cloud blobRefClassSearch FastJson反序列化RCE漏洞复现

0x01 产品简介 用友 NC Cloud 是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,实现企业的数字化转型和业务流程优化。 0x02 漏洞概述 用友 NC Cloud blobRefClassSearch 接口处存在FastJson反序列…

开源PHP论坛HadSky本地部署与配置公网地址实现远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 今天和大家分享…

idea启动ssm项目详细教程

前言 今天碰到一个ssm的上古项目&#xff0c;项目没有使用内置的tomcat作为服务器容器&#xff0c;这个时候就需要自己单独设置tomcat容器。这让我想起了我刚入行时被外置tomcat配置支配的恐惧。现在我打算记录一下配置的过程&#xff0c;希望对后面的小伙伴有所帮助吧。 要求…

什么是计算机数据结构的字典

字典数据结构在计算机编程领域中是一个非常重要且常用的数据结构。它也被称为关联数组、哈希表或映射&#xff08;Map&#xff09;&#xff0c;在不同编程语言中有不同的实现和称呼&#xff0c;但其核心概念和用途大致相同。 字典数据结构是一种键值对&#xff08;key-value p…

Linux 软件工具安装

Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件&#xff0c; 一个通常的办法是下载到程序的源代码&#xff0c; 并进行编译&#xff0c;得到可执行程序。 但是这样太麻烦了&#xff0c; 于是有些人把一些常用的软件提前编译好&#xff0c;做成软件包(可以理解成wind…

动态路由的基本概念

动态路由的基本概念 什么是动态路由&#xff1f; 网络中的路由器彼此之间相互通信&#xff0c;传递各自的路由信息&#xff0c;利用收到的路由信息来更新和维护自己的路由表的过程。 基于某种路由协议实现&#xff08;6大协议&#xff09;。 动态路由的特点&#xff1a; 减…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案&#xff0c;新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后&#xff0c;可不设置系统变量java_home&#xff0c;仅在id…

开发技术-Java BigDecimal 精度丢失问题

文章目录 1. 背景2. 方法3. 总结 1. 背景 昨天和小伙伴排查一个问题时&#xff0c;发现一个 BigDecimal 精度丢失的问题&#xff0c;即 double a 1.1;BigDecimal ba new BigDecimal(a).subtract(new BigDecimal(0.1));System.out.println(ba);输出&#xff1a; 1.000000000…

构建自定义Tensorflow镜像时用到的链接地址整理

NVIDIA相关&#xff1a; NVIDIA CUDA镜像的docker hub&#xff1a;https://hub.docker.com/r/nvidia/cuda/tags?page&page_size&ordering&name12.4.1NVIDIA 构建的Tensorflow镜像包&#xff1a;https://docs.nvidia.com/deeplearning/frameworks/tensorflow-rele…