简介
栈的特点:
- 单向操作
- 先入后出(First In Last Out) FILO
操作
压栈、弹栈、清空、创建 等
代码
package main
import "fmt"
type Element interface{}
const NoData int = 0
const MaxSize int = 5
type Stack struct {
Data [MaxSize]Element
Top int
}
// 创建一个栈
func Create() *Stack {
var data [MaxSize]Element
return &Stack{Data: data, Top: 0}
}
// 获取栈的长度
func (s *Stack) Len() int {
return s.Top
}
// 判断栈是否为空
func (s *Stack) IsEmpty() bool {
if s.Top == 0 {
return true
}
return false
}
//判断栈是否满了
func (s *Stack) IsFull() bool {
if s.Top == MaxSize {
return true
}
return false
}
// 入栈
func (s *Stack) Push(e Element) {
if s.IsFull() {
fmt.Println(" Stack is full")
return
}
s.Data[s.Top] = e
s.Top++
return
}
// 出栈
func (s *Stack) Pop() Element {
if s.IsEmpty() {
fmt.Println("stack is empty")
return NoData
}
s.Top--
data := s.Data[s.Top]
s.Data[s.Top] = 0
return data
}
func (s *Stack) Clear() {
var data [MaxSize]Element
s.Data = data
s.Top = 0
}
func main() {
stack := Create()
//fmt.Println(stack.Pop())
stack.Push(1)
stack.Push(1)
stack.Push(1)
stack.Clear()
stack.Push(1)
stack.Push(1)
fmt.Println(stack.Len())
fmt.Printf("%#v\n", *stack)
}
网友评论