线性表(n个数据元素的有限集合)是一种逻辑结构,它的特点:
(1)存在唯一的一个被称做“第一个”的数据元素;
(2)存在唯一的一个被称做“最后一个”的数据元素;
(3)除第一个之外,集合中的每个数据元素均只有一个前驱;
(4)除最后一个之外,集合中每个数据元素均只有一个后继。
线性表的存储结构包括两种:顺序存储、链式存储。顺序存储是指在内存中分配一块连续的空间,用来存储线性表的元素;链式存储是指线性表的各元素在内存中不是连续存储,每个元素可以找到自己的前驱或者后继。
线性表的逻辑结构包括栈、队列、数组、链表、串等。
数组(连续的存储单元)、链表(非连续的存储单元,每个存储单元包括<数据域,指针域>)都表示线性表的存储结构。
栈(限定仅在表尾进行插入或删除操作的线性表)也是一种线性表,但它不表示存储结构。栈可以由数组或者链表实现其存储结构。栈的应用场景:数制转换、行编辑(删除字符)、表达式求值、浏览器的历史访问记录(后退为出栈,点连接为入栈)、函数调用、蒸馒头(最上面屉的馒头先熟)等。
队列(一种先进先出的线性表)是一种线性表的逻辑结构。在队列中,允许插入的的一端叫队尾,允许删除的一端则称为队头。队列的存储也可以由数组或链表实现(链队列),比较常用的是链队列。队列的应用场景:排队、请求处理队列等。
Java中,用接口List表示线性表,所有继承List接口的类都是线性表,比如ArrayList、LinkedList、RoleList、Stack、Vector等。
二叉树:
顺序存储:第i号结点的左右孩子一定保存在第2i及2i+1号单元中。缺点:对非完全二叉树而言,浪费存储空间;
链式存储:一个二叉树的结点至少保存三种信息:数据元素、左孩子位置、右孩子位置。对应地,链式存储二叉树的结点至少包含三个域:数据域、左、右指针域。
遍历二叉树
静态查找表:无序表的顺序查找;有序表的折半查找;
动态查找表;
二叉排序树
哈希表:一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
排序分类:
稳定排序、不稳定排序;
内部排序、外部排序;
排序方法:
1、插入排序:直接插入排序(顺序查找插入位置)、折半插入排序(折半查找插入位置)、2路插入排序;
3、选择排序:简单选择排序、树形选择排序;
4、堆排序
5、归并排序