package main
import (
"fmt"
"reflect"
"errors"
)
/*
使用append函数增加slice元素
slice可以实现栈
注意:
1.超过slice容量后,会为底层函数重新开辟更大内存空间
2.开辟新的内存空间,需手动更新slice的指针
*/
func main() {
//append
myslice := make([]int, 1, 1)
for i := 0 ; i < 10 ; i++ {
//更新slice
myslice = append(myslice, i + 1)
fmt.Println(i,": 当前容量为", cap(myslice), myslice)
}
/*
0 : 当前容量为 2 [0 1]
1 : 当前容量为 4 [0 1 2]
2 : 当前容量为 4 [0 1 2 3]
3 : 当前容量为 8 [0 1 2 3 4]
4 : 当前容量为 8 [0 1 2 3 4 5]
5 : 当前容量为 8 [0 1 2 3 4 5 6]
6 : 当前容量为 8 [0 1 2 3 4 5 6 7]
7 : 当前容量为 16 [0 1 2 3 4 5 6 7 8]
8 : 当前容量为 16 [0 1 2 3 4 5 6 7 8 9]
9 : 当前容量为 16 [0 1 2 3 4 5 6 7 8 9 10]
*/
//rune实质为int32 byte实质为uint8
myrunes := []rune("你好")
mybytes := []byte("世界")
fmt.Println(reflect.TypeOf(myrunes), reflect.TypeOf(mybytes))
//stack
mys := stackint{}
//入栈
for i := 0; i < 10 ; i++ {
mys.stackPush(i)
}
mys.showMystack()
//出栈
for i := 0; i < 11 ; i++ {
mys.stackPop()
}
mys.showMystack()
//入栈
for i := 0; i < 10 ; i++ {
mys.stackPush(i)
}
mys.showMystack()
}
type stackint struct {
s []int
}
//入栈
func (mystack *stackint)stackPush(x int) {
mystack.s = append(mystack.s, x)
}
//出栈
func (mystack *stackint)stackPop() (int,error) {
if len(mystack.s) != 0 {
tempint := mystack.s[len(mystack.s) - 1]
mystack.s = mystack.s[:len(mystack.s) - 1]
return tempint, nil
} else {
return 0, errors.New("栈为空")
}
}
func (mystack *stackint)showMystack() {
fmt.Println(mystack.s)
}
slice进阶
猜你喜欢
转载自www.cnblogs.com/zbhbc/p/9209585.html
今日推荐
周排行