| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // 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
- }
|