forked from wangzheng0822/algo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4d1525b
commit 574bc4b
Showing
2 changed files
with
150 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
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 this.length != 0 && index > this.length { | ||
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 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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package _5_array | ||
|
||
import ( | ||
"testing" | ||
) | ||
|
||
func TestInsert(t *testing.T) { | ||
capacity := 10 | ||
arr := NewArray(uint(capacity)) | ||
for i := 0; i < capacity-2; i++ { | ||
err := arr.Insert(uint(i), i+1) | ||
if nil != err { | ||
t.Fatal(err.Error()) | ||
} | ||
} | ||
arr.Print() | ||
|
||
arr.Insert(uint(6), 999) | ||
arr.Print() | ||
|
||
arr.InsertToTail(666) | ||
arr.Print() | ||
} | ||
|
||
func TestDelete(t *testing.T) { | ||
capacity := 10 | ||
arr := NewArray(uint(capacity)) | ||
for i := 0; i < capacity; i++ { | ||
err := arr.Insert(uint(i), i+1) | ||
if nil != err { | ||
t.Fatal(err.Error()) | ||
} | ||
} | ||
arr.Print() | ||
|
||
for i := 9; i >= 0; i-- { | ||
_, err := arr.Delete(uint(i)) | ||
if nil != err { | ||
t.Fatal(err) | ||
} | ||
arr.Print() | ||
} | ||
} | ||
|
||
func TestFind(t *testing.T) { | ||
capacity := 10 | ||
arr := NewArray(uint(capacity)) | ||
for i := 0; i < capacity; i++ { | ||
err := arr.Insert(uint(i), i+1) | ||
if nil != err { | ||
t.Fatal(err.Error()) | ||
} | ||
} | ||
arr.Print() | ||
|
||
t.Log(arr.Find(0)) | ||
t.Log(arr.Find(9)) | ||
t.Log(arr.Find(11)) | ||
} |