Sobes.tech
Junior — Middle

Dinamik bir dizinin ilk öğesini sabit zamanda etkili bir şekilde nasıl kaldırabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da dinamik diziler dilimler (slices) ile temsil edilir. Bir dilimin ilk öğesini kaldırmak genellikle kaydırmalı dilimleme kullanılarak yapılır:

slice = slice[1:]

Bu işlem, öğeleri kopyalamadığı için ve sadece göstericileri ve dilimin uzunluğunu değiştirdiği için, sabit zamanda gerçekleştirilir.

Ancak, orijinal diziyi korumak ve kullanılmayan belleğin birikmesini önlemek istiyorsanız, halka tamponu (ring buffer) veya başlangıç ve bitiş indeksleriyle uygulanan bir kuyruk kullanabilirsiniz. Bu, diğer öğeleri kaydırmadan ilk öğeyi O(1) zamanında verimli şekilde kaldırmanıza olanak tanır.

Halka tamponu örneği:

type RingBuffer struct {
    data []int
    start int
    size  int
}

func (r *RingBuffer) PopFront() int {
    if r.size == 0 {
        panic("buffer is empty")
    }
    val := r.data[r.start]
    r.start = (r.start + 1) % len(r.data)
    r.size--
    return val
}

Bu nedenle, ilk öğeyi sabit zamanda kaldırmak için, bu işlemi destekleyen bir veri yapısı kullanmak, doğrudan dilim kullanmaktan daha iyidir.