1、广义表LS=(a1,a2……an)非空,则a1是LS表头,其余元素组成的表(a2,……an)称为LS表尾。
非空广义表的表头是一个元素,可以是原子也可以是一个子表,而表尾则必定是子表。
Eg:LS(a,b),表头为a,表尾是(b)而不是b。
2、Class java.util.ArrayList:
元素在集合中有序,指的是元素插入过程中记录了元素的插入顺序。
ArrayList就是动态数组,是Array的复杂版本,提供如下好处:
1) 动态增加和减少元素
2) 实现了ICollection和IList接口
3) 灵活的设置数组的大小
数组大小指定之后是不可变的,集合是可变的。
List中元素可以重复,Set不可重复。
ArrayList的存储结构是线性的,动态分配内存,有序的,可以重复,优点是可以随机访问快
ArrayList是线程不安全的,不需要线程同步。
ArrayList和vector是类似的:
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