线性表

线性表是一种简单的数据结构,数据元素之间存在着一对一的关系。其存储方法通常采用顺序存储和链式存储

线性表的顺序存储可以采用结构体的形式,它含有两个域。一个整型的长度域,用以存放表中的元素的个数;另一个数组域,其类型可以根据需要而定。顺序存储的优点是可以随机存取,且存储空间比较节约,而缺点就是表的扩充比较困难,插入和删除操作者都需要大量的元素移动。

线性表的链式存储是通过节点之间的连接得到的。根据连接方式的不同可以分为:单向链表、双向链表和循环链表等。

单向链表由一个数据域和一个指针域组成,数据域用来存放结点的信息;指针域用来指出下一个结点的地址。在单向链表中,只能从某个结点出发找它的后继结点。单向链表的最大优点是表的扩充容易、插入和删除操作方便,而缺点就是存储空间比较浪费。

双向链表是由一个数据域和两个指针域组成的,他的优点是既能查找结点的前驱,也能找到结点的后继。

循环列表使最后一个结点的指针指向头借点的地址,形成一个首尾相连的环。利用循环链表将使某些运算比单向链表简单。

栈是一种运算限制的线性表,它只允许在栈顶进行插入和删除操作

栈的逻辑结构和线性表相同,数据元素之间存在一对一关系,其主要特点是“先进后出”

栈的存储结构有顺序栈和链表之分

主要应用有子程序调用,递归调用

队列

队列是一种操作受限制的线性表,一般队列只允许在队尾进行插入操作,在队头进行删除操作。

队列的逻辑结构和线性表也相同,数据元素之间存在一对一的关系,其主要特点是“先进先出”

Java Collection Mapping

顺序线性表 – ArrayList
链式线性表 – LinkedList
栈 – Stack / LinkedList
队列 – Queue / LinkedList