package main
import (
"errors"
"fmt"
)
//定义数组结构体
type Array struct{
data []int
length int
}
//为数组分配空间
func NewArray(capacity uint) *Array{
if capacity == 0 {
return nil
}else{
return &Array{
data : make([] int, capacity, capacity),
length : 0,
}
}
}
//获得数组长度
func (this *Array)Len() int{
return this.length
}
//判断索引是否越界
func (this *Array)isIndexOutOfRange(index uint) bool{
if index >= uint(cap(this.data)) {
return true
}else {
return false
}
}
//在数组中找寻索引值
func (this *Array)Find(index uint) (int, error){
if this.isIndexOutOfRange(index) {
return -1,errors.New("this is out range")
}else {
return this.data[index], nil
}
}
//数组制定位置插入数值
func (this *Array) Insert(index uint, v int) error {
if this.Len() == cap(this.data) {
return errors.New("full array")
}
if index != uint(this.length) && this.isIndexOutOfRange(index) {
return errors.New("out of index range")
}
for i := this.length; i > int(index); i-- {
this.data[i] = this.data[i-1]
}
this.data[index] = v
this.length++
return nil
}
//数组尾部插入数值
func (this *Array) InsertToTail(value int)error{
return this.Insert(uint(this.length), value)
}
//删除索引值
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 < uint(this.Len())-1; i++ {
this.data[i] = this.data[i+1]
}
this.length--
return v, nil
}
//打印数组
func (this *Array)printArray(){
for i := 0; i < this.length;i++{
fmt.Printf("%d ", this.data[i])
}
fmt.Printf("\n")
}
func main(){
capacity := 10
arr := NewArray(uint(capacity))
for i := 0;i < capacity;i++ {
err := arr.Insert(uint(i), i+5)
if err != nil {
return
}
}
arr.printArray()
}