数据结构一—— 数组

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。

如何实现随机访问

数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

线性表

线性表的数据最多只有前和后两个方向。数组、栈、队列、链表都是线性表。
非线性表:树、图、堆。

连续的内存空间

a[i]_address=base_address+i∗data_type_sizea[i]\_address=base\_address+i*data\_type\_sizea[i]_address=base_address+idata_type_size,data_type_size表示数组中每个元素的大小。
如果数组下标从1开始,那么在查找a[i]_address=base_address+(i−1)∗data_type_sizea[i]\_address=base\_address+(i-1)*data\_type\_sizea[i]_address=base_address+(i1)data_type_size会多一次减法操作。这可能是大多数语言数组下标从0开始的原因。

与链表的区别

数组支持随机访问,复杂度O(1)。链表适合插入删除。

低效地插入和删除

插入:如果某个位置a[i]已经被占用了,就需要将i到最后一个元素拷贝到i+1到count位置,然后a[i]=val。平均时间复杂度O(n)。
改进策略:大多数时候我们不需要追求顺序性,那么我们可以把a[i]复制到数组末尾,将 当前元素赋值给a[i]。例如数组a[10],已经存入元素:1,2,3,4,5。现在想插入a[2]=10,那么插入完成后数组变为:1,2,10,4,5,3。

删除:因为内存块是连续的,当删除i位的元素后,从i+1到count的元素需要向前迁移。这样平均复杂度也是O(n)。
删除的改进策略可以是:删除的位置先做标记不做迁移,等空间不够的时候再做迁移。这就是Java虚拟的标记清除算法。

警惕数组越界

数组越界是通常需要处理的问题。在C中数组越界可能会产生意想不到的结果。

容器能否完全替代数组

在某些场合还是用数组不会用容器。例如:
1 数组可以存储基本数据类型,速度上更快。在已知数组大小,并且操作简单的情况下数组是个更好的选择。
2 多维数组一般用数组表示。a[][] 这样的表示比List<List> 这样的结构更容易接受。

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

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

相关文章

第三十九期:1024特别版:向“程序媛们”致敬!

对女性程序员而言&#xff0c;似乎怎么选择都是错&#xff1a;闯入男性领地&#xff0c;输了&#xff0c;会强化社会对女性的固有刻板印象&#xff1b;赢了&#xff0c;打破了职业性别固化&#xff0c;会导致整个职业收入的下降。 作者&#xff1a;奇点、轻音 “到家得十二点半…

django-中间件

