1.链表
-
问题场景
-
数组的特点
-
数组在内存中是一块连续的空间,存放批量同类型的数据
-
数组是定长的,预先要设置好数组的长度
-
数组的插入和删除操作需要移动大量元素
-
-
有没有一种数据结构可以让我们不移动元素快速的完成插入和删除操作呢?并且能不限制存放数据的多少
-
-
链表的概念
-
链表是一种常见的重要的数据结构,它是动态的进行存储分配的一种结构,可以根据需要开辟内存单元
-
头指针:链表有一个"头指针"变量,以head表示,它存放一个地址,这个地址指向一个元素
-
节点:链表中每一个元素称为节点(结点),每个节点都包含两个部分:一是用户需要的实际数据,二是下一个节点的地址。因此,head指向第一个元素,第一个元素指向第二个元素。。。直到最后一个元素,该元素不再指向其他元素,称为表尾,它的地址部分存放一个"null",表示空地址,链表到此结束
-
-
数组和链表的区别
-
数组因为是连续存放的,可以通过下标查找数据,查询比较快
-
链表中的每个元素在存储位置上没有规律,查找元素的时候,需要从头结点通过指向挨个向后查找,查询比较慢
-
数组的连续存放,致使其插入和删除数据时都要进行大量数据的移动,因此插入和删除比较慢
-
链表的每个元素都存放着下一个元素的地址,添加和删除元素时,只需要让指向改变即可,不需要移动数据,因此插入和删除比较快
-
数组是定长的,根据初始定义开辟空间
-
链表是动态的,按需分配空间
-
2.队列
-
生活场景
-
在银行办理业务进行排队取号
-
打印机打印文件时的顺序
-
-
场景特点
-
生活中这种场景我们称之为排队
-
排队时的原则:排在前面的先办事,办完出队,来的晚的在队尾排队,不允许插队
-
-
队列的概念
-
队列是一种先进先出的数据结构
-
队头:进行出队即删除元素的一方称为队头
-
队尾:进行入队即插入元素的一方称为队尾
-
3.栈
-
生活场景
-
洗盘子案例
-
-
栈的概念
-
这种先进后出的数据结构称为栈,栈仅限定在栈顶进行数据的插入和删除操作
-
栈顶:可以进行添加和删除数据的一端
-
入栈:把数据通过栈顶添加到栈中,push
-
出栈:把数据通过栈顶弹出,pop
-
4.树
-
生活场景
-
文件夹及其子文件夹和文件
-
-
树的概念
-
节点:表示树中的数据元素
-
树的节点可以有0个或多个
-
当节点的个数为0时,称为空树
-
只具有一个节点时也称为树
-
节点之间不能有交集
-
树在顶部有一个特殊的节点,称为根节点,其余节点是它的子节点
-
中间的节点称为树枝
-
底部无分支的节点称为叶子
-
-
二叉树:
-
除了叶节点外其余节点最多有两个孩子的树称为二叉树
-
二叉树的遍历
-
从根节点出发,以某种次序遍历各个节点,确保每个节点都访问过,并且仅访问过一次
-
先序遍历:从根节点开始扫描,对每个子树进行遍历,先遍历中节点,再遍历左子树,最后遍历右子树,顺序:中左右
-
-