说说标记清除整理中任意顺序算法中双指针同向(快慢)环和反向(对撞)链式区别?
1、适用的存储结构不同
双指针同向(快慢)环适用的是链表环结构。
双指针反向(对撞)适用的是非环链表结构。
2、执行过程不同
双指针同向(快慢)执行是两根指针同向同时出发,但是一个快一个慢,因为是环形结构,执行快的指针是能追上执行慢的指针。
双指针反向(对撞)执行是两根指针反向同时出发,头部指针找空闲空间,尾部指针找可达对象,头部指针找到了空闲空间就会先停下,等到尾部指定找到了可达对象,就会将可达对象复制到空闲空间,然后头部指针继续往后走,尾部指针继续找可达,直到两根指针对撞后,就会将头部指针之前的区域依次进行引用更新然后将尾部指针后面的区域进行清空,示例图如下:
3、注意事项
无论双指针同向(快慢)环还是双指针反向(对撞),总的来说双指针算法比较适合固定大小的对象,如果对象大小不同则会增加额外的判断额外的开销。
共有 0 条评论