本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。
线性表
-
线性表
是具有n个相同类型元素
的有限序列
(n>=0)
- a1是首节点(首元素),an是尾节点(尾元素)
- a1是a2的前驱,a2是a1上午后继
常见的线性表有:
- 数组
- 链表
- 栈
- 队列
- 哈希表(散列表)
数组(Array
)
-
数组
是一种顺序存储
的线性表,所有元素的内存地址是连续
的
NSArray *array = @[11,22,33];
- 在很多编程语言中,普通数组都有致命的缺点:无法动态修改容量
- 实际开发中,我们更希望数组的容量是可以动态改变的
动态数组(Dynamic Array
)接口设计
-
int
size(); //元素的数量 -
boolean
isEmpty(); //是否为空 -
boolean
contains(E element); //是否包含某个元素 -
void
add(E element); //添加元素到最后面 - E get(
int
index); //返回index位置对应的元素 - E set(
int
index, E element); //设置index位置的元素 -
void
add(int
index, E element); //往index位置添加元素 - E remove(
int
index); //删除index位置对应的元素 -
int
indexOf(E element); //查看元素的位置 -
void
clear(); //清除所有元素
动态数组明显缺点:
可能会造成内存空间的大量浪费,比如:很久都不一定会用到扩容后的空间
数组修改
元素时间复杂度:O(1), 这个复杂度和下标无关;
数组查询
元素时间复杂度:O(1), 这个复杂度和下标无关;
数组访问特点:
- 随机访问速度非常快