Go 언어 list 컨테이너 대하여 배워보기

오늘은 Go 언어 컨테이너에 포함되있는 list(더블 링크드리스트)를 작성하면서 배워보려 합니다.

package main

import (
	"container/list"
	"fmt"
)

list를 구현하기 위한 패키지를 import해줍니다.

func main() {
    list := list.New()

list를 생성하기 위해 New()로 할당해줍니다.

	list.PushBack(1)
	list.PushBack(2)
	list.PushBack(3)
	for i := list.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
    }

pushback으로 새로운 내용을 리스트의 뒤에 넣을 수 있습니다.

그리고 내용을 확인하기 위해 for문으로 리스트의 처음부터 마지막까지 nil이 나올 때까지 탐색해줍니다.

	fmt.Println("======")

	list.PushFront(1)
	list.PushFront(2)
	list.PushFront(3)
	for i := list.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}

pushfront로 새로운 내용을 리스트의 앞에 넣을 수 있습니다.

이 역시 내용을 확인하기 위해 for문으로 리스트의 처음부터 마지막까지 nil이 나올 때까지 탐색해줍니다.

	fmt.Println("======")

	tmp1 := list.PushBack(5)
	list.InsertAfter(4,tmp1)
	for i := list.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}

InsertAfter를 이용하여 리스트에 할당한 값의 뒤에 특정 값을 넣을 수 있습니다.

	fmt.Println("======")

	tmp2 := list.PushBack(5)
	list.InsertBefore(6,tmp2)
	for i := list.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
}

InsertBefore를 이용하여 리스트에 할당한 값의 앞에 특정 값을 넣을 수 있습니다.

이번 포스트에서 모든 입력 값\을 정수로 했지만, 리스트의 값을 나타내는 타입이 interface{}로 되어있기 떄문에 모든 타입을 사용할 수 있습니다.

Written on October 3, 2018