yoongrammer

[자료구조] 스택(Stack) 구현하기 in Go 본문

자료구조 (Data structure)

[자료구조] 스택(Stack) 구현하기 in Go

yoongrammer 2021. 1. 14. 16:42
728x90

목차

    스택(Stack) 구현하기 in Go


    스택은 후입 선출 (LIFO) 원리를 따라 정렬된 데이터 구조입니다.

    golang에서 Slice를 사용하면 쉽게 스택을 구현할 수 있습니다.

     

    • built-in 함수인 append를 사용하여 push를 구현합니다.
    • 배열의 마지막 요소를 잘라내는 방식으로 pop을 구현합니다.

    구현


    Go 언어로 구현하면 다음과 같습니다.

    package main
    
    import "fmt"
    
    type Stack []interface{}
    
    //IsEmpty - 스택이 비어있는지 확인하는 함수
    func (s *Stack) IsEmpty() bool {
    	return len(*s) == 0
    }
    
    //Push - 스택에 값을 추가하는 함수.
    func (s *Stack) Push(data interface{}) {
    	*s = append(*s, data) // 스택 끝(top)에 값을 추가함.
    	fmt.Printf("%d pushed to stack\n", data)
    }
    
    //Pop - 스택에 값을 제거하고 top위치에 값을 반환하는 함수.
    func (s *Stack) Pop() interface{} {
    	if s.IsEmpty() {
    		fmt.Println("stack is empty")
    		return nil
    	} else {
    		top := len(*s) - 1
    		data := (*s)[top] // top 위치에 있는 값을 가져 옴
    		*s = (*s)[:top]   // 스택에 마지막 데이터 제거함
    		return data
    	}
    }
    
    func main() {
    	var s Stack
    	s.Push(1)
    	s.Push(2)
    	s.Push(3)
    	fmt.Printf("%d poped from stack\n", s.Pop())
    }

    Output:

    1 pushed to stack
    2 pushed to stack
    3 pushed to stack
    3 poped from stack

    소스는 아래 깃허브에서 받을 수 있습니다.

    https://github.com/dev-yyh/Go/tree/main/DS/stack

    설명


    • 모든 유형을 저장할 수 있게 빈 인터페이스(interface{}) 유형으로 스택을 초기화합니다.
    • push 함수는 append 함수를 사용하여 배열 마지막 부분에 값을 추가해 줍니다.
    • pop함수는 스택이 비어있는지 확인하고 비어있지 않다면 top 위치에 있는 값을 가져온 뒤 삭제합니다.
    728x90
    Comments