![見出し画像](https://assets.st-note.com/production/uploads/images/167333241/rectangle_large_type_2_77502bd072523be6dd7e188b44457598.jpg?width=1200)
Goでスタックを実装しよう!
スタックは、LIFO(Last In, First Out) 方式でデータを管理するデータ構造です。プログラミングにおいて、スタックは非常に基本的なデータ構造であり、再帰処理やブラウザの履歴、文字列操作などでよく使われます。この記事では、Goを使ってスタックをゼロから実装し、その使い方や応用例を紹介します。
1. スタックの基本操作
スタックには次の基本操作があります
push: 要素を追加する。
pop: 最後に追加した要素を取り出す。
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を使えば、簡単に実装して応用できます。ぜひ試してみてください!