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
| 配列ベース | 連結リストベース | |
|---|---|---|
| 利点 | アクセスの効率性 | 動的サイズ |
| シンプルな実装 | メモリの無駄がない | |
| 挿入と削除が容易 | ||
| 欠点 | 固定サイズ | メモリオーバーヘッド |
| メモリの断片化 | アクセス効率が低い |