Apakah ada struktur data yang sudah ada yang berukuran tetap, dan akan mendorong elemen terlama / terakhir keluar jika elemen baru dimasukkan?


20

Saya mencari struktur data yang akan mendorong keluar elemen terlama / terakhir jika elemen baru dimasukkan. Sebagai contoh, biarkan Dmewakili struktur. Dberisi 3 elemen dari Number Dnilai default tipe akan diinisialisasi ke 1, 2dan 3.

D=[1,2,3]

Jika a Numberyang berisi nilai 5dimasukkan ke dalam D, 3akan didorong keluar, sementara 1dan 2digeser ke kanan.

D=[5,1,2]

Hal pertama yang terlintas dalam pikiran adalah array, tetapi definisi tersebut tidak termasuk perilaku mendorong.


Ya tidak ada struktur data built-in tetapi sederhana untuk diimplementasikan menggunakan daftar yang ditautkan dengan daftar tertaut, bukan?
Pengguna Tidak Ditemukan

1
Bagaimana dengan menggunakan pembungkus yang mewarisi dari antrian? Lalu Anda menambahkan metode void push_replace(T val) { pop(); push(val); }.
Francesco Dondi

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

1
Pasti ada sekarang: Anda hanya mendefinisikannya secara tidak resmi; mungkin Anda harus bertanya apakah itu terkenal, memiliki antarmuka yang disepakati secara umum dan apakah implementasi tersedia (bukan yang terakhir adalah masalah besar).
PJTraill

@valbaca Saya berpikir tentang C ++ di mana pop()tidak mengembalikan apa pun karena masalah dengan stack unwinding dalam kasus pengecualian menyalin objek yang kompleks, jadi Anda seharusnya menggunakannya front()sebelum jika Anda membutuhkannya sebelum membuang. Tapi tentu saja, jika Anda tidak peduli tentang pengecualian, jalan Anda bisa lebih baik.
Francesco Dondi

Jawaban:


44

Antrian ukuran tetap sering diterapkan menggunakan apa yang oleh beberapa orang disebut bundar buffer . Jika Anda menghapus perlindungan agar tidak penuh, Anda mendapatkan perilaku yang diinginkan.

Tentu saja, tidak ada dorongan yang sebenarnya akan terjadi dalam array - itu akan terlalu mahal - tetapi akan terlihat seperti itu dari luar.


Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Raphael
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.