Java集合中的List代表一种集合元素允许重复,允许有序的集合。因此,可以通过下标索引来访问List集合中的元素。
那么在什么情况下需要使用List集合?
如果有一组数据节点,其中多个数据节点之间有松散的一对一关系,类似于A数据节点之后是B数据节点的这种关系,我们应该使用List的集合来保存。换一个角度来看,存在这种松散的,一对一关系的多个数据节点就是典型的线性结构,应该使用线性表来保存它们。Java的List集合本身就是线性表。其中ArrayList是线性表的顺序存储实现。而LinkedList则是线性表的链式存储实现。
线性表概述
线性表(linear list)是具有相同类型的n(n≥0)个数据元素a0,a1,…an-1组成的有限序列。其中n 称为线性表的长度,当n=0时称为空线性表,n>0时称为非空表。线性表也是最基本、最简单、也是最常用的一种数据结构。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的,循环链表除外(循环链表逻辑层次上也是一种线性表)。
线性表的第一种存储结构:顺序
线性表的顺序存储结构是指用一组地址连续的存储单元依次存放线性表的元素。顺序线性表中相邻元素,两个元素a和a+1对应的存储地址loc(a)和loc(a+1)也是相邻的。也就是说:在顺序结构线性表中数据元素的物理关系和逻辑关系是一致的。
获取顺序存储线性表中每个元素的存储起始地址的时间相同,读取表中数据元素的时间也相同。而且顺序表中每个元素都给随机存取,因此顺序存储的线性表表示一种随机存取数据结构。所以顺序存储一般使用数组实现。
基本操作
借助数组来描述线性表。除了用数组来存储线性表的元素之外,线性表还应该有表示线性表的长度属性,所以用结构类型来定义线性表类型。
#define OK 1
#define ERROR -1
#define MAX_SIZE 100
typedef int Status ;
typedef int ElemType ;
typedef struct sqlist
{ ElemType Elem_array[MAX_SIZE] ;
int length ;
} SqList ;
1.顺序线性表初始化
Status Init_SqList( SqList *L )
{ L->elem_array=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType ) ) ;
if ( !L -> elem_array ) return ERROR ;
else { L->length= 0 ; return OK ; }
}