Stack dan Queue
Kompleksitas Operasi
Contoh Implementasi Stack
package main
import (
"errors"
"fmt"
)
// Stack menggunakan slice sebagai underlying storage
type Stack struct {
items []int
}
// Push menambahkan elemen ke top stack
// Kompleksitas Waktu: O(1) amortized - slice di Go otomatis expand
// Kompleksitas Ruang: O(1) per operasi
func (s *Stack) Push(value int) {
s.items = append(s.items, value)
}
// Pop menghapus dan mengembalikan elemen dari top
// Kompleksitas Waktu: O(1)
// Kompleksitas Ruang: O(1)
func (s *Stack) Pop() (int, error) {
if s.IsEmpty() {
return 0, errors.New("stack is empty")
}
// Ambil elemen terakhir
index := len(s.items) - 1
value := s.items[index]
// Hapus elemen terakhir dengan slicing
s.items = s.items[:index]
return value, nil
}
// Peek melihat elemen top tanpa menghapus
// Kompleksitas Waktu: O(1)
// Kompleksitas Ruang: O(1)
func (s *Stack) Peek() (int, error) {
if s.IsEmpty() {
return 0, errors.New("stack is empty")
}
return s.items[len(s.items)-1], nil
}
// IsEmpty mengecek apakah stack kosong
func (s *Stack) IsEmpty() bool {
return len(s.items) == 0
}
// Size mengembalikan jumlah elemen
func (s *Stack) Size() int {
return len(s.items)
}Studi Kasus: Valid Parentheses
Contoh Implementasi Queue
Studi Kasus: Implement Queue using Stacks
Penjelasan Kompleksitas Queue using Stacks
Last updated