DLList
DLList
为了让remove等操作更加高效,我们在SLList的基础上进行改进,变为双向链表,这样有利于提升操作效率
同时,对于头节点的操作,我们可以用两个头节点,但更好的方法是使用循环链表
具体实现详见Project1
Generic Lists
我们设计的SLList目前只接受int类型,通过修改可以实现接受各种类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package lec5;
public class GenericList<T> { private class TNode { public T item; public TNode next;
public TNode(T i, TNode n){ item = i; next = n;
} }
private TNode sentinel; private int size;
public GenericList(){ sentinel = new TNode(null, null); size = 0; } public void addFirst(T x){ size++; sentinel.next = new TNode(x, sentinel.next); }
public T getFirst(){ return sentinel.next.item; }
public void addLast(T x){ size++; TNode p = sentinel; while(p.next!=null){ p = p.next; } p.next = new TNode(x, null); }
public int size(){ return size; }
public static void main(String[] args){ GenericList<Integer> L = new GenericList<>(); L.addFirst(10); L.addFirst(5); L.addLast(20); System.out.println(L.getFirst()); System.out.println(L.size()); }
}
|
泛型的规则如下:
.java文件中实现数据结构时,需要在文件开头设定泛型且只能设定一次
.java文件中使用数据结构时,设定需要的数据类型
类名<引用类型> 实例名 = new 类名<>();
声明和实例化时,需要使用引用类型
int:Integer
double:Double
char:Character
boolean:Boolean
long:Long
Arrays
数组是一种拥有指定长度内存的对象,组成如下:
固定整型长度
N=length个内存空间
- 所有内存空间有着相同数据类型
- 索引从0到length-1
初始化方法
1 2 3 4
| x = new int[3]; y = new int[]{1,2,3,4,5};
int[] z = {9, 10, 12, 13};
|
数组复制
- 使用循环逐个复制
- 使用System.arraycopy(),包括五个参数
- 源数组
- 源数组起始位置
- 目标数组
- 目标数组起始位置
- 复制元素个数
二维数组