1.django中间件的5个方法 process_request(self,request) process_view(self, request, callback, callback_args, callback_kwargs) process_template_response(self,request,response) process_exception(self, request, exception) process_response(self, request, respons…

第四十期:十年生死两茫茫,Linux QQ突然复活!

就在 1024 将将过去的深夜&#xff0c;突然&#xff0c;有人在 QQ 群内丢了一个链接和一句话“Linux QQ 发布了”&#xff0c;顿时在静悄悄的 QQ 群内&#xff0c;大家纷纷冒了出来。一时间&#xff0c;群内就和开了锅一样热闹&#xff0c;大家纷纷抄起心爱的土琵琶 Linux&…

数据结构二——链表

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 底层存储 数组&#xff1a;一块连续的内存空间。 链表&#xff1a;用指针串起来的一组零散的内存空间。 链表分类&#xff1a;单链表、双向链表、循环链表 单链表…

[Bugku][Web][CTF] 30-33 write up

【说明】 整合资源 简略版本2020Bugku write up web30 关键字&#xff1a; txt or file_get_contents(fn)知识点&#xff1a;filegetcontents(fn) 知识点&#xff1a; file_get_contents(fn)知识点&#xff1a;fileg​etc​ontents(fn) 联想 php://input 步骤&#xff1a; 1.1…

UML作业第五次:分析系统,绘制状态图

一. PlantUML状态图 语法学习小结 1.简单状态 我们使用[*]开始和结束状态图&#xff0c;使用-->添加箭头。 startuml [*] --> Test1 Test1 --> [*] Test1 : this is a test Test1 : this is another testTest1 -> Test2 Test2 --> [*] enduml 2.更改状态渲染 我…

第四十一期:从Windows到鸿蒙——操作系统的前世与今生

世界上操作系统生意做得最好的是微软&#xff0c;但是世界上第一个做操作系统生意的不是微软&#xff0c;Windows也不是世界上最好用的系统。 作者&#xff1a;苏亚 “做一个操作系统的技术难度不大&#xff0c;难度大的是生态。”——任正非 华为被谷歌断供之后&#xff0c…

算法一——排序

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 分析排序算法的角度 算法的执行效率 算法的执行效率一般从时间复杂度以及比较、交换次数来考虑。 时间复杂度 时间复杂度需要考虑最好情况、最坏情况、平均情况时…

[Bugku][Crypto][CTF][2020]Crypto 1-20 write up

工具&#xff1a;CaptEncoder https://www.freebuf.com/sectool/188397.html Convert:https://pan.baidu.com/s/17YPXfvBHl_HyA00AffTBvg 密码&#xff1a;skqw 推荐网站&#xff1a;http://ctf.ssleye.com/ Crypto 1 关键字&#xff1a; 莫斯 /.- 步骤&#xff1a;莫斯解码得…

《我的十年图像生涯》—王郑耀(西安交通大学)

最近看王郑耀的《我的十年图像生涯》颇有感悟&#xff0c;在此把他的资料总结下 参考&#xff1a; 1.王郑耀《我的十年图像生涯》博客 链接——https://www.cnblogs.com/jsxyhelu/p/7054573.html 里边有自己这十年的经历&#xff1b; 2.王郑耀《数字图像的边缘检测》本科论文 链…

第四十二期:Linux转正日常办公电脑到底行不行

昨天是中国程序员们自定义的程序员日&#xff0c;阿里在秀食堂&#xff0c;另一网络巨头腾讯也不甘寂寞地小蹭了一下这个节日&#xff1a;发布了Linux QQ 2.0 beta&#xff0c;宣告Linux版QQ回归。 作者&#xff1a;电脑报 昨天是中国程序员们自定义的程序员日&#xff0c;阿…

算法二——二分查找

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 思考题目 1 用最省内存的方式查找数据。 2 快速定位ip所在省市 二分查找的速度 二分每次都通过跟区间中的中间元素对比&#xff0c;将待查找的区间缩小为一半&…

[Kali][VMware][2020][窗口大小][分辨率]高分辨率自适应

1.Vmware->查看->自动调整大小->自动适应窗口 2.Kali现在提供了HiDPI模式。此模式可调整GTK&#xff0c;QT甚至基于Java的界面的缩放比例&#xff0c;因此用户无需手动修改每个界面。您可以通过从应用程序菜单中打开“ Kali HiDPI模式”或kali-hidpi-mode从终端运行来…

第四十三期:Wireshark网络分析就这么简单,你一定会喜欢的技巧

拿到一个网络包时&#xff0c;我们总是希望它是尽可能小的。操作一个大包相当费时&#xff0c;有时甚至会死机。如果让初学者分析1GB以上的包&#xff0c;估计会被打击得信心全无。所以抓包时应该尽量只抓必要的部分。 作者&#xff1a;科技yuan 一、抓包 拿到一个网络包时&a…

Beta冲刺(9/7)——2019.5.31

作业描述 课程软件工程1916|W(福州大学)团队名称修&#xff01;咻咻&#xff01;作业要求项目Beta冲刺&#xff08;团队&#xff09;团队目标切实可行的计算机协会维修预约平台开发工具Eclipse团队信息 队员学号队员姓名个人博客地址备注221600207黄权焕https://www.cnblogs.co…

数据结构三——跳表

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 跳表的由来 说明&#xff1a;图片来自极客时间 由来   二分查找的数据结构是数组&#xff0c;利用数组随机访问的特定查找的时间复杂度是O(logn)。如果数据结构是…

[BUGKU][CTF][MISC][2020] MISC writeup持续更新中

CTF总结 ctf基本操作&#xff1a;https://blog.csdn.net/mafucan/article/details/106886421 zip: https://www.anquanke.com/post/id/86211 找软件推荐网址 1.https://www.52pojie.cn/ 2.没有的话百度一下 去找百度云 工具下载&#xff1a; stegSolve 隐写分析 需要配置Java…

spring学习(1):初始项目

1打开idea----new project 2点击建立项目的类型maven 点击next 3点击next 4选择路径&#xff0c;点击完成 5建立成功之后修改pom.xml配置文件 添加&#xff0c;解决依赖关系 <dependencies><dependency><groupId>org.springframework</groupId><ar…

while语句学习

while语句 while [break][continue] break 退出当前循环continue 退出当前循环&#xff0c;并重新循环。执行语句可以是单个语句或语句块。判断条件可以是任何表达式&#xff0c;任何非零、或非空&#xff08;null&#xff09;的值均为true。 当判断条件假false时&#xff0c;循…

[密码学][困难问题][常见规约]密码学问题常见困难问题

参考网址(科学上网) 密码学问题常见困难问题,需要点击参考网址进行查找 其困难问题的介绍非常友好&#xff0c;请根据目录快速找到相关资料 以下是检索 目录 Discrete logarithm problem DLP: discrete logarithm problem CDH: computational Diffie-Hellman problem SDH:…