| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // stack_struct.go
- package main
- import (
- "fmt"
- "strconv"
- )
- const LIMIT = 4
- type Stack struct {
- ix int // first free position, so data[ix] == 0
- data [LIMIT]int
- }
- func main() {
- st1 := new(Stack)
- fmt.Printf("%v\n", st1)
- st1.Push(3)
- fmt.Printf("%v\n", st1)
- st1.Push(7)
- fmt.Printf("%v\n", st1)
- st1.Push(10)
- fmt.Printf("%v\n", st1)
- st1.Push(99)
- fmt.Printf("%v\n", st1)
- p := st1.Pop()
- fmt.Printf("Popped %d\n", p)
- fmt.Printf("%v\n", st1)
- p = st1.Pop()
- fmt.Printf("Popped %d\n", p)
- fmt.Printf("%v\n", st1)
- p = st1.Pop()
- fmt.Printf("Popped %d\n", p)
- fmt.Printf("%v\n", st1)
- p = st1.Pop()
- fmt.Printf("Popped %d\n", p)
- fmt.Printf("%v\n", st1)
- }
- func (st *Stack) Push(n int) {
- if st.ix+1 > LIMIT {
- return // stack is full!
- }
- st.data[st.ix] = n
- st.ix++
- }
- func (st *Stack) Pop() int {
- st.ix--
- return st.data[st.ix]
- }
- func (st Stack) String() string {
- str := ""
- for ix := 0; ix < st.ix; ix++ {
- str += "[" + strconv.Itoa(ix) + ":" + strconv.Itoa(st.data[ix]) + "] "
- }
- return str
- }
|