先来认识堆栈(例子)
为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是Stack.java的Go语言版本。
//实现堆栈的包集合
package collection
//生成空堆栈
type Stack struct {
data []interface{}
}
//压栈顶
func (s *Stack) Push(x interface{}) {
s.data = append(s.data, x)
}
//弹栈顶,并删除栈顶
//如果是空栈将会引发运行时错误
func (s *Stack) Pop() interface{} {
i := len(s.data) - 1
res := s.data[i]
s.data[i] = nil // to avoid memory leak
s.data = s.data[:i]
return res
}
//返回栈大小
func (s *Stack) Size() int {
return len(s.data)
}
- 用纯文本在声明语句上方添加注释。
- 申明的名字写在类型的后面。
- 结构体和Java中类相对应,但结构体的成员只能是变量,不能是方法。
- interface{}类型对应Java中的Object。它不仅能代表引用类型,同时也能实现Go语言的所有类型。
- (s *Stack)表示申明一个方法,s对应于Java中方法隐式传的this参数。
- 操作符:=表示申明和初始化一个变量,其类型由初始化语句决定。