• Tidak ada hasil yang ditemukan

Implementasi Queue dengan Circular Array

Dalam dokumen Modul Struktur Data 2016.pdf (Halaman 30-37)

Ala satu variasi array adalah array yang bentuknya melingkar (circual array). Artinya array dapat diakses mulai dari sembarang indeks(indeks awal) karah indeks terakhir(maksimum indeks), lalu memutar ke indeks pertama hingga kembali ke indeks awal. Circular array adalah array yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling bersebelahan  jika array tersebut masih kosong. Jumlah data yang dapat ditampung oleh array ini adalah besarnya ukuran array dikurangi 1. Misalnya besar array adalah 8, maka  jumlah data yang dapat ditampung adalah 7.

Dengan circular array, meskipun posisi terakhir telah dipakai, elemen baru tetap dapat ditambahkan pada posisi pertama jika posisi pertama dalam keadaan kosong. Jika akhir = MAX dan awal = 1, nilai head dan Tagil mencapai maksimum, maka akan dikembalikan ke posisi awal. Operasi-operasi yang terdapat pada circular array tidak jauh berbeda dengan operasi pada linear array.

Aturan-aturan dalam queue yang menggunakan circular array adalah :

1. Proses penghapusan dilakukan dengan cara nilai depan(front) ditambah 1 : depan += 1

2. Proses penambahan elemen sama dengan linear array yaitu nilai belakang ditambah 1 : belakang += 1

3. Jika depan = maks dan ada elemen yang akan dihapus, maka nilai depan = 1

4. Jika belakang = maks dan depan tidak 1, maka jika ada elemen yang akan ditambahkan, nilai belakang = 1

5. Jika hanya tinggal 1 elemen di queue (depan = belakang), dan akan dihapus maka depan diisi 0 dan belakang diisi dengan 0 (queue kosong)

Contoh :

3.4.1 Pendeklarasian Queue

Setiapqueue memiliki elemen-elemen(field) berupa posisi depan,  posisi belakang, elemen antrian, dan elemen maksimal.

3.4.2 Inisialisasi Queue

Inisialisasi queue adalah proses pemberian nilai 0 untuk field depan dan  belakang dari queue dan juga pemberian nilai maks ke maks_queue yang menunjukan banyaknya maksimal data dalam queue. Karena dalam bahasa C++ elemen sebuah array dimulai dengan 0 maka proses inisialisasi nilai depan dan belakang bukan 0 tetapi -1 sehingga ketika ada proses  penambahan elemen (enqueue) akan bernilai 0 sehingga elemen tersebut

akan disimpan dalam elemen antrian pada posisi 0. 3.4.3 Fungsi IsEmpty

Suatu queue yang menggunakan circular array dapat dikatakan kosong  jika nilai yang menunjuk posisi depan atau belakang mempunyai nilai 0.

Implementasi dalam bahasa C++, perbandingan posisi depan atau belakang dilakukan bukan dengan angka 0 tetapi angka -1 karena angka 0 menunjukan elemen pertama dari array.

3.4.4 Fungsi IsFull

Suatu queue akan disebut penuh jika terjadi 2 hal yaitu jika nilai depan mempunyai nilai 1 dan posisi belakang sama dengan maks_queue atau jika posisi depan sama dengan posisi belakang +1. Jika salah satu dari 2 hal tersebut terjadi maka fungsi penuh mempunyai nilai true dan  jika tidak terjadi 2 hal tersebut maka fungsi bernilai false. Implementasi dalam bahasa C++ agar beda karena posisi awal array bukan 1 tapi 0 dan  posisi terakhir data adalah maks_queue-1 bukan maks_queue.

3.4.5 Fungsi EnQueue

Proses enqueue data hanya bisa dilakukan jika queue tidak kosong. Ada  beberapa hal yang harus diperhatikan ketika akan melakukan enqueue pada

circular array, diantaranya adalah :

1. Kondisi ketika queue masih kosong. Jika ini terjadi, maka posisi depan dan belakang bernilai 0.

2. Ketika ketika nilai belakang sama dengan maks_queue, maka posisi  belakang adalah 0. Ini terjadi ketika posisi depan lebih besar dari 0

(pernah ada dequeue).

3. Ketika nilai belakang masih lebih kecil dari maks_queue maka posisi  belakang ditambah 1 : belakang+=1;

