Golang을 사용하여 간단한 스택을 구현하는 방법

PHPz
풀어 주다: 2023-04-03 13:38:49
원래의
698명이 탐색했습니다.

컴퓨터 과학에서 스택은 중요한 데이터 구조입니다. 스택은 "Last In First Out"(Last In First Out) 데이터 액세스 방법을 잘 구현할 수 있으므로 코드에서 널리 사용됩니다.

Go 언어(Golang)는 효율적인 메모리 할당 및 가비지 수집 메커니즘으로 인해 많은 개발자의 선택이 되었습니다. 이번 글에서는 Golang을 이용하여 간단한 스택을 구현하는 방법을 소개하겠습니다.

Golang에서는 슬라이스를 사용하여 스택을 구현할 수 있습니다. 슬라이스는 길이가 자동으로 조정될 수 있는 동적 배열이므로 스택 데이터 구조에 매우 적합합니다.

다음은 간단한 스택 구조입니다.

type Stack struct {
    data []int
}
로그인 후 복사

data는 정수 유형을 보유하는 슬라이스입니다. data是一个保存整数类型的切片。

接下来,我们可以为该结构体添加三个方法:PushPopPeekPush方法用于向堆栈中添加元素,Pop方法用于从堆栈中删除元素,Peek

다음으로 이 구조에 Push, PopPeek의 세 가지 메서드를 추가할 수 있습니다. Push 메서드는 스택에 요소를 추가하는 데 사용되고, Pop 메서드는 스택에서 요소를 제거하는 데 사용되며, Peek 메서드는 다음과 같습니다. 요소를 삭제하지 않고 스택 상단에 가져오는 데 사용됩니다.

요소를 추가하는 코드는 다음과 같습니다.

func (s *Stack) Push(n int) {
    s.data = append(s.data, n)
}
로그인 후 복사
요소를 삭제하는 코드는 다음과 같습니다.

func (s *Stack) Pop() (int, bool) {
    if len(s.data) == 0 {
        return 0, false
    }
    lastIdx := len(s.data) - 1
    last := s.data[lastIdx]
    s.data = s.data[:lastIdx]
    return last, true
}
로그인 후 복사
최상위 요소를 가져오는 코드는 다음과 같습니다.

func (s *Stack) Peek() (int, bool) {
    if len(s.data) == 0 {
        return 0, false
    }
    lastIdx := len(s.data) - 1
    last := s.data[lastIdx]
    return last, true
}
로그인 후 복사
여기서 함수 구문을 사용합니다. 필요한 결과를 반환하기 위해 여러 값을 반환하고 작업이 성공 식별자인지 여부를 반환합니다.

이제 다음과 같이 스택을 생성하고 해당 요소를 추가, 제거 및 볼 수 있습니다.

stack := Stack{}
stack.Push(1)
stack.Push(2)
stack.Push(3)

val, ok := stack.Peek()
if ok {
    fmt.Println(val) // 3
}

val, ok = stack.Pop()
if ok {
    fmt.Println(val) // 3
}

val, ok = stack.Pop()
if ok {
    fmt.Println(val) // 2
}
로그인 후 복사
위 코드는 스택을 생성하고 스택에 1, 2, 3을 순서대로 추가합니다. 그런 다음 스택의 맨 위 요소(3)를 살펴보고 마지막 요소(3)를 제거한 다음 마지막 요소(2)를 다시 제거합니다.

이 글을 통해 간단한 스택 구조와 Golang에서 구현되는 방법을 소개했습니다. 스택은 알고리즘 및 소프트웨어 개발에 널리 사용되는 중요한 데이터 구조입니다. 스택에 대한 기본 지식과 Golang에서의 구현을 익히면 스택을 더 잘 이해하고 사용하는 데 도움이 됩니다. 🎜

위 내용은 Golang을 사용하여 간단한 스택을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