Anda di halaman 1dari 12

Modul 5

Queue

A . PEMBAHASAN Queue merupakan kebalikan dari stack jika pada stack merupakan suatu struktur data dimana data yang terakhir masuk maka data itulah yang pertama kali akan keluar, maka pada queue data yang pertama masuk data itu pula yang pertama keluar dan data terakhir akan keluar paling belakang. Ada enam implementasi dasar linked list dalam program, yaitu :
1. membuat queue 2. mengecek apakah queue kosong 3. mengecek apakah queue penuh 4. masuk kedalam queue 5. keluar dari queue 6. membaca isi queue

Sebelum itu tentu saja harus diberikan terlebih dulu definisi tipenya, yaitu :
/*definisi type*/ const MAXQUEUE=10; typedef char item_type; struct queue_tag { int top; item_type entry[MAXQUEUE]; } queue_type;

Untuk memanggil bagian program queue tersebut perlu dibuat suatu program utama (main program), contoh implementasi program utama adalah :
/*program void main() { /*alokasi kamus*/ char hasil,pilih; /*body program*/ Create; cout<<"Pilih Menu";endl; cout<<" \n"; cout<<"1. Masuk Antrian "<<endl; cout<<"2. Keluar Antrian "<<endl; cout<<"3. Baca Antrian "<<endl; cout<<"4. Selesai "<<endl; pilih='1'; utama*/

while (pilih=='1'||pilih=='2'||pilih=='3') { cout<<"Pilihan = "; cin>>pilih; switch(pilih) { case '1' : {cout<<"Masukkan Datanya : ";cin>>hasil; MASUK(hasil); }break; case '2' : {KELUAR(hasil); cout<<hasil<<endl; }break; case '3' : Baca_queue(); break; case '4' : cout<<"Selesai"; break; } } getch(); }

B . TUGAS Tulis dan gambarkan ilustrasi untuk masuk ke dan keluar dari queue. Jawaban :

Dari gambar diatas, bisa dilihat bahwa kotak B terletak di atas kotak A dan ada dibawah kotak C. Dari gambar diatas menunjukan bahwa dalam queue hanya bisa mengambil sebuah kotak melalui satu ujung, yaitu bagian bawah. Dari gambar tersebut bisa kita lihat bahwa yang menjadi ujung atas adalah tumpukan E. Jadi jika ada kotak lain yang akan disisipkan (misalnya F), maka kotak tersebut akan diletakan di atas kotak E, dan jika ada kotak yang akan diambil, maka kotak F lah yang paling terakhir diambil. Semacam itulah cara kerja dari queue. Data yang terakhir masuk berarti data tersebut yang terakhir keluar, sedangkan data yang pertama masuk data itu pula yang pertama keluar (First In First Out).

C . KESIMPULAN Prinsip utama dari queue sebenarnya sangat sederhana dan gampang dimengerti, yaitu First In First Out. Atau secara garis besar data yang paling awal masuk (bottom position) adalah data yang paling dulu keluar, sehingga data-data lain yang ada diatasnya yang masuk setelah data tersebut harus mengantri jika ingin keluar.

Modul 6
Single Link List

A . PEMBAHASAN Biasanya pointer dipakai untuk menunjuk variabel dinamis yang bertipe record, dimana record ini mempunyai komponen (field) yang bertipe pointer. Record seperti ini disebut simpul (node). Variabel pointer Link berfungsi sebagai pengait atau penghubung dengan simpul berikutnya, sehingga membentuk suatu untaian yang dinamakan sebagai senarai berantai (Linked List). Ciri senarai berantai adalah terdapat pointer yang berfungsi sebagai pointer kepala (Head) dari senarai berantai. Kemudian pada akhir senarai berantai terdapat pointer yang tidak menunjuk ke simpul yang lain yang disebut NULL (NULL adalah konstanta dalam pointer). Untuk membuat dan menangani truktur data dinamis dibutuhkan alokasi dinamis agar tersedia ruang bagi node node yang ada. Fungsi malloc, free, dan operator sizeof banyak memegang peran dalam alokasi memori dinamis ini. Berikut ini contoh pernyataan linked list berikut ini :
Type stuct node NODE; Typedef NODE *NODEPTR; NODEPTR newPtr = malloc(sizeof(NODE)); newPtr -> info = 15; newPtr -> nextPtr = NULL;

Pemakaian node pada linked list perlu dihapus agar tidak membebani memori program. Fungsi free digunakan untuk menghapus memori yang telah digunakan node yang ditunjuk oleh pointer tertentu. Jadi Free(newPtr); akan menghapus memori tetap node yang ditunjukan oleh newPtr. Ada enam implementasi dasar linked list dalam program, yaitu :
1. deklarasi linked list 2. menciptakan single link list 3. menambahkan simpul link list ke belakang 4. menambahkan simpul baru link list di depan 5. menambahkan simpul baru di tengah link list 6. membaca link list

