見出し画像

Goでスタックを実装しよう!

スタックは、LIFO(Last In, First Out) 方式でデータを管理するデータ構造です。プログラミングにおいて、スタックは非常に基本的なデータ構造であり、再帰処理やブラウザの履歴、文字列操作などでよく使われます。この記事では、Goを使ってスタックをゼロから実装し、その使い方や応用例を紹介します。

1. スタックの基本操作

スタックには次の基本操作があります

  1. push: 要素を追加する。

  2. pop: 最後に追加した要素を取り出す。

  3. isEmpty: スタックが空かどうかを確認する。

2. スタックの実装

Goで配列を使い、スタックを簡単に作ることができます。
stack.goというファイルにプログラムを書きましょう。

package main

// Stack型の定義
type Stack struct {
    items []rune
}

// Pushメソッド
func (s *Stack) Push(element rune) {
    s.items = append(s.items, element)
}

// Popメソッド
func (s *Stack) Pop() (rune, bool) {
    if s.IsEmpty() {
        return ' ', false
    }
    element := s.items[len(s.items)-1]
    s.items = s.items[:len(s.items)-1]
    return element, true
}

// IsEmptyメソッド
func (s *Stack) IsEmpty() bool {
    return len(s.items) == 0
}

3. スタックの使い方

スタックを使って、文字列を逆順にするプログラムを書いてみましょう。
main.goというファイルにプログラムを保存します。

package main

import "fmt"

// 文字列を逆順にする関数
func reverseString(str string) string {
    stack := Stack{}

    for _, char := range str {
        // スタックに文字を追加する
        stack.Push(char)
    }

    reversed := make([]rune, 0, len(str))

    for !stack.IsEmpty() {
        if char, ok := stack.Pop(); ok {
            // スタックが空になるまで文字を取り出す
            reversed = append(reversed, char)
        }
    }

    return string(reversed)
}

func main() {
    fmt.Println(reverseString("Golang"))
}

4. 実行する

Goの環境構築は、こちらを確認してください。

下記のコマンドで、プログラムを実行します

go run main.go stack.go

gnaloG と表示されれば成功です!

まとめ

スタックはシンプルですが、文字列操作や括弧チェックなど多くの場面で使われます。Goを使えば、簡単に実装して応用できます。ぜひ試してみてください!

いいなと思ったら応援しよう!