Int stack Go-ban

A Programozás Wiki wikiből

Int típusok tárolására alkalmas egyszerű verem implementációja, Go nyelven:

stack.go:

package stack
import "os"

// list típus
type list struct {
    next *list
    value int
}

// Stack típus
type Stack struct {
    size int
    first *list
}

// Stack létrehozása
func NewStack() *Stack {
    p := new(Stack)
    p.size = 0
    p.first = nil
    return p
}

// int bedobása a verembe
func (p *Stack) Push(in int) {
    l := new(list)
    l.next = p.first
    l.value = in
    p.first = l
    p.size++
}

// int kivétele a veremből
func (p *Stack) Pop() (int,os.Error) {
    if p.first != nil {
        out := p.first.value
        p.first = p.first.next
        p.size--
        return out,nil
    }
    return 0,os.NewError("Empty")
}

// legfelső elem lekérdezése
func (p *Stack) Top() (int,os.Error) {
    if p.first != nil {
        return p.first.value,nil
    }
    return 0,os.NewError("Empty")
}

// Üres-e?
func (p *Stack) IsEmpty() bool {
    return p.first == nil
}

// verem méretének lekérdezése
func (p *Stack) Size() int {
    return p.size
}


És ennek egy szájbarágós felhasználása:

main.go:

package main

import (
    "fmt"
    "os"
    "./stack"
)

func main() {
    st := stack.NewStack()
    for i:=0; i<10; i++ {
        st.Push(i)
    }

    fmt.Printf("stack size: %d\n",st.Size())

    for !st.IsEmpty() {
        val,err := st.Pop()
        if err == nil {
            fmt.Printf("%d, ",val)
        } else {
            fmt.Printf("\n Error: %s\n", err.String())
            os.Exit(1)
        }
    }
    fmt.Printf("\n")
}