持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
前言
今天总结数组的相关知识,数组是很常见的数据结构了,平时使用也很广泛,在项目中也是十分重要的部分。
数组
数组是存放在连续内存空间上的相同类型数据的集合。
数组的优点:可以方便的通过下标索引的方式获取到下标下对应的数据。
注意:
- 数组下标都是从0开始的。
- 数组内存空间的地址是连续的
数组地址的计算:
二分查找
数组的一个比较常见的算法题是二分查找,二分查找的题一般不是很难,主要是懂得二分查找的知识以及进行一些剪枝操作。
二分查找一般都是将数组排序,在有序的数组中,通过二分查找减少查找的复杂度。
二分查找涉及的很多的边界条件,逻辑比较简单,但就有的时候会分析不明白。例如是 while(left < right) 还是 while(left <= right),是right = middle呢,还是要right = middle - 1,十分难判断。这时候需要规范自己的区间,不能上面是一个区间下面换。
广义表
广义表是线性表的推广,也称为列表(lists)。
ai可以是单个元素,也可以是广义表,分别称为原子和子表。
广义表有两种特殊的基本操作:
- GetHead[L]---取表头(可能是原子或列表)
- GetTail[L]---取表尾(一定是列表)
广义表的存储结构
由于广义表的元素可以是不同结构(原子或列表),难以用顺 序存储结构,通常用链式结构,每个元素用一个结点表示。
原子节点:
列表节点
注意:任何一个非空表,表头可能是原子,也可能是列表;但表尾一定是列表。