关于滚动数组的一些菜鸟随笔
什么是滚动数组
简单来说,滚动数组就是一种具有短暂记忆力的数组,它会牺牲时间来节省空间,用size=3的数组来“存储”30000个数据。这么说有点离谱、抽象,毕竟a[3]怎么存储a[30000]里面的东西呢。这就是滚动数组的特性,即只记录少量的后续需要使用的数据,而将之前用过且不再需要调用的数据抛弃、覆盖,这样就将a[30000]中不要的数据所占的空间节省出来,以达到a[3]就能达成的任务目标。
滚动数组的核心:取余
在开始学习C语音的时候,接触到了一个新的数学运算符:取余%,和除号 / 类似的是都多用在特殊的循环或者是取一串数字的某一位,除法多取高位,取余多取低位。在滚动数组中,取余用于数组下标的动态改变,以达到[3]存[30000]的效果,例如:
int m=30000;//一个原先大的数据空间 int n=3;//所需要的一个滚动数组空间 void fun() { for (int i = 0; i < m; i++) { d[i % n] = d[(i - 1) % n] + d[(i - 2) % n]; } }