数据结构
数据结构是计算机存储、组织数据的方式
数据结构是指互相之间存在一种或多种特定关系的数据元素的集合
比如自定义的一个类也可以称为一种数据结构,类是一个自己定义的数据组合规则
数据结构简单来说就是人定义的存储数据和表示数据之间关系的规则
常用的数据结构
数组、栈、队列、链表、树、图、堆、散列表
线性表
线性表是一种数据结构,是有n个相同特性的数据元素组成的有限序列
比如数组、ArrayList、Stack、Queue、链表等等
顺序存储和链式存储是数据结构中两种存储结构
顺序存储
数组、Stack、Queue、List、ArrayList都是顺序存储
只是它们的组织规则不同
顺序存储就是用一组地址连续的存储单元依次存储线性表的各个数据元素
链式存储
单向链表、双向链表、循环链表都是链式存储
链式存储也叫链接存储,就是用一组任意的存储单元存储线性表中的各个数据元素
实现一个单向链表
class LinkedNode<T>
{public T value;public LinkedNode<T> nextNode;public LinkedNode(T value){this.value = value;}
}
LinkedNode<int> node = new LinkedNode<int>(1);
LinkedNode<int> node = new LinkedNode<int>(2);
node.nextNode = node2;
node2.nextNode = new LinkedNode<int>(3);
class LinkedList<T>
{public LinkedNode<T> head;public LinkedNode<T> last;public void Add(T value){LinkedNode<T> node = new LinkedNode<T>(value);if(head == null){head = node;last = node;}else{//往最后一个节点后面add,再把新的最后节点变成新添加的节点last.nextNode = node;last = node;}}public void Remove(T value){if(head == null){return;}if(head.value.Equals(value)){head = head.nextNode;//如果本身就只有一个节点就需要把last也置空if(head == null){last = bull;}return;}LinkedNode<T> node = head;while(node.nextNode != null){if(node.nextNode.value.Equals(value)){node.nextNode = node.nextNode.nextNode;break;}node = node.nextNode;}}
}
增和删时,链式存储不用移动位置
查和改时,顺序存储用下表就可以得到元素,链式存储则需要遍历