250217-数据结构

1. 定义

数据结构是数据的存储结构,即数据是按某些结构来存储的,比如线性结构,比如树状结构等。

2. 学习意义

数据结构是服务于算法的,为了实现算法的高效计算,所以将数据按特定结构存储。比如使用快速插入或删除的算法时,使用链表这种数据结构算法会更高效。

3.分类

判定某种数据结构的优劣是根据大O时间复杂度来判断的。

T(n)表示代码执行的时间; n表示数据规模的大小; f(n) 表示程序执行完毕后执行全部计算次数的总和,因为这是一个公式, 所以用f(n)来表示。公式中的O,表示代码的执行时间T(n)与f(n)表达式成正比。

复杂度分析法则

1)单段代码看高频:比如循环。
2)多段代码取最大:比如一段代码中有单循环和多重循环,那么取多重循环的复杂度。
3)嵌套代码求乘积:比如递归、多重循环等
4)多个规模求加法:比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加。

时间复杂度分析

  • 只关注循环执行次数最多的一段代码
  • 加法法则:总复杂度等于量级最大的那段代码的复杂度
  • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

复杂度分析的4个概念
1.最坏情况时间复杂度:代码在最坏情况下执行的时间复杂度。
2.最好情况时间复杂度:代码在最理想情况下执行的时间复杂度。
3.平均时间复杂度:代码在所有情况下执行的次数的加权平均值。
4.均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度。

3.1 线性结构

3.1.1 顺序表(数组实现)

手搓顺序表;

下面实例中属性都被封装起来了,方法里的功能性方法比如增加元素、查看元素是公开的,但是检查是否合法、动态扩容的方法也都被封装起来了。

public class ArraysStructure
{public static void main(String[] args){ArraysDemo arr=new ArraysDemo();int[] a={1,2,3,4,5,6,7,8,9,10,11};for(int i:a){arr.add(i);}arr.get(3);System.out.println("数组的元素个数"+arr.size());System.out.println("数组的容量"+arr.getCapacity());}
}//总的来说,下面定义的类实现了动态数组、检查合法、添加元素、查询元素、获取元素数量三个功能
class ArraysDemo
{private static final int DEFAULT_CAPACITY=10; //初始数组容量;private int[] arr;  //声明数组变量private int size;  //当前元素数量public ArraysDemo()	//构造函数,初始化数组{arr=new int[DEFAULT_CAPACITY];size=0;}//确保数组容量足够private void ensureCapacity(int minCapacity){if(minCapacity>arr.length){//扩容为原来的1.5倍int newCapacity=DEFAULT_CAPACITY+(DEFAULT_CAPACITY>>1);int[] newArray=new int[newCapacity];System.arraycopy(arr,0,newArray,0,size);	//旧数组数据复制到新数组arr=newArray;System.out.println("扩容为原来的1.5倍");}else{System.out.println("数组剩余容量为"+(arr.length-minCapacity));}}public void add(int num)	//添加元素{//首先检查是否需要扩容ensureCapacity(size+1);arr[size++]=num;}public int get(int index)	//获取指定位置的元素{checkIndex(index);	//检查索引是否合法return arr[index];}public void checkIndex(int index)	//检查索引是否合法{if(index<0 || index>=size){throw new IndexOutOfBoundsException("index"+index+",size"+size);}}public int size()	//获取元素数量{return size;}public int getCapacity(){return arr.length;}
}
/*输出结果
数组剩余容量为9
数组剩余容量为8
数组剩余容量为7
数组剩余容量为6
数组剩余容量为5
数组剩余容量为4
数组剩余容量为3
数组剩余容量为2
数组剩余容量为1
数组剩余容量为0
扩容为原来的1.5倍数组的元素个数11
数组的容量15*/

该例还有一个细节,以int[] arr=new int[n]创建的arr对象可以arr.length查看数组的总容量,然而若以ArraysDemo arr=new ArraysDemo()创建的arr对象,查看arr.length就会报错,说该类未声明length属性。 

3.1.2 链表

3.1.3 栈

3.1.4 队列

3.2 树状结构

                            
                        
文中关于时间和空间复杂度的内容引自该文,原文链接:https://blog.csdn.net/ityqing/article/details/82838524。

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

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

相关文章

PyCharm2024使用Python3.12在Debug时,F8步进时如同死机状态

在使用时PyCharm2024&#xff0b;Python3.12&#xff0c;在程序进行调试时&#xff0c;按F8步进时如同死机状态。 1、相同的程序在PyCharm2023&#xff0b;Python3.9时是没有问题的&#xff0c;因此决定重装PyCharm2023&#xff0b;Python3.9&#xff0c;进行调试——调试OK。 …

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…

DeepSeek应用-一秒对书本要点分析并创建思维脑图

2025年开始啦&#xff0c;从DeepSeek的火爆程度来看&#xff0c;今年必须紧盯DS的发展&#xff0c;AI不会淘汰人&#xff0c;AI只会淘汰不会使用的人。从文心一言、豆包、Kimi到DS,基本上从功能上大致相同&#xff0c;但是DeepSeek的开源着实在眼界和格局上更胜一筹&#xff0c…

4、IP查找工具-Angry IP Scanner

