Go(Golang) - 스택(Stack)기본 설명
오늘은 Golang을 활용해서 필수 공부 항목 중 자료구조의 스택 구조와 동작을 직접 구현해보도록
하겠습니다.
스택은 선입후출 및 후입선출 등으로 이해할 수 있습니다. 스택에 대한 설명은 검색을 해보시면 자세한
내용이 방대하게 검색되므로 생략하도록 하겠습니다.
개발자 코딩 테스트에서 스택 구현, 면접에서 스택의 용도 등을 묻는 인터뷰가 빈번한 것 같습니다 .
각종 온라인 코딩 테스트 IDE에서도 Golang 코딩을 점점 지원하고 있는 추세입니다.
아래와 같이 Go를 사용해서 스택구조를 구현해보겠습니다.
가능하면 소스코드를 다운로드 받으셔서 IDE에서 반드시 실행해보시길 권장드립니다.
Go 관련 포스팅 : Golang 관련
Go 관련 포스팅 : Golang 관련
Go(Golang) - 스택(Stack) 자료구조 구현 상세 설명
Golang의 구조체를 활용해서 정말 간단하게 노드(Node) 구성 후 슬라이스(Slice) 타입을 통해서 각 노드들의
삽입(Push), 삭제(Pop), Peek(읽기) 구조를 가지고 있는 스택을 구현했습니다.
문서 하단에 실제 소스를 꼭 다운로드 후 직접 실행 및 결과 확인을 추천드립니다.
go_stack.go
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 package main import ( "fmt") //스택에 사용 할 노드 선언type Node struct { Value int} //값 출력을 위한 String 함수 선언func (n *Node) String() string { return fmt.Sprint(n.Value)} //스택(LIFO)func NewStack() *Stack { return &Stack{}} //스택 구조 본체 선언type Stack struct { nodes []*Node count int} //데이터 삽입func (s *Stack) Push(n *Node) { s.nodes = append(s.nodes[:s.count], n) s.count++} //데이터 빼내기func (s *Stack) Pop() *Node { if s.count == 0 { return nil } s.count-- return s.nodes[s.count]} func main() { //Golang으로 구현하는 자료구조 : 스택(Stack) //스택 선언 s := NewStack() //5개 데이터 Push s.Push(&Node{1}) s.Push(&Node{2}) s.Push(&Node{3}) s.Push(&Node{4}) s.Push(&Node{5}) //5개 데이터 Pop 및 값 출력 fmt.Println(s.Pop()) fmt.Println(s.Pop()) fmt.Println(s.Pop()) fmt.Println(s.Pop()) fmt.Println(s.Pop())} cs
- 8번 라인 : 스택(Stack) 노드 선언 - 구조체
- 13번 라인 : 스택의 데이터 출력 함수- 22번 라인 : 스택의 본체 선언 - 슬라이스 타입(참조형)- 29번 라인 : 스택 데이터 삽입(Push)- 35번 라인 : 스택 데이터 빼기(Pop)- 47-61번 라인 : 스택 선언 후 -> 삽입 -> 출력 실행 코드
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package main import ( "fmt" ) //스택에 사용 할 노드 선언 type Node struct { Value int } //값 출력을 위한 String 함수 선언 func (n *Node) String() string { return fmt.Sprint(n.Value) } //스택(LIFO) func NewStack() *Stack { return &Stack{} } //스택 구조 본체 선언 type Stack struct { nodes []*Node count int } //데이터 삽입 func (s *Stack) Push(n *Node) { s.nodes = append(s.nodes[:s.count], n) s.count++ } //데이터 빼내기 func (s *Stack) Pop() *Node { if s.count == 0 { return nil } s.count-- return s.nodes[s.count] } func main() { //Golang으로 구현하는 자료구조 : 스택(Stack) //스택 선언 s := NewStack() //5개 데이터 Push s.Push(&Node{1}) s.Push(&Node{2}) s.Push(&Node{3}) s.Push(&Node{4}) s.Push(&Node{5}) //5개 데이터 Pop 및 값 출력 fmt.Println(s.Pop()) fmt.Println(s.Pop()) fmt.Println(s.Pop()) fmt.Println(s.Pop()) fmt.Println(s.Pop()) } | cs |
- 8번 라인 : 스택(Stack) 노드 선언 - 구조체
- 13번 라인 : 스택의 데이터 출력 함수
Golang - i/o 패키지의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Golang - i/o 패키지의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Go(Golang) - 스택(Stack) 자료구조 구현 예제 실행 화면
아래 이미지로 스택(Stack)구조의 데이터 입출력 실행 화면을 확인하실 수 있습니다.
실제 실행 화면
마무리
이번 포스팅에서는 Golang을 활용해서 스택을 구현해 보았습니다.
코드 컨밴션이 통일되어 있고 그 밖에 많은 장점을 가지고 있는 언어로써 최근에 활용도가 높아지고 있는
Go언어 예제를 당분간 다양한 예제를 만들어 보면서 다뤄보도록 하겠습니다.
다음 시간에는 큐(Queue)를 구현하는 내용을 포스팅하도록 하겠습니다.
소스코드 다운로드 : go_stack.zip
'언어 > Go' 카테고리의 다른 글
Go(Golang) - ioutil 활용 파일 읽기(Read), 쓰기(Write) 예제 및 소스파일 (2) | 2018.07.06 |
---|---|
Go(Golang) - 웹 서버(Web Server) Logging 구현(Http) 예제 및 소스파일 (0) | 2018.06.29 |
Go(Golang) - 웹 서버(Web Server) 기초 구현(Http) 예제 및 소스파일 (2) | 2018.06.27 |
Go(Golang) - 맥(Mac) 개발 환경 설치 및 기본 설정 정리(2) (0) | 2018.03.30 |
Go(Golang) - 맥(Mac) 개발 환경 설치 및 기본 설정 정리(1) (5) | 2018.03.27 |