数组-数据结构与算法

1.数组是很多编程语言中最基础的数据结构,下面来一起温习下
2.数组示例:

 int[] a = new int[10]; //定义数组
 a[0] = 5;              //数组赋值,
 int v1 = a[0];         //访问数组, v1=5 ,下标从0开始

3.数组如何实现随机访问?

  • 1.内存中所有的空间都是按格子排列好的,每个格子占一个字节byte,且都有一个地址,通过地址访问到格子中的内容
  • 2.程序创建数组时,会在内存中申请连续的空间,并记录数组的首个格子地址 base_address
  • 3.程序中每种数据类型type_size 都占用不同字节byte,如:int占4个字节,char2个字节
  • 3.访问数组a[0]时,会通过该公式一步计算出地址:a[0]_address = base_address + i * type_size 拿到存储的数据

4.为什么下标从0开始?我觉得有2个原因

  • 1.如果不从0开始,计算公式是:a[0]_address = base_address + (i -1) * type_size,CPU是按指令计算单的,此时多了一次减法运算,对于常用的数组,每次多一步计算是可以优化的
  • 2.历史原因,C语言的设计者设计数组时是从0开始的,java等语言也仿照

5.在Java中有ArrayList容器,它比数组多了很多api去操作数据,最重要的是支持自动扩容,数组申请好后容量是不能改变的,ArrayList容器添加内容时,判断是否达到阈值,会自动新建数组,并把之前的内容全部复制到新数组中,并添加内容,如果扩容次数很多,会消耗性能,如果在创建容器时大概知道数据量,则可以指定容器长度,List list = new ArrayList(100);

6.如果对性能要求很高的操作,如网络编程等,可以使用数组

7.数组有访问、添加、插入、删除操作

  • 1.访问:通过下标访问一步到位,时间复杂度为 O(1)
  • 2.添加:数据添加到末尾一步到位,时间复杂度为 O(1)
  • 3.插入:数据插入到末尾一步到位,时间复杂度为 O(1),数据插入到第一位置则需要把内容全部向后移动一位再插入数据,时间复杂度为 O(n)。如果对数据的顺序没有要求,可以把插入位置的内容先移动到数组末尾,再把值插入到该位置,此时时间复杂度为 O(1)
  • 4.删除:删除最后一个数据,时间复杂度为 O(1),数据第一个数据,时间复杂度为 O(n)

8.数组是线性表的一种,线性表就是数据排成像一条线一样的结构。数组,链表、队列、栈等也是线性表结构
在这里插入图片描述

9.非线性表有二叉树、堆、图等。之所以叫非线性,是因为在非线性表中,数据之间并不是简单的前后关系
在这里插入图片描述
10.稀疏数组:稀疏数组是数组的一种应用,可以把原始数组的内容进行压缩,再还原出来,比如下五子棋,下棋存档操作,原始棋盘需要存储 11行 * 11列,存为稀疏数组就只需要存储 3行 * 3列的数据,恢复时再转换回来即可

在这里插入图片描述

相关推荐
简介 第1章综述 数据结构算法能起到什么作用? 数据结构的概述 算法的概述 一些定义 面向对象编程 软件工程 对于C++程序员的Java Java数据结构的类库 小结 问题 第2章数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章简单排序 如何排序? 冒泡排序 选择排序 插入排序 对象排序 几种简单排序之间的比较 小结 问题 实验 编程作业 第4章栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章链表 链结点(Link) LinkList专题Applet 单链表 查找和删除指定链结点 双端链表 链表的效率 抽象数据类型 有序链表 双向链表 迭代器 小结 问题 实验 编程作业 第6章递归 三角数字 阶乘 变位字 递归的二分查找 汉诺(Hanoi)塔问题 归并排序 消除递归 一些有趣的递归应用 小结 问题 实验 编程作业 第7章高级排序 希尔排序 划分 快速排序 基数排序 小结 问题 实验 编程作业 第8章二叉树 为什么使用二叉树? 树的术语 一个类比 二叉搜索树如何工作 查找节点 插入一个节点 遍历树 查找最大值和最小值 删除节点 二叉树的效率 用数组表示树 重复关键字 完整的tree.java程序 哈夫曼(Huffman)编码 小结 问题 实验 编程作业 第9章红-黑树 本章讨论的方法 平衡树和非平衡树 使用RBTree专题applet 用专题applet做试验 旋转 插入一个新节点 删除 红-黑树的效率 红-黑树的实现 其他平衡树 小结 问题 实验 第10章2-3-4树和外部存储 2-3-4树的介绍 Tree234专题applet 2-3-4树的Java代码 2-3-4树和红-黑树 2-3-4树的效率 2-3树 外部存储 小结 问题 实验 编程作业 第11章哈希表 哈希化简介 开放地址法 链地址法 哈希函数 哈希化的效率 哈希化和外部存储 小结 问题 实验 编程作业 第12章堆 堆的介绍 Heap专题applet 堆的Java代码 基于树的堆 堆排序 小结 问题 实验 编程作业 第13章图 图简介 搜索 最小生成树 有向图的拓扑排序 有向图的连通性 小结 问题 实验 编程作业 第14章带权图 带权图的最小生成树 最短路径问题 每一对顶点之间的最短路径问题 效率 难题 小结 问题 实验 编程作业 第15章应用场合 通用数据结构 专用数据结构 排序 图 外部存储 前进 附录A运行专题applet和示例程序 专题applet 示例程序 SunMicrosystem软件开发工具集 重名的类文件 其他开发系统 附录B进一步学习 数据结构算法 面向对象程序语言 面向对象设计(OOD)和软件工程 附录C问题答案 第1章,综述 第2章,数组 第3章,简单排序 第4章,栈与队列 第5章,链表 第6章,递归 第7章,高级排序 第8章,二叉树 第9章,红-黑树 第10章,2-3-4树和外部存储 第11章,哈希表 第12章,堆 第13章,图 第14章,带权图
<p> <span>做一门精致,全面详细的 java数据结构算法!!!</span> </p> <p> <span>让天下没有难学的数据结构,</span> </p> <p> <span>让天下没有难学的算法,</span> </p> <p> <span>不吹不黑,我们的讲师及其敬业,可以看到课程视频,课件,代码的录制撰写,都是在深夜,如此用心,其心可鉴,他不掉头发,谁掉头发???</span> </p> <p> <span>总之你知道的,不知道的,我们都讲,并且持续更新,走过路过,不要错过,不敢说是史上最全的课程,怕违反广告法,总而言之,言而总之,这门课你值得拥有,好吃不贵,对于你知识的渴求,我们管够管饱</span> </p> <p> 话不多说,牛不多吹,我们要讲的本门课程内容: </p> <p> <span style="color:#404040;">稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。</span> </p>
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页