Sabit boyutta olan ve yeni bir eleman eklenirse en eski / son elemanı dışarı itecek mevcut bir veri yapısı var mı?


20

Yeni bir öğe eklenirse en eski / son öğe dışarı itecek bir veri yapısı arıyorum. Örneğin D, yapıyı temsil edelim . Dtürünün Number Dvarsayılan öğelerinin 3 öğesini içerir 1, 2ve 3.

D=[1,2,3]

Bir Eğer Numberdeğer içeren 5sokulur D, 3dışarı itilecek sırasında 1ve 2hemen kaydırılır.

D=[5,1,2]

Akla ilk gelen şey bir dizi olacaktır, ancak tanım itme davranışını içermez.


Peki dahili veri yapısı yok ama iki katına bağlantılı liste bağlantılı liste kullanarak uygulamak basit mi?
Kullanıcı Bulunamadı

1
Bir kuyruktan devralma sarmalayıcı kullanmaya ne dersiniz? Sonra yöntemi ekleyin void push_replace(T val) { pop(); push(val); }.
Francesco Dondi

@FrancescoDondi muhtemelen olmalıT push_replace(T val) { T old = pop(); push(val); return old; }
valbaca

1
Şimdi kesinlikle var: sadece gayri resmi olarak tanımladınız; belki de tanınmış olup olmadığını, genel olarak kabul edilmiş bir arayüze sahip olup olmadığını ve uygulamaların mevcut olup olmadığını sormalısınız (sonuncusu büyük bir sorun değildir).
PJTraill

@valbaca Ben pop()karmaşık bir nesneyi kopyalama istisnaları durumunda yığın gevşeme ile ilgili sorunlar nedeniyle hiçbir şey döndürür C ++ düşünüyorum , bu yüzden front()atmadan önce ihtiyacınız varsa daha önce kullanmanız gerekiyor . Ancak, istisnaları umursamıyorsanız, yolunuz daha iyi olabilir.
Francesco Dondi

Yanıtlar:


44

Sabit boyutlu kuyruklar genellikle bazı kişilerin dairesel arabellekler dediği şey kullanılarak uygulanır . Korumanın dolmasına karşı korumayı kaldırırsanız, istediğiniz davranışı elde edersiniz.

Tabii ki, hiçbir fiili dizide olacak itme - o çok pahalı olur - ancak edecektir bakmak dışarıdan böyle.


Yorumlar uzun tartışmalar için değildir; bu sohbet sohbete taşındı .
Raphael
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.