이번에 GoLang을 배우면서 문법 공부 복습 및 GoLang에서의 Stack은 어떻게 구현될까 궁금해 직접 구현해봤다.
package main
import (
"errors"
"fmt"
"log"
)
type stack struct {
top *node
}
type node struct {
val int
next *node
}
func newStack() *stack {
return &stack{
top: nil,
}
}
//LIFO Last In First Out
func (s *stack) push(val int) {
if s.top == nil {
n := &node{val: val, next: nil}
s.top = n
return
}
n := &node{val: val, next: s.top}
s.top = n
}
func (s stack) peek() int {
return s.top.val
}
func (s *stack) pop() (int, error) {
if s.isEmpty() {
return 0, errors.New("stack is empty")
}
t := s.top
s.top = s.top.next
return t.val, nil
}
func (s stack) isEmpty() bool {
return s.top == nil
}
func main() {
s := newStack()
s.push(1)
s.push(3)
s.push(4)
s.push(5)
for !s.isEmpty() {
v, err := s.pop()
checkStackErr(err)
fmt.Println("pop :", v)
}
}
func checkStackErr(err error) {
if err != nil {
log.Fatalln(err)
}
}
실행결과
GoLang은 지금껏 다뤄봤던 언어들 중에서 배우는데에 재미가 있고 똑똑하다는 느낌을 많이 받는다!..
'Go' 카테고리의 다른 글
[Go] context 호출 계층에 따른 결과 테스트하기 (0) | 2022.07.18 |
---|