Stack

スタック(Stack)は後入あといれ先出さきだし(LIFO - Last In First Out)のデータ構造こうぞうである。

Basic Operations

  • Push - 要素ようそをスタックの先頭せんとう追加ついか
  • Pop - スタックの先頭せんとう要素ようそ削除さくじょしてかえ
  • Peek - スタックの先頭せんとう要素ようそ参照さんしょう削除さくじょしない)
  • IsEmpty - スタックがからかどうかを確認かくにん
  • Size / Length - スタックない要素ようそすうかえ
  • Search - 特定とくてい要素ようそ検索けんさく
  • Display / PrintStack - スタックの内容ないよう表示ひょうじ

Applications

  • Reverse a word - 文字列もじれつ反転はんてん
  • Browsers - ブラウザのもどる/すす機能きのう
  • Compilers - 2 + 4 / 5 * (7 - 9)のようなしきあたい計算けいさんするため、しき前置ぜんちまたは後置こうち形式けいしき変換へんかん

Implementation

Stack implemented by Array
type Array[T any] struct {
    elements []T
}
Stack implemented by LinkedList
type Node struct {
    Val  any
    Next *Node
}

type Stack struct {
    top    *Node
    length int
}
Stack implemented by Std List
import "container/list"

type StackList[T any] struct {
    stack *list.List
}

Comparison

配列はいれつベース連結れんけつリストベース
利点りてんアクセスの効率性こうりつせい動的どうてきサイズ
シンプルな実装じっそうメモリの無駄むだがない
挿入そうにゅう削除さくじょ容易ようい
欠点けってん固定こていサイズメモリオーバーヘッド
メモリの断片化だんぺんかアクセス効率こうりつひく