Golang 자료구조와 알고리즘 구현하는 GoDS 라이브러리 알아보기

오늘은 Golang으로 자료구조와 알고리즘이 구현되어 있어서 쉽게 사용할 수 있는 GoDS((Go Data Structures) 라이브러리를 알아보려 합니다.

GoDS 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

go get으로 GoDS 패키지를 설치합니다.

go get github.com/emirpasic/gods

홈의 go 폴더에 GoDS 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"fmt"

	"github.com/emirpasic/gods/lists/singlylinkedlist"
	"github.com/emirpasic/gods/maps/hashmap"
	"github.com/emirpasic/gods/sets/hashset"
	"github.com/emirpasic/gods/stacks/linkedliststack"
	"github.com/emirpasic/gods/trees/avltree"
	"github.com/emirpasic/gods/utils"
)

linkedlist, hashmap, stack, tree 등을 가져와서 사용할 수 있습니다.

func main() {
	list := singlylinkedlist.New()
	list.Add("b", "a")
	list.Sort(utils.StringComparator)
	fmt.Println(list.Get(0))
	result := list.Contains("a", "b")
	fmt.Println(result)
	list.Swap(0, 1)
	list.Clear()
	fmt.Println(list.Empty(), list.Size())
	list.Insert(0, "b")
	list.Insert(0, "a")
	it := list.Iterator()
	for it.Next() {
		index, value := it.Index(), it.Value()
		fmt.Println(index, value)
	}

singlylinkedlist로 Add, Remove, Insert, Sort, Contains, Swap, Clear 그리고 Iterator 메소드를 사용할 수 있습니다.

Iterator로 인덱스와 값을 알 수 있습니다.

	set := hashset.New()
	set.Add(1, 2, 2, 3, 4, 5)
	set.Remove(4)
	fmt.Println(set.Values())
	set.Contains(1, 5)
	set.Clear()
	fmt.Println(set.Empty(), set.Size())

hashset으로 Add, Remove,Remove, Contains, Clear 메소드들을 사용할 수 있습니다.

	stack := linkedliststack.New()
	stack.Push(1)
	stack.Push(2)
	fmt.Println(stack.Values())
	_, _ = stack.Peek()
	_, _ = stack.Pop()
	fmt.Println(stack.Values())
	stack.Clear()
	fmt.Println(stack.Empty(), stack.Size())

linkedliststack으로 Push, Peek, Pop 메소드들을 사용할 수 있습니다.

	hashMap := hashmap.New()
	hashMap.Put(1, "x")
	hashMap.Put(2, "b")
	hashMap.Put(1, "a")
	fmt.Println(hashMap.Values(), hashMap.Keys())
	hashMap.Remove(1)
	hashMap.Clear()
	fmt.Println(hashMap.Empty(), hashMap.Size())

hashmap으로 Put, Remove 등의 메소드들을 사용할 수 있습니다.

	tree := avltree.NewWithIntComparator()
	tree.Put(1, "a")
	tree.Put(2, "b")
	tree.Put(3, "c")
	tree.Put(4, "d")
	tree.Put(5, "e")
	fmt.Println(tree)
	fmt.Println(tree.Values())
	it2 := tree.Iterator()
	for it2.Next() {
		key, value := it2.Key(), it2.Value()
		fmt.Println(key, value)
	}
	tree.Clear()
	fmt.Println(tree.Empty(), tree.Size())
}

avltree로 Put, Remove 그리고 Iterator 메소드를 사용할 수 있으며,

Iterator로 키와 값을 알 수 있습니다.

Written on August 14, 2019