【数据结构与算法】用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
}