93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
package _5_array
|
||
|
||
import (
|
||
"errors"
|
||
"fmt"
|
||
)
|
||
|
||
/**
|
||
* 1) 数组的插入、删除、按照下标随机访问操作;
|
||
* 2)数组中的数据是int类型的;
|
||
*
|
||
* Author: leo
|
||
*/
|
||
|
||
type Array struct {
|
||
data []int
|
||
length uint
|
||
}
|
||
|
||
//为数组初始化内存
|
||
func NewArray(capacity uint) *Array {
|
||
if capacity == 0 {
|
||
return nil
|
||
}
|
||
return &Array{
|
||
data: make([]int, capacity, capacity),
|
||
length: 0,
|
||
}
|
||
}
|
||
|
||
func (this *Array) Len() uint {
|
||
return this.length
|
||
}
|
||
|
||
//判断索引是否越界
|
||
func (this *Array) isIndexOutOfRange(index uint) bool {
|
||
if index >= uint(cap(this.data)) {
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
//通过索引查找数组,索引范围[0,n-1]
|
||
func (this *Array) Find(index uint) (int, error) {
|
||
if this.isIndexOutOfRange(index) {
|
||
return 0, errors.New("out of index range")
|
||
}
|
||
return this.data[index], nil
|
||
}
|
||
|
||
//插入数值到索引index上
|
||
func (this *Array) Insert(index uint, v int) error {
|
||
if this.Len() == uint(cap(this.data)) {
|
||
return errors.New("full array")
|
||
}
|
||
if index != this.length && this.isIndexOutOfRange(index) {
|
||
return errors.New("out of index range")
|
||
}
|
||
|
||
for i := this.length; i > index; i-- {
|
||
this.data[i] = this.data[i-1]
|
||
}
|
||
this.data[index] = v
|
||
this.length++
|
||
return nil
|
||
}
|
||
|
||
func (this *Array) InsertToTail(v int) error {
|
||
return this.Insert(this.Len(), v)
|
||
}
|
||
|
||
//删除索引index上的值
|
||
func (this *Array) Delete(index uint) (int, error) {
|
||
if this.isIndexOutOfRange(index) {
|
||
return 0, errors.New("out of index range")
|
||
}
|
||
v := this.data[index]
|
||
for i := index; i < this.Len()-1; i++ {
|
||
this.data[i] = this.data[i+1]
|
||
}
|
||
this.length--
|
||
return v, nil
|
||
}
|
||
|
||
//打印数列
|
||
func (this *Array) Print() {
|
||
var format string
|
||
for i := uint(0); i < this.Len(); i++ {
|
||
format += fmt.Sprintf("|%+v", this.data[i])
|
||
}
|
||
fmt.Println(format)
|
||
}
|