学习笔记整理–数据结构
顺序结构
其特征为:物理空间连续,有标号。
最典型的就是数组
例如 : int[] a = {1,2,3};
这个数组a中的三个元素的物理占用空间是连续 的,而且都有下标分别为0,1,2.
这种结构因为有下标的存在使得,数据的查找很方便,但是数据的插入删除则麻烦。
链表结构
链表结构最大的特点为:物理空间不连续,只有头/尾节点
其通常的代码格式为:
public class Node {
Object data;
Node next;
}
链表是没有现成的JDK的,所以我们通常要在定义一个链表的内部类。链表是由“节点“组成的,没有一个节点通常来说分为:连接到下一个端口和这个节点所包含的内容。
我们在使用链表前,还要定义一个head头结点。
Node head = new Node();
这个头结点不存储数据,只是用来当作链表的开始。
链表由于其物理空间不连续的特点。使得其插入和删除数据变得比较简单,只要改变其连接的顺序就可以了。
其中链表也可以是由尾节点开始的。
队列(Queue)
队列:双端队列,没有标号,实现通过顺序/链表实现
它是一种特殊的线性表。只允许在表的前端进行删除或者获取,在表的末端插入。
它在JDK中的方法也很少,只有六种:分别为
boolean add(E e) :将指定的元素插入此队列
E element() : 获取,但是不移除此队列的头。
boolean offer(E e) :将指定的元素插入此队列
E peek() : 获取但不移除此队列的头;如果此队列为空,则返回 null。
E poll() :获取并移除此队列的头,如果此队列为空,则返回 null。
E remove() :获取并移除此队列的头
栈(Stack)
栈最大特点:从哪里进来就会从哪里出去,实现通过顺序/链表实现。
所以栈是先进后出。如同水杯中的水一样,最先倒入的水会进入杯底,后入反而在杯头,因此最先获取的数据是最后输入的数据。
它的方法就只有5个:
boolean empty() 测试堆栈是否为空。
E peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
E pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
E push(E item) 把项压入堆栈顶部。
int search(Object o) 返回对象在堆栈中的位置,以 1 为基数。
散列表 (Set)
散列结构:不连续,没有顺序 不允许重复 equals方法判断是否重复
Set -> 截取Map(映射表)
HashSet ->内存存储位置,由hasdCode决定
存储过程:1.调用自身的hashCode()方法计算存储位置
2:如果位置上没有元素,直接存入
3.如果位置上有元素,再调用自身equals方法和该位置上的元素比较
4.如果比较不一致,另计算位置存入(重复上面)
5.如果比较一致,不存入
树 (Tree)
Set ->SortedSet -> TreeSet
遍历方式: 先序遍历:中左右
后序遍历:左右中
中序遍历:左中右(主要使用)
Tree存储过程:
1:和根节点比较——通过compareTo方法比较
2:如果比根节点小,存储在左边
3:如果比根节点大,存储在右边
4:一样大,不存入
二叉树的特点是:存入的数据会按照遍历的方式个个输出。