数据结构—数组与广义表

117 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

前言

今天总结数组的相关知识,数组是很常见的数据结构了,平时使用也很广泛,在项目中也是十分重要的部分。

数组

数组是存放在连续内存空间上的相同类型数据的集合。

数组的优点:可以方便的通过下标索引的方式获取到下标下对应的数据。

注意:

  1. 数组下标都是从0开始的。
  2. 数组内存空间的地址是连续的

数组地址的计算:

image.png

二分查找

数组的一个比较常见的算法题是二分查找,二分查找的题一般不是很难,主要是懂得二分查找的知识以及进行一些剪枝操作。

二分查找一般都是将数组排序,在有序的数组中,通过二分查找减少查找的复杂度。

二分查找涉及的很多的边界条件,逻辑比较简单,但就有的时候会分析不明白。例如是 while(left < right) 还是 while(left <= right),是right = middle呢,还是要right = middle - 1,十分难判断。这时候需要规范自己的区间,不能上面是一个区间下面换。

广义表

广义表是线性表的推广,也称为列表(lists)。

image.png

ai可以是单个元素,也可以是广义表,分别称为原子和子表。

广义表有两种特殊的基本操作:

  1. GetHead[L]---取表头(可能是原子或列表)
  2. GetTail[L]---取表尾(一定是列表)

广义表的存储结构

由于广义表的元素可以是不同结构(原子或列表),难以用顺 序存储结构,通常用链式结构,每个元素用一个结点表示。

原子节点:

image.png

列表节点

image.png

注意:任何一个非空表,表头可能是原子,也可能是列表;但表尾一定是列表。