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
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(),包括五个参数
- 源数组
- 源数组起始位置
- 目标数组
- 目标数组起始位置
- 复制元素个数
二维数组