Minggu, 18 Oktober 2026
05:25 WIB
TERKINI
Universitas Teknokrat Indonesia Mahasiswa Universitas Teknokrat Raih Empat Gelar Bergengsi di Kompetisi Bahasa Inggris Nasional Pesisir Barat Pesisir Barat Jalin Kemitraan Strategis, Dorong Akses Pendidikan Tinggi Terjangkau Universitas Teknokrat Indonesia Teknokrat dan PMD Pesawaran Bersinergi Wujudkan Desa Digital Berkelanjutan Humaniora Memperkuat Hak Konstitusional Perempuan Adat untuk Kedaulatan Bangsa Pesawaran Lampung Dorong Rantai Pasok Hijau Kakao, Kopi, Lada ke Pasar Global Pesawaran Pengalihan Status Guru PPPK ke Penuh Waktu: DPRD Pesawaran Soroti Isu Penempatan Lampung Timur Gotong Royong Fantastis: Warga Bandar Agung Himpun Rp15 Miliar untuk Jalan Desa Bandar Lampung JNE Lampung Sukses Ubah Komplain Milea Cutting Jadi Kemitraan Strategis Bandar Lampung Jadwal Padat Pemprov Lampung 16 Oktober 2026: Pisah Sambut Kapolda dan Rapat Strategis Bandar Lampung Lampung Waspada: BMKG Deteksi 212 Titik Panas di Sepuluh Kabupaten Universitas Teknokrat Indonesia Mahasiswa Universitas Teknokrat Raih Empat Gelar Bergengsi di Kompetisi Bahasa Inggris Nasional Pesisir Barat Pesisir Barat Jalin Kemitraan Strategis, Dorong Akses Pendidikan Tinggi Terjangkau Universitas Teknokrat Indonesia Teknokrat dan PMD Pesawaran Bersinergi Wujudkan Desa Digital Berkelanjutan Humaniora Memperkuat Hak Konstitusional Perempuan Adat untuk Kedaulatan Bangsa Pesawaran Lampung Dorong Rantai Pasok Hijau Kakao, Kopi, Lada ke Pasar Global Pesawaran Pengalihan Status Guru PPPK ke Penuh Waktu: DPRD Pesawaran Soroti Isu Penempatan Lampung Timur Gotong Royong Fantastis: Warga Bandar Agung Himpun Rp15 Miliar untuk Jalan Desa Bandar Lampung JNE Lampung Sukses Ubah Komplain Milea Cutting Jadi Kemitraan Strategis Bandar Lampung Jadwal Padat Pemprov Lampung 16 Oktober 2026: Pisah Sambut Kapolda dan Rapat Strategis Bandar Lampung Lampung Waspada: BMKG Deteksi 212 Titik Panas di Sepuluh Kabupaten
Penyangga melingkar

Penyangga melingkar

Bagikan:
250px-Circular_buffer.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail
Sebuah cincin yang menggambarkan penyangga melingkar secara konseptual. Ilustrasi ini menunjukkan bahwa penyangga tidak memiliki ujung yang nyata. Namun, karena memori tidak bersifat melingkar secara fisik, representasi linear umumnya lebih sering digunakan seperti pada contoh di bawah.

Dalam ilmu komputer, penyangga melingkar, antrean melingkar, penyangga siklis, atau penyangga cincin adalah struktur data yang menggunakan sebuah penyangga tunggal dengan ukuran terdefinisi yang menghubungkan ujung memori ke awal memori, sehingga seolah tak memiliki ujung.[1]

Gambaran umum

500px-Circular_Buffer_Animation.gif?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail
Sebuah penyangga melingkar papan tik berukuran 24-bita. Ketika pointer tulis hendak mencapai akhir pointer baca—karena mikroprosesornya tidak merespon—penyangga berhenti merekam penekanan tombol. Beberapa komputer akan membunyikan suara beep.

Sebuah penyangga melingkar awalnya kosong dan memiliki panjang yang terdefinisi. Diagram berikut memiliki tujuh elemen penyangga:

250px-Circular_buffer_-_empty.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Asumsikan bahwa 1 ditulis di tengah penyangga melingkar (posisi awalnya tidak penting):

250px-Circular_buffer_-_XX1XXXX.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Lalu, asumsikan bahwa dua elemen lain ditambahkan ke penyangga melingkar— 2 & 3—setelah elemen 1:

250px-Circular_buffer_-_XX123XX.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Bila dua elemen dihapus, maka dua elemen tertua dalam penyangga melingkar akan dihapus. Struktur data ini menggunakan logika FIFO (first in, first out) yang menyatakan bahwa data yang lebih dahulu masuk akan lebih dahulu keluar. Pada contoh di atas, karena 1 & 2 adalah elemen yang lebih dahulu memasuki penyangga melingkar, maka mereka yang akan dihapus — menyisakan elemen 3.

250px-Circular_buffer_-_XXXX3XX.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Jika penyangga memiliki tujuh elemen (sesuai panjang penyangga di atas), maka penyangga dianggap penuh:

250px-Circular_buffer_-_6789345.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Apabila penyangga melingkar sudah penuh dan dilakukan penulisan data setelahnya, maka data yang paling tua akan ditimpa. Pada contoh kita, dua elemen tambahan yakni A & B ditambahkan sehingga menimpa elemen 3 & 4.

250px-Circular_buffer_-_6789AB5.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Alternatif lain untuk mencegah penimpaan data adalah mengembalikan pesan error atau memunculkan pengecualian. Perihal apakah data akan ditimpa atau tidak bergantung kepada aplikasi yang menggunakan penyangga melingkar.

Terakhir, jika kita menghapus dua elemen, maka yang terhapus adalah 5 & 6. Hal ini karena 5 & 6 menjadi elemen tertua pada penyangga melingkar, sehingga hasil akhirnya adalah:

250px-Circular_buffer_-_X789ABX.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Penggunaan

Karakteristik paling berguna dari penyangga melingkar adalah fakta bahwa elemen di dalamnya tidak harus disusun ulang ketika kita melakukan penghapusan data (berbeda dengan penyangga nonmelingkar yang mengharuskan kita menggeser seluruh elemen). Dalam kata lain, penyangga melingkar cocok sebagai penyangga FIFO (first in, first out), sementara penyangga nonmelingkar cocok sebagai penyangga LIFO (last in, first out).

Penyangga sirkuler merupakan strategi implementasi yang baik untuk antrean dengan ukuran terdefinisi. Namun, jika kita ingin mengubah ukuran penyangga melingkar, maka kita perlu menggeser memori yang cukup boros. Bila kita perlu mengubah ukuran antrean, maka pendekatan senarai berantai bisa jadi lebih cocok.

Pada situasi tertentu, penyangga melingkar yang menimpa data lama bisa digunakan, misalnya dalam kasus multimedia. Bila penyangga digunakan sebagai penyangga berbatas di masalah produsen-konsumen, maka produsen (misal generator audio) mungkin menginginkan penimpaan data jika konsumen (misal kartu audio) tidak mampu mengimbangi.

Mekanisme penyangga melingkar

250px-Hardware_circular_buffer_implementation_patent_us3979733_fig4.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail
Implementasi penyanggka melingkar di perangkat keras, paten AS 3979733.

Sebuah penyangga melingkar dapat diimplementasikan dengan sebuah pointer dan tiga integer:[2]

  • alamat mula penyangga di memori
  • kapasitas penyangga (panjang)
  • indeks awal penyangga (baca)
  • indeks akhir penyangga (tulis)

Diagram berikut menunjukkan penyangga hampir penuh dengan panjang = 7:

250px-Circular_buffer_-_XX123XX_with_pointers.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Diagram berikut menunjukkan penyangga penuh yang telah ditimpa:

250px-Circular_buffer_-_6789AB5_with_pointers.svg.png?utm_source=id.wikipedia.org&utm_campaign=parser&utm_content=thumbnail

Pada awal dibuat, indeks awal dan indeks akhir akan diatur menjadi 0. Kemudian, penulisan penyangga melingkar akan menulis data ke indeks akhir dan indeks akhir digeser ke posisi penyangga berikutnya. Penyangga melingkar akan membaca elemen dari indeks awal kemudian digeser ke posisi penyangga berikutnya.

Informasi mengenai indeks awal dan akhir saja tidak cukup untuk menentukan apakah penyangga penuh atau kosong jika seluruh slot digunakan.[3] Namun, hal tersebut dapat diatasi dengan membatasi penggunaan buffer hingga sejumlah Panjang - 1.[4] Dalam kasus ini, penyangga dianggap kosong jika indeks awal dan akhir bernilai sama dan penuh jika ukuran terisinya Panjang - 1. Solusi lainnya adalah dengan menyimpan integer yang bertambah nilainya ketika operasi tulis dilakukan dan berkurang jika operasi baca dilakukan. Pengecekan dapat dilakukan dengan membaca nilai integer tadi, jika bernilai 0 maka kosong, sementara jika bernilai sama dengan panjang maka penuh.[5]

Berikut adalah contoh implementasi penyangga melingkar sederhana. Fungsi put() menempatkan data di penyangga, sementara fungsi get() mengambil data dari penyangga. Kedua fungsi akan mengurus kapasitas penyangga:

#include<stdio.h>

enum{N=10};// Elemen N dari penyangga melingkar

intbuffer[N];// Ingat bahwa ukuran aslinya adalah N-1, perhatikan fungsi put()
intwriteIndx=0;
intreadIndx=0;

intput(intitem)
{
if((writeIndx+1)%N==readIndx)
{
// penyangga penuh, hindari luberan
return0;
}
buffer[writeIndx]=item;
writeIndx=(writeIndx+1)%N;
return1;
}

intget(int*value)
{
if(readIndx==writeIndx)
{
// penyangga kosong
return0;
}

*value=buffer[readIndx];
readIndx=(readIndx+1)%N;
return1;
}

intmain()
{
// uji penyangga melingkar
intvalue=1001;
while(put(value++));
while(get(&value))
printf("read %d\n",value);
return0;
}

Referensi

  1. ↑ Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), Operating Systems: Three Easy Pieces [Chapter: Condition Variables, figure 30.13] (PDF), Arpaci-Dusseau Books
  2. ↑ Liu, Z.; Wu, F.; Das, S.K. (2021). Wireless Algorithms, Systems, and Applications: 16th International Conference, WASA 2021, Nanjing, China, June 25–27, 2021, Proceedings, Part II. Lecture Notes in Computer Science. Springer International Publishing. hlm. 117. ISBN 978-3-030-86130-8. Diakses tanggal 2023-09-04.
  3. ↑ Chandrasekaran, Siddharth (2014-05-16). "Implementing Circular/Ring Buffer in Embedded C". Embed Journal. EmbedJournal Team. Diarsipkan dari versi aslinya tanggal 11 Februari 2017. Diakses tanggal 14 Agustus 2017.{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link)
  4. ↑ Circular buffers kernel.org
  5. ↑ Morin, Pat. "ArrayQueue: An Array-Based Queue". Open Data Structures (in pseudocode). Diarsipkan dari versi aslinya tanggal 31 Agustus 2015. Diakses tanggal 7 November 2015.{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link)
Konten disalin dari Wikipedia Bahasa Indonesia (lisensi CC BY-SA) Lihat versi asli di Wikipedia

Rekomendasi Pilihan