数据结构之顺序表(数组)和链表
1、顺序表(数组)
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组 地址连续的存储单元 依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
数组在内存中是连续的存储的,所以索引速度很快( 根据 Loc(ai)=Loc(a1)+(i-1)w,(1<=i<=n) ,其中Loc(a1) 是基地址既第一个元素地址,i是索引数,w是存储单元,每个元素的存储单元都是相同的,所以只要知道了基地址和存储单元,就能查询到任意索引的值;例如 索引为4,查第4个值,假如w=1, Loc(4)=Loc(1)+(4-1)1 ,既首个地址加上索引减一再乘以存储单元就找到索引的地址了,从而直接访问到该元素的值,时间复杂度O(1),所以比较快),而且赋值与修改元素也很简单。可以利用地址访问元素,时间复杂度为O(1);可以用二分法查找元素、效率高。
但是,在对顺序表进行插入和删除时,需要通过移动数据元素来实现(比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序,C#中如ArrayList ,List 等),比较影响效率。
2、链表
2.1、 单链表
链表中的数据是以节点来表示的,每个节点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个节点的地址数据。
个人理解:链表实际上是把一些具有相同类型的元素(节点)通过其存储的地址信息连接起来。例如:某个(节点)元素中除了存储数据信息外,还保存了另外一个同种类型元素的引用地址A,在访问该引用地址A时,就会访问到A的内容,也就是下个节点的内容,同理,A也存储了另外的同种类型元素的引用地址B,以此类推,形成一个链表。
大白话可以说是有一个普通平常的类Node,由于该类有个属性next也是Node引用类型的,既该属性next存的是Node类型的引用地址,所以该类在调用next的时候,就会访问到next存放的地址所指向内容,也就是下一个节点的内容。
b、然后建立一个链表节点类Node<T>,使用泛型
然后由链表类LinkList<T> 实现ILstDS<T>接口,下面只写了Add方法
2.2、 双向链表
2.3、 循环链表