Golang

[Golang] 자료구조

GenieLove! 2022. 3. 23. 01:51
728x90
반응형

1.리스트 - 포인터로 연결된 요소

import (
	"container/list"
    "fmt"
)

func main() {
	newList := list.New()//새로운 리스트 생성
    element1 := newList.PushBack(3)//리스트 뒤에 3 요소 추가 [3]
    element2 := newList.PushFront(5)//리스트 앞에 5요소 추가 [5 3]
    newList.InsertBefore(6, element1)//element1객체 앞에 6요소 추가 [5 6 3]
    newList.InsertAfter(7, element2)//element2객체 뒤에 7요소 추가 [5 7 6 3]
    
    for element := v.Front(); element != nil; element := element.Next() {
    	fmt.Print(e.Value, " ")
    }
    
    for element := v.Back(); element != nil; element := element.Prev() {
    	fmt.Print(e.Value, " ")
    }
}

(1)큐 구현

import (
	"container/list"
    "fmt"
)

type Queue struct {//Queue 구조체 정의
	v * list.List
}

func (q *Queue) Push(val interface{}) {//요소 추가
	q.v.PushBack(val)
}

func (q *Queue) Pop() interface{} {//요소 반환하면서 삭제
	front := q.v.Front()
    if front == nil {
    	return nil
    }
    
    return q.v.Remove(front)
}

func NewQueue() *Queue {
	return &Queue{
    	list.New()
    }
}

func main() {
	queue := NewQueue()
    
    for i := 0; i < 5; i++ {
    	queue.Push(i)
    }
    
    v := queue.Pop()
    for v != nil {
    	fmt.Printf("%v -> ", v)
        v = queue.Pop()
    }
}

(2)스택 구현

import (
	"container/list"
    "fmt"
)

type Stack struct {//Stack 구조체 정의
	v *list.List
}

func NewStack() *Stack {
	return &Stack{
    	list.New()
    }
}

func (s *Stack) Push(val interface{}) {//맨 뒤에 요소 추가
	s.v.PushBack(val)
}

func (s *Stack) Pop() interface{} {//맨 뒤 요소 반환
	back := s.v.Back()
    if back == nil {
    	return nil
    }
    return s.v.Remove(back)
}

func main() {
	stack := NewStack()
	for i := 0; i < 5; i++ {
    	stack.Push(i)
    }
    
    val := Stack.Pop()
    
    for val != nil {
    	fmt.Printf("%v -> ", val)
        val = stack.Pop()
    }
}

2.링

import (
	"container/ring"
    "fmt"
)

func main() {
	r := ring.New(4)//요소가 4개인 링 생성
    
    n := r.Len()//링 길이 반환
    
    for i := 0; i < n; i++ {//각각 요소에 값 저장
    	r.Value = 'A' + i
        r = r.Next()
    }
    
    for i := 0; i < n; i++ {//값 출력
    	fmt.Printf("%c ", r.Value)
        r = r.Next()
    }
    
    fmt.Println()
    
    for i := 0; i < n; i++ {//값 출력(역순)
    	fmt.Printf("%c ", r.Value)
        r = r.Prev()
    }
}
728x90
반응형

'Golang' 카테고리의 다른 글

[Golang] Gin-Swagger  (0) 2022.03.30
[Golang] 에러 핸들링  (0) 2022.03.24
[Golang] 함수  (1) 2022.03.21
[Golang] 인터페이스  (0) 2022.03.16
[Golang] 메소드  (0) 2022.03.12