数据结构与算法的学习笔记目录:《恋上数据结构与算法》的学习笔记 目录索引
动态数组有个明显的缺点,可能会造成内存空间的大量浪费;
链表可以做到用多少就申请多少内存!
链表是一种 链式存储 的线性表,所有元素的内存地址不一定是连续的。
public class LinkedList<E> {
private int size;
private Node<E> first;
// 私有类,链表中的节点
private class Node<E>{
E element;
Node<E> next;
// 构造方法
public Node(E element, Node<E> next){
this.element = element;
this.next = next;
}
}
}
// 元素的数量
int size();
// 是否为空
boolean isEmpty();
// 是否包含某个元素
boolean contains(E element);
// 添加元素到最后面
void add(E element);
// 返回index位置对应的元素
E get(int index);
// 设置index位置的元素
E set(int index, E element);
// 往index位置添加元素
void add(int index, E element);
// 删除index位置对应的元素
E remove(int index);
// 查看元素的位置
int indexOf(E element);
// 清除所有元素
void clear();
// 索引越界判断
private void rangCheck(int index){
if(index < 0 || index >= size){
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
private void rangCheckForAdd(int index){
if(index < 0 || index > size){
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
private Node<E> node(int index){
rangCheck(index);
// 头节点,就是first指向的那个节点
Node<E> node = first;
// 根据索引遍历,查找对应的节点
for(int i = 0; i < index; i