Dari ketentuan-ketentuan di atas dapat diimplementasikan dalam  bahasa C++ dengan mengganti beberapa hal yaitu posisi perbandingan /  pengisian dengan nilai 0 diganti dengan perbandingan / pengisian dengan nilai -1 dan perbandingan dengan nilai maks_queue diganti dengan maks_queue-1 Itu disebabkan karena dalam bahasa C++ array dimulai dari 0.

3.4.6 Fungsi DeQueue

Proses dequeue hanya bisa dilakukan jika queue dalam keadaan tidak kosong. Ada beberapa kondisi yang harus diperhatikan ketika dequeue elemen queue yaitu :

Kondisi ketika posisi depan sama dengan posisi belakang (queue hanya memiliki 1 elemen) maka nilai depan dan belakang diisi dengan 0 (queue kosong).

Jika posisi depan sama dengan posisi maks_queue maka posisi depan  berpindah ke 1.

Selain itu, posisi depan ditambah dengan 1 : depan=depan+1 Ketika kita mengimplementasikannya dalam bahasa C++, maka ada  beberapa hal yang harus diganti adalah semua pengisian/perbandingan dengan angka 1 diganti dengan 0 (karena elemen array dalam bahasa C++ adalah 0), serta ketika ada perbandingan/pengisian dengan nilai 0 diganti dengan -1 dan perbandingan/pengisian dengan nilai maks_queue diganti dengan maks_queue-1.

Contoh : Program Circular Array #include <iostream> using namespace std; typedef struct{ int data[5]; int head; int tail; }Queue; Queue antri; typedef struct { int baru; }struk; struk variabel; void input(){ if(antri.tail== 5-1) { cout<<"Antrian Penuh"; } else {

cout<<"Data yang akan di Push = ";cin>>variabel.baru; antri.tail++;

antri.data[antri.tail]=variabel.baru;

cout<<"Head = "<<antri.head<<" Tail = "<<antri.tail; } } void out(){ if(antri.tail < antri.head) { cout<<"Antrian Kosong"; } else { //koreksi

cout<<"Data yang akan di keluar = "<<antri.data[antri.head]<<endl;

antri.head = antri.head+1;

cout<<"Head = "<<antri.head<<" Tail = "<<antri.tail; } } void cetak(){ if(antri.tail==-1) { cout<<"Antrian Kosong"; } else{ cout<<endl;

cout<<"Data dalam antrian adalah : "<<endl<<endl; //koreksi for(int i=antri.head;i<=antri.tail;i++){ cout<<antri.data[i]<<" "; } } } int main(){

int pil, baru, i; //koreksi

antri.tail=-1; cout<<"====================================="<<endl; cout<<"= Q u e u e ( A N T R I A N ) ="<<endl; cout<<"====================================="<<endl; do{ cout<<endl; cout<<"*************************************"<<endl; cout<<"1. Masukkan Data"<<endl;

cout<<"2. Keluarkan Data"<<endl; cout<<"3. Cetak Data"<<endl;

cout<<"Silahkan Masukan Pilihan Anda : ";cin>>pil; cout<<endl; switch (pil){ case 1: { input(); break; } case 2: { out(); break; } case 3: { cetak(); break; } default : { cout<<"---"<<endl;

cout<<" Maaf, Tidak ada dalam pilihan "<<endl; cout<<"---"<<endl; } } }

while(pil>=1 && pil<= 3); }

Tugas !

Buatlah program stack dengan syarat :

a) User memasukkan data berupa NIM dan Nama.  b) User dapat mengeluarkan data.

c) Kosongkan data. d) Cetak data

BAB III

SORTING

3.1 Pendahuluan

Pengurutan data dalam struktur data sangat penting terutama untuk data yang  bertipe data numerik ataupun karakter

Pengurutan dapat dilakukan secara ascending (urut naik) maupun descending (urut turun)

Pengurutan (sorting) adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga secara teratur menurut aturan tertentu. Contoh :

Data Acak : 9 1 0 5 78 31 55 10 Ascending : 0 1 5 9 10 31 55 78 Descending : 78 55 31 10 9 5 1 0

Dalam dokumen Modul Struktur Data 2016.pdf (Halaman 30-37)

Dokumen terkait