Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

Code Habit

golang ) 연결 리스트 사용하기 본문

카테고리 없음

golang ) 연결 리스트 사용하기

코드베어 2020. 6. 17. 08:25

"container/list" 패키지를 사용하면 go에서 연결리스트를 사용할 수 있다.

 

다음은 "container/list"에서 연결리스트를 사용하기 위해 제공하는 함수이다.

  • func New() *List: 연결 리스트 생성
  • func (I *List) PushBack(v interface{}) *Element : 맨 뒤에 노드 추가
  • func (I *List) PushFront(v interface{}) *Element : 맨 앞에 노드 추가
  • func (I *List) PushBackList(other* List) : 맨 뒤에 다른 리스트를 붙임
  • func (I *List) PushFrontList(other* List) : 맨 앞에 다른 리스트를 붙임
  • func (I *List) InsertAfter(v interface{}, mark *Element) *Element : 특정 노드 뒤에 노드 추가
  • func (I *List) InsertBefore(v interface{}, mark *Element) *Element: 특정 노드 앞에 노드 추가
  • func (I *List) Len() int : 리스트의 노드 개수(길이)를 구함
  • func (I *List) Remove(e *Element) interface{} : 특정 노드를 삭제

사용 예제

// main.go
package main
 
import (
    "container/list"
    "fmt"
)
 
func main() {
    ll := list.New()
 
    ll.PushBack(1)
    ll.PushBack("이")
    ll.PushBack("삼")
    ll.PushBack(true)
 
    e := ll.Back()        // 리스트의 맨 뒤 노드를 가져옴
    ll.Remove(e)        // 위 노드를 삭제
 
    size := ll.Len()
    fmt.Println(size)    // 3
 
    fmt.Println("=====Front to Back=====")
    for e := ll.Front(); e != nil; e = e.Next() {
        fmt.Printf("%T : %v\n", e.Value, e.Value)
    }

 
    fmt.Println("=====Back to Front=====")
    for e := ll.Back(); e != nil; e = e.Prev() {
        fmt.Printf("%T : %v\n", e.Value, e.Value)
    }
}

list.New() 함수를 통해 ll 리스트를 만들고 데이터를 뒤쪽으로 차례로 넣는다. 여기서 주목할 건 한가지 자료형만 넣는 것이 아니라 여러가지 자료형을 하나의 리스트에 넣을 수 있단 것이다. ll.Back() 함수로 리스트의 맨 뒤 노드를 가져오고 ll.Remove() 함수로 맨뒤 노드를 삭제한다. 그리고 ll.len() 함수로 리스트의 개수를 출력한 뒤 front -> back, back -> frnot 순서로 리스트 노드의 타입과 값을 출력한다.

 

출력 값

3
=====Front to Back=====
int : 1
string : 이
string : 삼
=====Back to Front=====
string : 삼
string : 이
int : 1