요약

  • 선입후출, 마지막에 추가된 데이터가 가장 먼저 제거되는 방식의 자료 구조이다.

내용

특징

  • 선입후출(LIFO)구조의 자료 구조이다.
  • 마지막에 추가된 데이터가 가장 먼저 제거되는 방식이다.

주요 연산

  • 삽입(Push)
  • 삭제(Pop)
  • 확인(Peek)

사례

구현체

package main
 
import "fmt"
 
type Stack struct {
	elements []int
}
 
// Push: 요소 추가
func (s *Stack) Push(value int) {
	s.elements = append(s.elements, value)
}
 
// Pop: 스택에서 요소 제거 및 반환
func (s *Stack) Pop() (int, bool) {
	// 스택이 비어있는 경우
	if len(s.elements) == 0 {
		return 0, false
	}
	// 맨 위 요소 저장
	value := s.elements[len(s.elements)-1]
	// 맨 위 요소 제거
	s.elements = s.elements[:len(s.elements)-1]
	return value, true
}
 
// Peek: 맨 위 요소 확인
func (s *Stack) Peek() (int, bool) {
	if len(s.elements) == 0 {
		return 0, false // 스택이 비어있는 경우
	}
	return s.elements[len(s.elements)-1], true
}
 
// IsEmpty: 스택이 비어있는지 확인
func (s *Stack) IsEmpty() bool {
	return len(s.elements) == 0
}
 
func main() {
	s := Stack{}
 
	s.Push(1)
	s.Push(2)
	s.Push(3)
 
	fmt.Println("Stack Status", s.elements)
 
	if top, ok := s.Peek(); ok {
		fmt.Println("Peek:", top)
	}
 
	for !s.IsEmpty() {
		value, _ := s.Pop()
		fmt.Println("Pop:", value)
	}
 
	fmt.Println("Is stack empty?", s.IsEmpty())
}
  • 배열을 참조하는 자료 구조인 Slice를 사용하여 구현

참고