数据结构
数据结构是计算机存储、组织数据的方式(规则),或者说数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,比如自定义的一个类也可以称为一种数据结构自己定义的数据组合规则。我们不需要把数据结构想的太复杂,简单点理解,就是人定义的存储数据和表示数据之间关系的规则而已。
常用的数据结构:数组、栈、队列、链表、树、图、堆、散列表。
线性表
线性表是一种数据结构,是由n个具有相同特性的数据元素的有限序列,比如数组、ArrayList.Stack.Queue、链表等等。
顺序存储和链式存储是数据结构中两种存储结构,顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
顺序存储
数组、Stack、Queue.List、ArrayList等都属于顺序存储。
只是数组、stack、Queue的组织规则不同而已。顺序存储的原理是用一组地址连续的存储单元依次存储线性表的各个数据元素。
链式存储
单向链表、双向链表、循环链表等都属于链式存储。
用一组任意的存储单元存储线性表中的各个数据元素。
两种存储结构各有长短,选择哪一种由实际问题中的主要因素决定。通常“较稳定”的线性表,即主要操作是查找操作的线性表,适于选择顺序存储;而频繁做插入删除运算的(即动态性比较强)的线性表适宜选择链式存储。
实现一个简单的单向链表
class LinkedNode<T> { public T value; public LinkedNode<T> nextNode; public LinkedNode(T _value) { value = _value; } } LinkedNode<int> head = new LinkedNode<int>(1); LinkedNode<int> node = new LinkedNode<int>(2); head.nextNode = node; node.nextNode = new LinkedNode<int>(4);
需要注意的是,遍历链表要用while从头结点一层一层找。
顺序存储和链式存储的优缺点:
增:链式纯粹不用移动位置
删:链式存储不用移动位置
查:顺序存储不用while遍历
改:顺序查找更快