Untuk memanggil bagian program linked list tersebut perlu dibuat suatu program utama (main program) dan jangan lupa untuk membebaskan memori pada node, contoh implementasi program utama adalah :
/*program utama*/ void main() { List *SingleList=(List*)malloc(sizeof(List)); /*alokasi kamus (deklarasi)*/ char pilih, hasil, data, cari; int tempat; bool ada; /*body program*/ Create(SingleList); pilih='1'; while(pilih=='1'||pilih=='2'||pilih=='3'||pilih=='4') { cout<<"Pilih Menu "<<endl; cout<<"1. Tambah Depan "<<endl; cout<<"2. Tambah Belakang "<<endl; cout<<"3. Tambah Tengah "<<endl; cout<<"4. Baca List "<<endl; cout<<"5. Selesai "<<endl; cout<<"Pilihan = "; cin>>pilih; switch(pilih) { case '1' : {cout<<"Masukkan Datanya : ";cin>>hasil; Tambah_Depan(SingleList,hasil);clrscr(); }break; case '2' : {cout<<"Masukkan Datanya : ";cin>>hasil; Tambah_Belakang(SingleList,hasil);clrscr(); }break; case '3' : {cout<<"Masukkan Datanya : ";cin>>hasil; cout<<"Masukkan posisinya : ";cin>>tempat; Tambah_Tengah(SingleList,hasil,tempat);clrscr(); }break; case '4' : {clrscr();Baca_Maju(SingleList); }break; case '5' : cout<<"Selesai"; break; } } cout<<" Tekan ENTER"; free(SingleList); getch(); }

B . TUGAS Tambahkan program single link list sehingga terdapat menu untuk menghapus dan mencari simpul.

Jawaban :
list *hapus(list *node) { list *del_node ; del_node = node ; if(node == start) { if(start -> next == NULL) return start else { start -> next = node -> next; return start ; } } else { while(node -> selanjutnya == node) node = node -> next ; if(node -> next == last ) node -> next -> next ; free(del_node) ; } return start ; }

C . KESIMPULAN Dengan menggunakan Linked List kita dapat menyimpan suatu data dengan terstruktur sehingga program dapat secara otomatis membuat suatu tempat baru untuk menyimpan suatu data kapan saja diperlukan. Struktur yang dinamis ini mempunyai banyak keuntungan karena banyak elemen yang dengan mudah ditambah atau dikurangi dibanding struktur array yang bersifat statis. Dan juga kita dapat memanipulasi setiap elemen seperti menyisipkan, menghapus dan menambah dapat dilakukan dengan mudah.

Modul 7
Double Link List

A . PEMBAHASAN Prinsip kerja double linked list tidak jauh berbeda dengan single linked list. Perbedaan utamanya setiap node harus menunjuk ke dua arah, yaitu untuk node yang di depan dan dibelakannya. Cara ini menyebabkan double linked list lebih menguntungkan daripada single linked list. Pencarian data dapat dilakukan dari depan atau dari belakang suatu urutan data. Perbedaan utama antara double link list dengan single link list adalah jumlah untaian (list) pada masing-masing node yang ada. Pada double link list node dapat mengaitkan dua node sekaligus sehingga menjadi daftar senarai ganda. Oleh karena node dapat mengait dua node lainnya maka memori yang digunakan pun cukup besar. Pada double link list juga terdapat variabel ponter yang disebut simpul (node) dan berfungsi sebagai pengait atau penghubung dengan simpul berikutnya, sehingga membentuk suatu untaian yang dinamakan sebagai senarai berantai (Linked List) sehingga terdapat pointer yang berfungsi sebagai pointer kepala (Head) dari senarai berantai. Kemudian pada akhir senarai berantai terdapat pointer yang tidak menunjuk ke simpul yang lain yang disebut NULL . Ada lima implementasi dasar linked list dalam program, yaitu :
1. deklarasi linked list 2. menciptakan double link list 3. menambahkan simpul link list ke belakang 4. menambahkan simpul baru di tengah link list 5. membaca link list

Untuk memanggil bagian program linked list tersebut perlu dibuat suatu program utama (main program) dan jangan lupa untuk membebaskan memori pada node, contoh implementasi program utama adalah :

/*program utama*/ void main()

List *DoubleList=(List*)malloc(sizeof(List));

/*alokasi kamus (deklarasi)*/ char pilih, hasil, data, cari; int tempat; bool ada; /*body program*/ Create(DoubleList); pilih='1'; while(pilih=='1'||pilih=='2'||pilih=='3'||pilih=='4') { cout<<"Pilih Menu "<<endl; cout<<"1. Tambah Depan "<<endl; cout<<"2. Tambah Belakang "<<endl; cout<<"3. Baca List "<<endl; cout<<"4. Selesai "<<endl; cout<<"Pilihan = "; cin>>pilih; switch(pilih) { case '1' : {cout<<"Masukkan Datanya : ";cin>>hasil; Tambah_Depan(DoubleList,hasil);clrscr(); }break; case '2' : {cout<<"Masukkan Datanya : ";cin>>hasil; Tambah_Belakang(DoubleList,hasil);clrscr(); }break; case '3' : {clrscr();Baca_List(DoubleList); }break; case '4' : cout<<"Selesai"; break; } } cout<<"Tekan ENTER"; free(DoubleList); getch(); }

B . TUGAS Tambahkan menu untuk menghapus dan mencari simpul dalam double link list. Jawaban :
list *hapus(list *node) { list *del_node ; del_node = node ; if(node == awal) { if(awal -> selanjutnya == NULL) return awal ; else { awal -> selanjutnya = node -> selanjutnya ; awal -> sebelumnya == NULL ; return awal ; } } else {
8

if(node -> selanjutnya) node -> selanjutnya -> sebelumnya = node sebelumnya ; if(node == akhir) { node -> sebelumnya -> selanjutnya == NULL ; akhir = node -> sebelumnya ; } free(node) ; } return start ; }

C . KESIMPULAN Double linked list menggunakan teknik yang sama dengan single linked list. Perbedaan utamanya adalah node double linked list dapat menunjuk ke belakang dan ke depan. Struktur data yang digunakan juga harus diubah dengan menyediakan tempat untuk alamat (pointer) node yang berada di depan dan belakangnya.

Modul 8
Pohon Biner
9

A . PEMBAHASAN Pohon biner (Binary Tree) merupakan pohon yang memiliki ketentuan setiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua child. Berikut ini adalah ilustrasi pohon biner :

Ada sebelas implementasi dasar linked list dalam program, yaitu :


1. deklarasi pohon 2. membuat pohon 3. memeriksa apakah pohon kosong 4. prosedur extract 5. membuat node baru 6. menambah node ke pohon 7. membaca sebuah node 8. mengunjungi pohon secara In Order

(Kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi Right Child)
9. mengunjungi pohon secara Pre Order

(Cetak isi node yang dikunjungi, kunjung Left Child, kunjungi Right Child)

10.

mengunjungi pohon secara Post Order

(Kunjungi Lift Child, kunjungi Right Child, cetak node yang dikunjungi)

10

11.

mencari node tertentu dalam pohon

Untuk memanggil bagian program pohon biner tersebut perlu dibuat suatu program utama (main program) dan jangan lupa untuk membebaskan memori pada node, contoh implementasi program utama adalah :
/*program utama*/ void main() { /*alokasi kamus (deklarasi)*/ Node_type *root=NULL; Node_type *p=root; Node_type *gt=NULL; /*body program*/ string line,word; Item_type info; int counter=0; cout<<"Masukkan jumlah data : ";cin>>counter; for (int i=1; i<=counter; i++) { cout<<"Input angka : "; cin>>info.key; p=root; Node_type* q=MakeNode(info); root=InsertTree(root,q); p=root; Inorder(p,"Root"); } p=root; Inorder(p,"Root"); cout<<endl<<"Preorder"<<endl; Preorder(p,"Root"); p=root; cout<<endl<<"Postorder"<<endl; Postorder(p,"Root"); int card; cout<<endl<<"Cari Apa ? ";cin>>info.key; p=root; p=TreeSearch(p,info.key); if (p) { cout<<"Apa yang dicari : "<<p->info.key<<endl; cout<<"Berada di Posisi : "<<p->info.posisi<<endl; } else cout<<"Tidak ada"; free(root); getch(); }

B . TUGAS Tambahkan menu untuk menghapus node tertentu dalam pohon .


11

Jawaban :
Node_type *hapus(Node_type *node) { Node_type *del_node ; del_node = node ; if(node == awal) { if(awal -> selanjutnya == NULL) return awal ; else { awal -> selanjutnya = node -> selanjutnya ; awal -> sebelumnya == NULL ; return awal ; } } else { if(node -> selanjutnya) node -> selanjutnya -> sebelumnya = node sebelumnya ; if(node == akhir) { node -> sebelumnya -> selanjutnya == NULL ; akhir = node -> sebelumnya ; } free(node) ; } return start ; }

C . KESIMPULAN Binary Tree adalah tree dengan syarat tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Pohon biner terurut adalah bentuk lebih khusus lagi dari pohon biner ini. Tree hanya boleh memiliki paling banyak dua child..

12