简介
大量数据的管理是很多程序员的心病,很难找到一个速度快、效率高、支持超大规模数据的表,在1.0版本的基础上,启程花血本写下了这个强化了数据插入与删除的修正版,启程动态数组是一个功能强大的列表形数据管理链表,利用它可以轻松实现超大数据量的随机插入、删除、修改等操作,它另外一个特点就是速度极快,内存利用率高。
大量数据的管理必然需要占用大量的内存空间,如果这些数据占用的空间大小是随各种条件变化的,我们就不能使用数组来管理这些数据了(道理就不多说了),这时我们需要一个动态数组。MFC提供了一个很好的动态数组类CArray,对于少量数据,使用CArray就足够好用了,但是对于大量数据(10W级)它就力不从心了,因为它的本质就是一个数组,只不过对常用的插入、删除等操作进行了一个复杂的包装。为了解决这个问题,启程动态数组开创性地将链表与数组巧妙的结合起来,既有数组的高速随机索引的优点,又有链表的数据量灵活多变的特点。
工作原理
启程动态数组的数据结构如图(这是1.0版本的示意图,2.0版在结点中增加了一个指示当前数据段中已经使用的空间变量)。为了解决大量数据的动态存储问题,启程动态数组将数据分段存放在链表的节点中,每一段可以保存一定数量的数据,如果数据量增加,则在内存中分配一个新数据段,如果数据减少则释放空闲的数据段,从而有效地解决了该问题。相对于1.0版,2.0版中引入了每个结点中已使用空间用和总空闲空间两个变量,经过这个处理,在进行数据的插入删除时就不再需要对整个数组中的数据进行移动而只需要对目标数据段做一个简单的处理。
插入数据
如果目标数据段有空闲位置,那么只需要将该段进行曲整理并插入数据;如果目标段没有空闲空间,启程动态数据自动在内存中申请一段新的数据,并将该数据段链接到链表中。
删除数据
找到目标段后,从目标数据段中删除目标数据,如果目标段中只包含目标数据,启程动态数组自动删除目标段,并维护好链表的完整性。
添加数据
检查最后一个数据段,如果有空间就不再分配,没有就申请订报的数据段。