在前序文章中&#xff0c;提到了多种IP查找方法&#xff0c;可能回存在不同场景需要使用不同的查找命令&#xff0c;有些不容易记忆&#xff0c;本文将介绍一个比较优秀的IP查找工具&#xff0c;可以应用在连接树莓派或查找IP的其他场景中。供大家参考。 Angry IP Scanner下载…

android 的抓包工具

charles 抓包工具 官网地址 nullCharles Web Debugging Proxy - Official Sitehttps://www.charlesproxy.com/使用手册一定记得看官网 SSL Certificates • Charles Web Debugging Proxy http请求&#xff1a; 1.启动代理&#xff1a; 2.设置设备端口 3.手机连接当前代理 …

Java常用工具类详解

目录 一、Java 中的数学利器&#xff1a;java.lang.Math 类详解 1.常用属性 2.常用方法 ⑴.static int abs(int a) ⑵.static double ceil(double a) ⑶.static double floor(double a) ⑷.static int max(int a, int b) 和 static int min(int a, int b) ⑸.static do…

STM32 低功耗模式

目录 背景 低功耗模式 睡眠模式 进入睡眠模式 退出睡眠模式 停止模式 进入停止模式 退出停止模式 待机模式 进入待机模式 退出待机模式 程序 睡眠模式 休眠模式配置 进入休眠模式 退出睡眠模式 停止模式 停止模式配置 进入停止模式 退出停止模式 待机模式…

uniapp 使用v-html在微信小程序中渲染成rich-text如何显示文本溢出省略

一、问题描述 小伙伴有个需求&#xff0c;想在uniapp开发的微信小程序的一个列表中对内容进行显示溢出显示省略号的控制&#xff1a;当文本超出一行之后&#xff0c;显示…。 经过尝试&#xff0c;无法在v-html所在的节点进行ellipise的控制。 二、解决方案 1.增加函数&…

VMware 17 安装 VMTools(win 7旗舰 X64)

由于在VM 17中安装的 win 7虚拟机没有安装VM Tools 的原因&#xff0c;界面有大黑边&#xff0c;也无法直接拖拽复制粘贴文件&#xff08;但是如果只是要复制文件&#xff0c;最简单的方法还是使用U盘&#xff09;&#xff0c;所以下面开始安装VM Tools 。 若直接选择VM软件中的…

【MySQL】我在广州学Mysql 系列——Mysql 日志管理详解

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天又是新的一周了&#xff0c;又该摆好心态迎接美好的明天了&#xff01;&#xff01;&#xff01;&#x1f606; 本文主要对Mysql数据库中的日志种类以及基本命令进行讨论&#xff01;&#xff01; 回顾&#xff1a;&#x1f4…

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…

DeepSeek-V3 技术报告

DeepSeek-V3 Technical Report https://arxiv.org/abs/2412.19437 1. 核心贡献 DeepSeek-V3 是一个拥有 6710 亿参数的大规模混合专家&#xff08;MoE&#xff09;语言模型&#xff0c;每个 token 激活 370 亿参数。 该模型通过创新的架构设计和训练策略&#xff0c;实现了高效…

PCIe7.0信号完整性优化的一些方向

首先考虑过孔stub的影响&#xff0c;分别仿真10mil stub&#xff0c;6mil stub&#xff0c;3mil stub以及无stub四种情况&#xff0c;观察insertion loss/ return loss/TDR Impedance profile、crosstalk四个参数对比情况。 仿真对比结果如下&#xff1a; 其次&#xff0c;考虑…

学习threejs,使用PointLight点光源

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PointLight 二、&…

30填学习自制操作系统第二天

今天要干什么&#xff1f; 初步了解汇编语言使用汇编重新写个昨天的镜像文件继续开发 一: 什么是电信号&#xff1f; 电脑的处理中心是CPU&#xff0c;即“central process unit”的缩写&#xff0c;翻译成中文就是“中央处理单元”&#xff0c;顾名思义&#xff0c;他就是…

Python的顺序结构和循环结构

文章目录 一、条件语句&#xff08;1&#xff09;条件语句的定义&#xff08;2&#xff09;条件语句的语法&#xff08;a&#xff09;单分支 if&#xff08;b&#xff09;双分支 if-else&#xff08;c&#xff09;多分支 if-elif-elif-...-else &#xff08;3&#xff09;注意事…

金蝶云星空点击按钮实现指定文件下载

文章目录 金蝶云星空点击按钮实现指定文件下载业务需求开发实现 金蝶云星空点击按钮实现指定文件下载 业务需求 点击按钮&#xff0c;下载excel 开发实现 创建表单插件&#xff0c;在按钮点击事件&#xff0c;调用附件下载窗口进行指定路径的指定文件下载 模板存放路径 …

EasyExcel的简单使用

EasyExcel使用 官方文档&#xff1a;关于EasyExcel 1.1EasyExcel相关依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version></dependency> 1.2 写Excel 1.2.1 最…

游戏引擎学习第107天

仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾我们之前停留的位置 在这段内容中&#xff0c;讨论了如何处理游戏中的三维效果&#xff0c;特别是如何处理额外的“Z层”。由于游戏中的艺术资源是位图而不是3D模型&#xff0c;因此实现三维效果变得非常具有挑战性。虽然可…

「vue3-element-admin」基于 TypeScript 的 ECharts 按需引入方案实战 - Vue3 项目打包体积优化 57%

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …