golang实现栈,队列
package main
import (
"fmt"
"sync"
)
/*
使用 golang 实现栈
栈是一种LIFO(Last In First Out) 的数据结构,可以封装一个slice实现
*/
type Stack struct {
s []int
Mutex sync.Mutex
}
func (self *Stack) Push(value int) {
self.Mutex.Lock()
defer self.Mutex.Unlock()
self.s = append(self.s, value)
}
// 先取出最后一个元素,再缩减slice
func (self *Stack) Pop() int {
self.Mutex.Lock()
defer self.Mutex.Unlock()
value := self.s[len(self.s) - 1]
self.s = self.s[:len(self.s) - 1]
return value
}
func (self *Stack) IsEmpty() bool {
self.Mutex.Lock()
defer self.Mutex.Unlock()
return len(self.s) == 0
}
func (self *Stack) Size() int {
self.Mutex.Lock()
defer self.Mutex.Unlock()
return len(self.s)
}
func main() {
stack := &Stack{}
stack.Push(0)
stack.Push(1)
stack.Push(2)
stack.Push(3)
stack.Push(4)
stack.Push(5)
fmt.Println(stack.IsEmpty())
fmt.Println(stack.Size())
}