链表学习(1)

来源:互联网 发布:万网域名cname解析 编辑:程序博客网 时间:2024/06/06 00:59

1、广义表LS=(a1,a2……an)非空,则a1是LS表头,其余元素组成的表(a2,……an)称为LS表尾。

非空广义表的表头是一个元素,可以是原子也可以是一个子表,而表尾则必定是子表。

Eg:LS(a,b),表头为a,表尾是(b)而不是b。

 

2Class java.util.ArrayList

元素在集合中有序,指的是元素插入过程中记录了元素的插入顺序。

 

ArrayList就是动态数组,是Array的复杂版本,提供如下好处:

1) 动态增加和减少元素

2) 实现了ICollectionIList接口

3) 灵活的设置数组的大小

 

数组大小指定之后是不可变的,集合是可变的。

List中元素可以重复,Set不可重复。

ArrayList的存储结构是线性的,动态分配内存,有序的,可以重复,优点是可以随机访问快

ArrayList是线程不安全的,不需要线程同步。

 

ArrayListvector是类似的:

1) 两者都是基于索引,内部有一个数组支持

2) 两者都维护插入的顺序

3) 两者都允许null值

不同之处在于

1)       ArrayList是不同步的,而vector是同步的,所以ArrayList更高效,不会过载

2)       ArrayList更加通用,可以使用Collections工具类轻易获取同步列表和只读列表,当需要在迭代的时候对列表进行改变,一个使用CopyOnWriteArrayList。

 

3、解析XML时,需要检验节点是否闭合,如必须有与之对应,用栈数据结构实现比较好。

栈的常见应用:浏览器历史记录,Android中的最近任务,Activity的启动模式,CPU中栈的实现,Word自动保存,解析计算式,解析xml/json

 

XML匹配就是形如左右括号的匹配。

 

4、线性表(a1,a2……an)以链接方式存储时,访问第i个位置元素的时间复杂性为O(n)

分析:元素在链表的位置为i意味通过遍历执行i次,则i<n,可以知道时间复杂度为O(n)

时间复杂度指的是一个数量级的概念,i只是单纯的一个位置。

 

5、二维数组是其数组元素为线性表的线性表。

6

0 0