ホームページ > バックエンド開発 > Golang > Golang を使用して単純なスタックを実装する方法

Golang を使用して単純なスタックを実装する方法

PHPz
リリース: 2023-04-03 13:38:49
オリジナル
707 人が閲覧しました

コンピュータ サイエンスでは、スタックは重要なデータ構造です。スタックは「後入れ先出し」(Last In First Out) データ アクセス方法を適切に実装できるため、コードで広く使用されています。

Go 言語 (Golang) は、その効率的なメモリ割り当てとガベージ コレクション メカニズムにより、多くの開発者に選ばれています。この記事では、Golangを使った簡単なスタックの実装方法を紹介します。

Golang では、スライスを使用してスタックを実装できます。スライスは、長さを自動的に調整できる動的配列であり、スタック データ構造に非常に適しています。

以下は単純なスタック構造です。

type Stack struct {
    data []int
}
ログイン後にコピー

data は整数型を保持するスライスです。

次に、この構造に 3 つのメソッド (PushPop、および Peek) を追加できます。 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート