laporan praktikum modul ix
TRANSCRIPT
LAPORAN PRAKTIKUMALGORITMA PEMROGRAMAN & STRUKTUR DATA
MODUL IX
DISUSUN OLEHNAMA : DEVINIM : 2012081043KELAS : TI2012A
LABORATORIUM KOMPUTERFAKULTAS ILMU KOMPUTERUNIVERSITAS KUNINGAN
2012
I. PEMBAHASAN
A. Dasar Teori
Definisi Queue
Jika diartikan secara harafiah, queue berarti antrian, queue merupakan
salah satu contoh aplikasi dari pembuatan double linked list yang cukup
sering kita temui dalam kehidupan sehari-hari, misalnya saat Anda
mengantri di loket untuk membeli tiket. Istilah yang cukup sering dipakai
seseorang masuk dalam sebuah antrian adalah enqueue. Dalam suatu
antrian, yang datang terlebih dahulu akan dilayani lebih dahulu. Istilah yang
sering dipakai bila seseorang keluar dari antrian adalah dequeue. Walaupun
berbeda implementasi, struktur data queue setidaknya harus memiliki
operasi-operasi sebagai berikut :
EnQueue Memasukkan data ke dalam antrian
DeQueue Mengeluarkan data terdepan dari antrian
Clear Menghapus seluruh antrian
IsEmpty Memeriksa apakah antrian kosong
IsFull Memeriksa apakah antrian penuh
Implementasi Queue dengan Linear Array
Linear Array
Linear array adalah suatu array yang dibuat seakan-akan merupakan
suatu garis lurus dengan satu pintu masuk dan satu pintu keluar. Berikut ini
diberikan deklarasi kelas Queue Linear sebagai implementasi dari Queue
menggunakan linear array. Dalam prakteknya, anda dapat menggantinya
sesuai dengan kebutuhan Anda. Data diakses dengan field data, sedangkan
indeks item pertama dan terakhir disimpan dalam field Head dan Tail.
Konstruktor akan menginisialisasikan nilai Head dan Tail dengan -1 untuk
menunjukkan bahwa antrian masih kosong dan mengalokasikan data
sebanyak MAX_QUEUE yang ditunjuk oleh Data. Destruktor akan
mengosongkan antrian kembali dan mendealokasikan memori yang
digunakan oleh antrian.
Operasi-Operasi Queue dengan Linear Array
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong
atau sudah berisi data. hal ini dilakukan dengan mengecek apakah tail
bernilai -1 atau tidak. Nilai -1 menandakan bahwa queue masih kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau
masih bisa menampung data dengan cara mengecek apakah nilai tail sudah
sama dengan jumlah maksimal queue. Jika nilai keduanya sama, berarti
queue sudah penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen dalam
queue.
DeQueue
Fungsi DeQueue berguna untuk mengambil sebuah elemen dari queue.
Operasi ini sering disebut juga serve. Hal ini dilakukan dengan cara
memindahkan sejauh satu langkah ke posisi di depannya sehingga otomatis
elemen yang paling depan akan tertimpa dengan elemen yang terletak di
belakangnya.
Clear
Fungsi Clear berguna untuk menghapus semua lemen dalam queue
dengan jalan mengeluarkan semua elemen tersebut satu per satu hingga
queue kosong dengan memanfaatkan fungsi DEQueue.
Implementasi Queue dengan Circular Array
Circular Array
Circular array adalah suatu array yang dibuat seakan-akan merupaka
sebuah lingkaran dengan titik awal (head) dan titik akhir (tail) saling
bersebelahan jika array tersebut masih kosong. Posisi head dan tail pada
gambar diatas adalah bebas asalkan saling bersebelahan. Berikut ini
diberikan deklarasi kelas Queue Circular sebagai implementasi circular
array. Dalam prakteknya, Anda dapat menggantikanny sesuai dengan
kebutuhan Anda. Data diakses dengan field data, sedangkan indeks itemn
pertama dan terakhir disimpan dalam field Head dan Tail. Konstruktor akan
menginisialisasi nilai Head dan Tail dengan 0 dan MAX-QUEUE-1 untuk
menunjukkan bahwa antrian masih kosong dan mengalokasikan data
sebanyak MAX-QUEUE yang ditunjuk oleh Data. destruktor akan
mengosongkan antrian kembali dan mendealokasikan memori yan
digunakan oleh antrian.
Operasi-Operasi Queue dengan Circular Array
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah Queue masih kosong
atau sudah berisi. Hal ini dilakukan dengan mengecek apakah tail masih
terletak bersebelahan dengan head dan tail lebih besar dari head atau tidak.
Jika benar, maka queue masih kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau
masih bisa menampung data dengan cara mengecek apakah tempat yang
masih kosong tinggal satu atau tidak (untuk membedakan dengan empty
dimana semua tempat kosong). Jika benar berarti queue penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam
queue tail dan head mula-mula bernilai nol (0).
DeQueue
DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini
dilakukan dengan cara memindahkan posisi head satu langkah ke belakang.
Implementasi Queue dengan Double Linked List
Selain menggunakan array, queue juga dapat dibuat dengan linked list.
Metode linked list yang digunakan adalah double linked list.
Operasi-operasi Queue dengan Double Linked List
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong
atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head
masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih
kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau
masih bisa menampung data dengan cara mengecek apakah Jumlah Queue
sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue
sudah penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam
queue (head dan tail mula-mula meunjukkan ke NULL).
DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari
queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak
paling depan (head).
B. Praktikum
Praktikum 1
1. Menulis source kode Program C++
Melakukan Kompilasi
Pilih menu project, lalu pilih submenu compile atau denngan menekan
ALTF9. Maka akan muncul seperti gambar di bawah ini.
Menjalankan Program
Menjalankan program dengan cara pilih menu Debug, lalu submenu Run
atau dengan cara menekan CTRL+F9. Maka akan muncul gambar seperti di
bawah ini.
Kita input pilihan yang pertama yaitu “I” dan menginputkan angka dalam
queue, maka tampilanya adalah sebagai berikut:
Setelah tekan enter lalu input any key atau tombol apapun pada keyboard,
lalu masukan pilihan yang kedua yaitu “D”, maka tampilannya sebagai
berikut ini:
Lakukan hal yang sama seperti perintah diatas, lalu kita masukan pilihan
yang ketiga yaitu “P”, maka hasilnya sebagai berikut:
Lakukan seperti perintah diatas dan input pilihan yang ke terakhir yaitu
“E”, maka tampilannya sebagai berikut:
2. Analisa dan buat pembahasannya
Sintaks diatas adalah sintaks ANTRIAN yang direpresentasikan dalam
bentuk struck, operasi yang akan dilakukan pada sintaks diatas adalah :
- Insert = untuk memasukan nilai antrian.
- Delete= untuk menghapus nilai antrian.
- Print_list= untuk menampilkan nilai antrian
- Dan operasi – operasi dasar lainya.
Dan dalam sintaks diatas telah dikelompokan operasi operasinya agar lebih
mudah dipahami, dimana terdiri atas :
- Implementasi operasi Queue
- Insert
- Delete
- Print_list
- Show_working
- Main
1. Implementasi Operasi Queue
Pembahasan:
Terdiri dari 2 header yakni iostream dan conio. Terdiri dari 1 kelas yakni
Linked_list_Queue, dan badan dari kelas itu terdiri dari 1 struct yang diprivate
dan diberi nama node, dan dalam struct tersebut terdapat 2 variabel.
Selanjutnya dideklarasikan 4 variabel/karkter antrian yang bersifat pointer,
dan ke 4 ini menunjuk nilai struct node. Sehingga ke 4 ini memiliki variabel yang
sama.
Selanjutnya dideklarasikan 5 fungsi, yaitu fungsi link_list_Queue, fungsi
delete, fungsi insert, fungsi print_list dan fungsi show_working.
Fungsi pertama dideklarasikan yang dimana variabel rear dan front memiliki
nilai NULL(mengisi)
#include<iostream.h>#include<conio.h>class Linked_list_Queue{ private: struct node { int data; node *next; }; node*rear; node*entry; node*print; node*front;
public: Linked_list_Queue( ); void Delete( ); void Insert( ); void print_list( ); void show_working( );};Linked_list_Queue::Linked_list_Queue( ){ rear=NULL; front=NULL;}
2. Insert()
Pembahasan:
Sintaks selanjutnya yakni fungsi Enqueu yakni memasukan elemen antrian.
Dideklarasikan kembali variabel baru yakni num yang bertipe integer. Dan dalam
sintaks disamping pun ada kondisi if yang kondisinya rear==NULL artinya jika
nilai rear tersebut terisi maka badan if akan dijalankan. Dan arti dari badan if itu
yakni memasukan nilai kedalam program.
Sehingga jika kondisi if tersebut terisi maka nilai akan masuk pada program
dan variabel num, dan akan menampilkan output “SUDAH MASUK DALAM
QUEUE” dan “press any kae tu return to menu” artinya tolong tekan tombol
apapun untuk kembali kelayar utama. Inilah fungsi dari next dan null.
void Linked_list_Queue::Insert(){ int num; cout<<"\n\n\n\n\n\t Masukan angka dalam Queue : ";cin>>num; entry=new node; if(rear==NULL) {
entry->data=num;entry->next=NULL;rear=entry;front=rear;
} else {
entry->data=num;entry->next=NULL;rear->next=entry;rear=entry;
} cout<<"\n\n\t *** "<<num<<" sudah masuk dalam Queue."<<endl; cout<<"\n\n\n\t\t Press any key to return to Menu."; getch();}
3. Delete()
Pembahasan:
Sintaks selanjutnya yakni fungsi Dequeu dalam antrian atau untuk
mengeluarkan/menghapus elemen paling depan dari antrian. Sebagai contoh jika
kita masukan elmenen 1,2,3,4,5, lalu kita jalankan fungsi ini maka secara otomatis
angka 1 akan terhapus dari antrian karna angka 1 adalah element terdepan. dan
jika setiap element telah dikeluarkan maka fungsi akan menampilkan “Queue is
empty” artinya nilai queue telah kosong seperti sintaks yang telah dibuat diatas.
Namun jika hanya 1 element yang ingin dihapus maka sintkas akan kembali
kemenu utama dan melakukan instruksi lainya.
4. Print_list
void Linked_list_Queue::Delete(){ if(front==NULL)
cout<<"\n\n\n\t *** Error : Queue is empty.\n"<<endl; else { int deleted_element=front->data; node *temp; temp=front; front=front->next; delete temp; cout<<"\n\n\n\t *** "<<deleted_element<<" dihapus dari Queue."<<endl; } cout<<"\n\n\n\t\t Press any key to return to Menu."; getch();}
void Linked_list_Queue::print_list(){ print=front;
if(print!=NULL) cout<<"\n\n\n\n\n\t Angka angka yang ada dalam Queue : \n"<<endl; else cout<<"\n\n\n\n\n\t *** Tidak ada yang ditampilkan."<<endl; while(print!=NULL) { cout<<"\t"<<print->data<<endl; print=print->next; } cout<<"\n\n\n\t\t Pres any key to return to menu."; getch();}
Pembahasan:
Sintaks diatas adalah sintkas untuk menampilkan elemen-element antrian
yang telah di masukan. Sehingga print=front arinya print=depan. Jadi mulai dari
element depan yang akan ditampilkan. Angka yang ditampilkan akan berbentuk
horizontal atau kebawah karna di dalam sintaks penampilannya itu digunkan \n.
Namun jika data telah terhapus semua maka akan menmpilkan fungsi else. “ tidak
ada yang ditampilkan”.
5. Show_working
Pembahasan:
Sintaks selanjutnya yakni pembuatan tampilan untuk operasi-operasi yang
telah kita buat sebelumnya, disini di deklarasikan kembali variabel key yang harus
diberi nilai karna disanan key=NULL, dan dalam sintaks diatas pun ada fungsi
GOTOXY yang berfungsi untuk menentukan jarak karakternnya. Yang terdiri dari
baris dari jumlah spasi dan enter dalam pixel.
void Linked_list_Queue::show_working(){ char Key=NULL; do {
clrscr();gotoxy(5,5);cout<<"**** Implementation of Linked List as a Queue
******"<<endl;gotoxy(10,8);cout<<"Pilih salah satu menu: "<<endl;
gotoxy(15,10);cout<<"- Press \'I\' to Masukan data dalam Queue"<<endl;gotoxy(15,12);cout<<"- Press \'D\' to Hapus data dari Queue"<<endl;gotoxy(15,14);cout<<"- Press \'P\' to Tampilkan data dari Queue"<<endl;gotoxy(15,16);cout<<"- Press \'E\' to Exit"<<endl;
Pembahasan:
Fungsi diatas untuk ketentuan pemilihan operasi dimana if yang pertama
yakni (int(key)=27 jumlah keyboard yang bisa di gunakan hanya terdiri dari 27
tuts. Sehingga ada tombol yang tidak bisa kita tekan. Dan else if lainnya hanya
untuk memberikan kebebasan jika kita menekan huruf kapital dan kecil. Disana
telah diatur sintaksnya. Dan setiap else disana telah ditentukan tampilantampilan
yang akan dijalankan.
6. Main()
Pembahasan:
Sintaks diatas adalah induknya dari semua fungsi sebelumnya. Dan dalam
fungsi utama disana didefunisikan kembali elemen class sebelumnya dengan nama
obj. Digunakan untuk pemanggilan sturct untuk show_working
Input:gotoxy(10,20);cout<<"";gotoxy(10,20);cout<<"Masukan Pilihan : ";
Key=getche();if(int(Key)==27 || Key=='e' || Key=='E') break;
else if(Key=='i' || Key=='I')Insert();
else if(Key=='d' || Key=='D')Delete();
else if(Key=='p' || Key=='P')print_list();
elsegoto Input;
}while(1);
}
int main(){ Linked_list_Queue obj; obj.show_working();
return 0;}
3. Ubah source kode diatas menggunakan preprocessor include.h dan untuk
setiap operasi queue gunakan bentuk umum sesuai dengan dasar teori
praktikum.
Sourec kode pada Turbo C++
Melakukan kompilasi
Menjalankan program
Pembahasan:
Program diatas sama seperti program sebelumnya, hanya saja dalam
program ini menggunkana header stdio. Sehingga fungsi yang digunakan
untuk program tersebut adalah printf dan scanf. Dalam header stdio digunakan
juga kode format untuk menampilkan keluaran sesuai dengan variable yang
digunakan.
II. TUGAS
1. Tambahkan function untuk mencari suatu elemen dalam queue
2. Tambahakan function untuk mengedit suatu elemen dalam queue
Jawaban no 1 dan no 2:
Menulis source kode Program C++
Pembahasan:
Program diatas menggunakan header conio dan stdio, dan mempunyai
konstanta MAX 8, yang artinya jumlah antrian max 8. Dalam sintaks tersebut
mempunya 3 variabel yang bertipe char. Operasi yang digunakan dalam
antrian tersebut adalah create, isempty, isfull, enqueue, dequeue, clear dan
tampil. Untuk menampilkan suatu keluaran digunakan fungsi printf dan untuk
menginput digunaka fungsi scanf yang berada pada file header stdio. Dan
untuk menghapus pada layar digunakan fungsi clrscr yang berada pada file
header conio. Perulangan yang di gunakan dalam program tersebut adalah
while do.
3. Carilah nilai total, rata-rata, terbesar dan terkecil
Mencari nilai total dan rata-rata
Melakukan Kompile
Menjalankan program
Pembahasan:
Program diatas adalah program untuk menghitung jumlah dan rata-rata.
Header yang digunakan adalah stdio dan conio. Program diatas mempunyai
konstanta max 8 yang artinya maksimal jumlah data yang diinputkan adalah 8.
Dalam program tersebut mempunyai 5 variabel yang bertipe integer dan float.
Sitem input output yang digunakan adalah printf dan scanf yang berada pada
file header stdio. Kode format yang digunakan adalah %f dan %d sesuai
dengan variable yang telah di deklarasikan sebelumnya.
Mencari nilai terbesar dan terkecil
Source kode pada C++
Melakukan kompilasi
Menjalankan Program
Pembahasan:
Program diatas adalah program untuk mencari nilai terbesar dan terkecil.
Header yang digunakan adalah stdio. Dalam program tersebut terdapat fungsi
tambahan yaitu double terbesar dan double terkecil. Dan untuk mencari nilai
terbesar atau terkecil digunakan struktur pemilihan if then else. Dalam fungsi
utama yaitu int main terdapat I/O printf untuk menampilkan hasil keluaran dan
scanf untuk menginputkan data.
III. KESIMPULAN
Dari data diatas dapa saya simpulkan bahwa Karakteristik yang
membedakan queue (antrian) dari stack adalah cara menyimpan dan mengambil
data dengan struktur first in first out (FIFO). Hal ini berarti elemen pertama yang
ditempatkan pada queue adalah yang pertama dipindahkan. Selain itu, Elemen –
element dasarnya adalah :
1. Elemen antrian yaitu item-item data yang terdapat di elemen antrian
2. Front (elemen terdepan dari antrian)
3. Rear (elemen terakhir dari antrian)
4. Jumlah elemen pada antrian (Count)
5. Status antrian
Operasi dasar Queue terbagi menjadi :
1. Create Queue
2. Empty Queue
3. Full Queue
4. Enqueue
5. Dequeue
6. Clear Queue
IV. Daftar Pustaka
www.google.com
Modul Pembelajaran, Algoritma Pemrograman dan Struktur Data