稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
简单来说 , 就是将无用的数据扔掉 , 进而无损压缩数据
1 | type ValNode struct { |
环形队列
数组模拟环形队列
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下其中 maxsize是该队列的最大容量。
因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输岀而改变,而rear则是随着数据输入而改变,
一般约定 , 当rear距离front只有一个空位的时候为
对满
(也就是说,队尾差一位就能追上对首)- 所以就是判断 :
(rear + 1) % maxSize == head
- 所以就是判断 :
总结 :
- 初始化 :
rear == head == 0
- 对空 :
rear == head
- 对满 :
(rear + 1) % maxSize == head
- 队列的元素个数 :
(rear + maxSize - head) % maxSize
(为了保证不出现负数 , 要加一个maxSize)
1 | type CircleQueue struct { |
环形单向链表
环形单向链表一般也拥有dummyHead
1 | type CricleNode struct { |
双向链表
对比单向链表的优势 :
- 支持向前查找
- 单向链表不支持
自我删除
, 必须依赖其他辅助节点 , 而双向链表支持自我删除
排序
选择排序
1 | func SelectSort(arr []int) []int { |
插入排序
1 | func InsertSort(arr []int) []int { |