컨테이너 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

다양한 데이터를 다룰 때 자료구조는 필수적으로 사용하게 됩니다. 자료구조를 일일이 구현하기에는 시간과 노력이 많이 듭니다. Go 언어는 기본 자료구조를 패키지로 제공하므로 편리하게 데이터를 다룰 수 있습니다.

Go 언어에서 제공하는 자료구조는 다음과 같습니다.

  • 연결 리스트: 각 노드를 한 줄로 연결한 자료구조입니다.
  • 힙: 이진 트리(Binary tree)를 활용한 자료구조입니다. 부모 노드에서 자식 노드가 대소관계를 이루며 정렬이 되는 것이 특징입니다.
  • 링: 각 노드가 원형으로 연결된 자료구조입니다.

연결 리스트 사용하기

다음은 container/list 패키지에서 제공하는 연결 리스트 함수입니다.

  • func New() *List: 연결 리스트 생성
  • func (l *List) PushBack(v interface{}) *Element: 연결 리스트의 맨 뒤에 데이터 추가
  • func (l *List) Front() *Element: 연결 리스트의 맨 앞 데이터를 가져옴
  • func (l *List) Back() *Element: 연결 리스트의 맨 뒤 데이터를 가져옴

연결 리스트를 생성한 뒤 데이터를 넣고, 각 노드를 순회해보겠습니다.

package main

import (
	"container/list"
	"fmt"
)

func main() {
	l := list.New() // 연결 리스트 생성
	l.PushBack(10)  // 연결 리스트에 데이터 추가
	l.PushBack(20)
	l.PushBack(30)

	fmt.Println("Front ", l.Front().Value) // 연결 리스트의 맨 앞 데이터를 가져옴
	fmt.Println("Back ", l.Back().Value)   // 연결 리스트의 맨 뒤 데이터를 가져옴

	for e := l.Front(); e != nil; e = e.Next() { // 연결 리스트의 맨 앞부터 끝까지 순회
		fmt.Println(e.Value)
	}
}

실행 결과

Front  10
Back  30
10
20
30

Go 언어의 연결 리스트는 이중 연결 리스트(Doubly linked list)입니다. 따라서 앞, 뒤 양쪽 방향으로 순회할 수 있습니다.

list.New 함수로 연결 리스트를 생성한 뒤 PushBack 등의 함수로 데이터를 추가합니다. 다음은 연결 리스트에서 사용할 수 있는 함수입니다.

함수 설명
PushBack 맨 뒤에 노드를 추가합니다.
PushFront 맨 앞에 노드를 추가합니다.
PushBackList 맨 뒤에 다른 리스트를 붙입니다.
PushFrontList 맨 앞에 다른 리스트를 붙입니다.
InsertAfter 특정 노드 뒤에 노드를 추가합니다.
InsertBefore 특정 노드 앞에 노드를 추가합니다.
MoveAfter 노드를 특정 노드 뒤로 옮깁니다.
MoveBefore 노드를 특정 노드 앞으로 옮깁니다.
MoveToBack 노드를 맨 뒤로 옮깁니다.
MoveToFront 노드를 맨 앞으로 옮깁니다.
Len 리스트의 노드 개수(길이)를 구합니다.
Remove 특정 노드를 삭제합니다.

표 55-1 연결 리스트 함수

l.Front().Value, l.Back().Value와 같이 리스트에서 맨 앞, 맨 뒤의 노드에서 값을 가져옵니다. 다음과 같이 for 반복문을 사용하면 맨 앞부터 끝까지 리스트를 순회할 수 있습니다.

for e := l.Front(); e != nil; e = e.Next() { // 연결 리스트의 맨 앞부터 끝까지 순회
	fmt.Println(e.Value)
}


그림 55-1 연결 리스트


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015