Skip to content

Commit 228d231

Browse files
committed
feat: add array
1 parent da5bb6c commit 228d231

File tree

5 files changed

+216
-0
lines changed

5 files changed

+216
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.idea
2+
.vscode
Lines changed: 104 additions & 0 deletions
Loading

02_array/01_array_example/main.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
)
7+
8+
func main() {
9+
// 初始化数组
10+
var arr = [3]int{1, 2, 3}
11+
// 查找元素
12+
fmt.Printf("arr[1]: %d\n", arr[1])
13+
// 删除元素
14+
remove(&arr, 2)
15+
// remove(&arr, 3) // will panic
16+
fmt.Println(arr)
17+
18+
fmt.Printf("main: %p --> %+v\n", &arr, arr)
19+
p(arr)
20+
p2(&arr)
21+
}
22+
23+
// 删除数组 arr 的某个元素
24+
// index 为需要删除的索引
25+
// 从需要删除的元素开始,依次将后面的元素往前移动一位即可
26+
// 然后将最后一位修改为该类型的默认值
27+
func remove(arr *[3]int, index int) {
28+
if index >= len(arr) {
29+
log.Panicf("%d remove out range arr", index)
30+
}
31+
for i := index; i < len(arr)-1; i++ {
32+
arr[i] = arr[i+1]
33+
}
34+
arr[len(arr)-1] = 0
35+
}
36+
37+
func p(arr [3]int) {
38+
fmt.Printf("p: %p --> %+v\n", &arr, arr)
39+
}
40+
41+
func p2(arr *[3]int) {
42+
fmt.Printf("p2: %p --> %+v\n", arr, arr)
43+
}

02_array/02_slice/main.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
// 初始化
7+
s1 := make([]int, 2)
8+
fmt.Printf("s1(%p): %v, len: %d, cap: %d\n", &s1, s1, len(s1), cap(s1))
9+
// s1(0xc00000c080): [0 0], len: 2, cap: 2
10+
11+
// 赋值
12+
s1[0] = 1
13+
s1[1] = 2
14+
fmt.Printf("s1(%p): %v, len: %d, cap: %d\n", &s1, s1, len(s1), cap(s1))
15+
// s1(0xc00000c080): [1 2], len: 2, cap: 2
16+
17+
// 扩容
18+
s1 = append(s1, 3, 4, 5, 6, 7)
19+
fmt.Printf("s1(%p): %v, len: %d, cap: %d\n", &s1, s1, len(s1), cap(s1))
20+
// s1(0xc00000c080): [1 2 3], len: 3, cap: 4
21+
22+
// 删除元素
23+
s1 = append(s1[:1], s1[2:]...)
24+
fmt.Printf("s1(%p): %v, len: %d, cap: %d\n", &s1, s1, len(s1), cap(s1))
25+
// s1(0xc00000c080): [1 3], len: 2, cap: 4
26+
27+
// 复制一个 slice
28+
s2 := s1[:2]
29+
fmt.Printf("s2(%p): %v, len: %d, cap: %d\n", &s2, s2, len(s2), cap(s2))
30+
// s2(0xc00000c120): [1 3], len: 2, cap: 4
31+
32+
s1[0] = 10 // 这里可以发现,s1[0] s2[0] 都被修改为了 10
33+
fmt.Printf("s1(%p): %v, len: %d, cap: %d\n", &s1, s1, len(s1), cap(s1))
34+
// s1(0xc00000c080): [10 3], len: 2, cap: 4
35+
fmt.Printf("s2(%p): %v, len: %d, cap: %d\n", &s2, s2, len(s2), cap(s2))
36+
// s2(0xc00000c120): [10 3], len: 2, cap: 4
37+
38+
s1 = append(s1, 5, 6, 7, 8)
39+
s1[0] = 11 // 这里可以发现,s1[0] 被修改为了 11, s2[0] 还是10
40+
fmt.Printf("s1(%p): %v, len: %d, cap: %d\n", &s1, s1, len(s1), cap(s1))
41+
// s1(0xc00011c020): [11 3 5 6 7 8], len: 6, cap: 8
42+
fmt.Printf("s2(%p): %v, len: %d, cap: %d\n", &s2, s2, len(s2), cap(s2))
43+
// s2(0xc00011c0c0): [10 3], len: 2, cap: 4
44+
45+
// 对比一下两种空 slice 的区别
46+
var s3 []int
47+
s4 := make([]int, 0)
48+
fmt.Printf("%p --> %#v\n", s3, s3) // 0x0 --> []int(nil)
49+
fmt.Printf("%p --> %#v\n", s4, s4) // 0x587450 --> []int{}
50+
51+
initSlice()
52+
}
53+
54+
func sliceChange(s []int) {
55+
// 不允许直接这么操作
56+
s[0] = 1
57+
}
58+
59+
func initSlice() {
60+
var s1 []int
61+
fmt.Printf("%p: %v, len: %d, cap: %d\n", s1, s1, len(s1), cap(s1))
62+
s2 := make([]uint, 0)
63+
fmt.Printf("%p: %v, len: %d, cap: %d\n", s2, s2, len(s2), cap(s2))
64+
s3 := []int{}
65+
fmt.Printf("%p: %v, len: %d, cap: %d\n", s3, s3, len(s3), cap(s3))
66+
}

README.MD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
| 标题 | Github | 博客 |
66
| ---- | --------- | ------------------------------------------------------------------------------------------------- |
77
| 链表 | [list](./01_list) | [Go 数据结构与算法 01-链表(深入理解 container/list&LRU 缓存的实现)](https://lailin.xyz/post/list.html) |
8+
| 数组 | [array](./02_array) | [Go数据结构与算法02-数组: 深入理解 slice](https://lailin.xyz/post/array.html) |

0 commit comments

Comments
 (0)