Golang实现自定义数组
效果图:

功能点:
1.获取容量
2.获取数组长度
3.增删改查
4.是否包含
...........
Code:
type Array struct {
data []int
size int
}
// 初始化一个Array
func NewArray(cap int) *Array{
return &Array{
data:make([]int,cap),
}
}
// 判断数组是否为空
func (a *Array)IsEmpty()bool{
if a.size==0{
return true
}
return false
}
// 数据插入到数组中指定位置
func (a *Array)Insert(index,ele int){
if a.size == len(a.data) {
fmt.Println("Array already full.")
return
}
if index<0||index>a.size{
fmt.Println("index invaild.")
}
for i:=a.size-1;i>=index;i--{
a.data[i+1]=a.data[i]
}
a.data[index]=ele
a.size++
}
// 获取数组的长度大小
func (a *Array)GetSize()int{
return a.size
}
// 数组尾部插入数据
func(a *Array)Add(ele int){
a.Insert(a.size,ele)
}
// 打印数组
func (a *Array)Print(){
for _,v:=range a.data{
fmt.Printf("%d\t",v)
}
/*
不输出多余的默认值0
for i:=0;i<a.size;i++{
fmt.Printf("%d\t",a.data[i])
}
*/
fmt.Println()
}
// 获取指定下标位置数据
func (a *Array)Get(index int)int{
if index<0||index>a.size{
fmt.Println("index invaild.")
}
return a.data[index]
}
// 修改指定下标位置数据
func (a *Array)Update(index,ele int){
if index<0||index>a.size{
fmt.Println("index invaild.")
}
a.data[index]=ele
}
// 数组容量修改
func (a *Array)Resize(cap int){
data:=make([]int,cap)
copy(data,a.data)
a.data=data
// 坑:如果不对size做修改,后期可能出现越界
if a.size>cap {
a.size=cap
}
}
// 移除指定下标位置数据
func (a *Array)Remove(index int) {
if index<0||index>a.size{
fmt.Println("index invaild.")
}
for i:=index;i<a.size-1;i++{
a.data[i]=a.data[i+1]
}
//因为删除一位,长度变成了a.size-1,使用a.data[a.size-1]为之前残留数据
a.data[a.size-1]=0
a.size--
}
// 查询数组是否存在该数据
func (a *Array)Contains(ele int)bool {
for i:=0;i<a.size;i++{
if ele==a.data[i] {
return true
}
}
return false
}
// 查找数据在数组中第一次出现的下标,没有找到返回-1
func (a *Array)Find(ele int)int{
for i:=0;i<a.size;i++ {
if ele==a.data[i] {
return i
}
}
return -1
}
// 查找数据在数组中所有出现位置的下标,没有找到返回空切片
func (a *Array)FindAll(ele int)(result []int){
for i:=0;i<a.size;i++ {
if ele==a.data[i] {
result=append(result,i)
}
}
return
}
Reference:
donng/Play-with-Data-Structures: 慕课 liuyubobobo「玩转数据结构」课程的 Go 语言实现版本 (github.com)


本文系作者 @孤独常伴 原创发布在 L0ne1y。未经许可,禁止转载。