【数据结构与算法】用go语言实现数组结构及其操作
引言
数组结构是一种很常见的数据结构,并且在大部分编程语言中都存在,这些语言都提供了现成的可以立马就能使用的数组这种数据结构。为了更好的理解数组,这边文章就是来实现数组。
数组的特点
1.内存中数据之间紧密排列在一起。
2.新增元素需要开辟内存空间用以存放新的元素。
3.新增元素时候,如果新增的元素在其他元素中间,那么该新增元素的位置后面所有元素需要往后挪动。新增元素复杂度最坏情况O(n)。
4.删除元素时候,如果删除的元素在其他元素中间,那么该删除元素的位置后面所有元素需要往前挪动。删除元素复杂度最坏情况O(n)。
5.数组查找元素的复杂度是O(1)。
数组实现
1.定义数组结构(结构体)
//数据结构 字符串 整数 实数 type ArrayList struct{ dataStore [] interface{} //数组的存储 模拟实现泛型 TheDataSize int //数组的大小 TheDataSize首字母大写 外部也可以访问 }
2.定义数组的操作方法(接口)
//接口 type List interface{ Size() int //数组大小 Get(index int) (interface{}, error)//获取第几个元素 后面是返回的类型(泛型) Set(index int, newval interface{}) error //修改数据 Insert(index int, newval interface{}) error //插入数据 Append(newval interface{}) //追加数据 没有返回值所以不需要返回error Clear() //清空数组 Delete(index int) error //删除元素 String() string //返回字符串 Iterator() Iterator //接口 }
3.为数组开辟内存
func NewArrayList() *ArrayList { //这里返回的ArrayList就是1里的定义数组结构的结构体 list := new(ArrayList) //初始化结构体 list.dataStore = make([]interface{}, 0, 10) //开辟空间10个 list.TheDataSize = 0 //默认初始化大小为0 return list }