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*/

1

sedangkan data yang pertama masuk data itu pula yang pertama keluar (First In First Out). Dari gambar diatas menunjukan bahwa dalam queue hanya bisa mengambil sebuah kotak melalui satu ujung. } } getch(). }break. Semacam itulah cara kerja dari queue. break. Dari gambar tersebut bisa kita lihat bahwa yang menjadi ujung atas adalah tumpukan E. TUGAS Tulis dan gambarkan ilustrasi untuk masuk ke dan keluar dari queue. 2 . case '4' : cout<<"Selesai". dan jika ada kotak yang akan diambil. cin>>pilih.cin>>hasil. } B . switch(pilih) { case '1' : {cout<<"Masukkan Datanya : ". MASUK(hasil). cout<<hasil<<endl. Jadi jika ada kotak lain yang akan disisipkan (misalnya F). case '3' : Baca_queue(). }break. Jawaban : Dari gambar diatas. maka kotak F lah yang paling terakhir diambil. case '2' : {KELUAR(hasil). bisa dilihat bahwa kotak B terletak di atas kotak A dan ada dibawah kotak C. maka kotak tersebut akan diletakan di atas kotak E. yaitu bagian bawah.while (pilih=='1'||pilih=='2'||pilih=='3') { cout<<"Pilihan = ". break. Data yang terakhir masuk berarti data tersebut yang terakhir keluar.

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

PEMBAHASAN Biasanya pointer dipakai untuk menunjuk variabel dinamis yang bertipe record. menambahkan simpul link list ke belakang 4. akan menghapus memori tetap node yang ditunjukan oleh newPtr. dimana record ini mempunyai komponen (field) yang bertipe pointer. 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. newPtr -> nextPtr = NULL. deklarasi linked list 2. menambahkan simpul baru link list di depan 5. Jadi Free(newPtr). menambahkan simpul baru di tengah link list 6. dan operator sizeof banyak memegang peran dalam alokasi memori dinamis ini. free. newPtr -> info = 15. menciptakan single link list 3. sehingga membentuk suatu untaian yang dinamakan sebagai senarai berantai (Linked List). Kemudian pada akhir senarai berantai terdapat pointer yang tidak menunjuk ke simpul yang lain yang disebut NULL (NULL adalah konstanta dalam pointer). Typedef NODE *NODEPTR. yaitu : 1.Modul 6 Single Link List A . Record seperti ini disebut simpul (node). Ciri senarai berantai adalah terdapat pointer yang berfungsi sebagai pointer kepala (Head) dari senarai berantai. membaca link list 4 . Variabel pointer Link berfungsi sebagai pengait atau penghubung dengan simpul berikutnya. Berikut ini contoh pernyataan linked list berikut ini : Type stuct node NODE. NODEPTR newPtr = malloc(sizeof(NODE)). Untuk membuat dan menangani truktur data dinamis dibutuhkan alokasi dinamis agar tersedia ruang bagi node node yang ada. Fungsi malloc. Ada enam implementasi dasar linked list dalam program.

cin>>pilih.clrscr(). Tambah_Tengah(SingleList. cari.cin>>hasil.Baca_Maju(SingleList). case '4' : {clrscr(). pilih='1'. }break. case '5' : cout<<"Selesai". while(pilih=='1'||pilih=='2'||pilih=='3'||pilih=='4') { cout<<"Pilih Menu "<<endl. } } cout<<" Tekan ENTER".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)). } B . /*alokasi kamus (deklarasi)*/ char pilih. }break.tempat). hasil.cin>>tempat. Tambah_Depan(SingleList.hasil). cout<<"2.hasil). break. data. cout<<"5. Tambah Depan "<<endl. Tambah Belakang "<<endl.cin>>hasil. bool ada. cout<<"1. Selesai "<<endl. cout<<"Masukkan posisinya : ". Tambah_Belakang(SingleList.clrscr(). case '3' : {cout<<"Masukkan Datanya : ". int tempat. Baca List "<<endl. /*body program*/ Create(SingleList). }break. switch(pilih) { case '1' : {cout<<"Masukkan Datanya : ". cout<<"3.hasil. TUGAS Tambahkan program single link list sehingga terdapat menu untuk menghapus dan mencari simpul. cout<<"4. }break. cout<<"Pilihan = ".cin>>hasil. getch(). free(SingleList). Tambah Tengah "<<endl.clrscr(). 5 . case '2' : {cout<<"Masukkan Datanya : ".

6 . free(del_node) . Struktur yang dinamis ini mempunyai banyak keuntungan karena banyak elemen yang dengan mudah ditambah atau dikurangi dibanding struktur array yang bersifat statis. if(node == start) { if(start -> next == NULL) return start else { start -> next = node -> next. } return start . 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. } } else { while(node -> selanjutnya == node) node = node -> next . menghapus dan menambah dapat dilakukan dengan mudah.Jawaban : list *hapus(list *node) { list *del_node . if(node -> next == last ) node -> next -> next . del_node = node . } C . Dan juga kita dapat memanipulasi setiap elemen seperti menyisipkan. return start .

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

TUGAS Tambahkan menu untuk menghapus dan mencari simpul dalam double link list. pilih='1'.clrscr(). cout<<"3. cout<<"1. Tambah Belakang "<<endl. /*alokasi kamus (deklarasi)*/ char pilih.clrscr(). else { awal -> selanjutnya = node -> selanjutnya . } B . cout<<"2. if(node == awal) { if(awal -> selanjutnya == NULL) return awal . Tambah_Belakang(DoubleList.cin>>hasil. cari. data. case '2' : {cout<<"Masukkan Datanya : ". Jawaban : list *hapus(list *node) { list *del_node . int tempat. cin>>pilih. }break. Tambah Depan "<<endl. getch().hasil). } } else { 8 . hasil. Baca List "<<endl. cout<<"Pilihan = ". /*body program*/ Create(DoubleList). del_node = node . Selesai "<<endl. while(pilih=='1'||pilih=='2'||pilih=='3'||pilih=='4') { cout<<"Pilih Menu "<<endl. cout<<"4. Tambah_Depan(DoubleList.Baca_List(DoubleList). free(DoubleList). } } cout<<"Tekan ENTER". switch(pilih) { case '1' : {cout<<"Masukkan Datanya : ". }break.cin>>hasil. return awal . break. case '4' : cout<<"Selesai". bool ada. awal -> sebelumnya == NULL . case '3' : {clrscr().{ List *DoubleList=(List*)malloc(sizeof(List)). }break.hasil).

KESIMPULAN Double linked list menggunakan teknik yang sama dengan single linked list.if(node -> selanjutnya) node -> selanjutnya -> sebelumnya = node sebelumnya . akhir = node -> sebelumnya . Perbedaan utamanya adalah node double linked list dapat menunjuk ke belakang dan ke depan. Modul 8 Pohon Biner 9 . if(node == akhir) { node -> sebelumnya -> selanjutnya == NULL . } return start . Struktur data yang digunakan juga harus diubah dengan menyediakan tempat untuk alamat (pointer) node yang berada di depan dan belakangnya. } free(node) . } C .

membuat pohon 3. prosedur extract 5. deklarasi pohon 2. maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua child. mengunjungi pohon secara Post Order (Kunjungi Lift Child. membuat node baru 6. yaitu : 1. memeriksa apakah pohon kosong 4. kunjungi Right Child) 10.A . menambah node ke pohon 7. cetak node yang dikunjungi) 10 . mengunjungi pohon secara In Order (Kunjungi Left Child. Sesuai dengan definisi tersebut. kunjung Left Child. cetak isi node yang dikunjungi. membaca sebuah node 8. kunjungi Right Child. Berikut ini adalah ilustrasi pohon biner : Ada sebelas implementasi dasar linked list dalam program. kunjungi Right Child) 9. mengunjungi pohon secara Pre Order (Cetak isi node yang dikunjungi. PEMBAHASAN Pohon biner (Binary Tree) merupakan pohon yang memiliki ketentuan setiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.

Node_type* q=MakeNode(info). Inorder(p. Node_type *gt=NULL. contoh implementasi program utama adalah : /*program utama*/ void main() { /*alokasi kamus (deklarasi)*/ Node_type *root=NULL. cout<<"Masukkan jumlah data : ".cin>>counter. } else cout<<"Tidak ada". Postorder(p.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."Root"). cout<<endl<<"Postorder"<<endl.word. Inorder(p. } B . cout<<endl<<"Preorder"<<endl. for (int i=1. free(root).posisi<<endl. int card. if (p) { cout<<"Apa yang dicari : "<<p->info. root=InsertTree(root.info. cout<<endl<<"Cari Apa ? ". cin>>info. Preorder(p. 11 . p=root. p=TreeSearch(p.key<<endl. Node_type *p=root.cin>>info. p=root.q). cout<<"Berada di Posisi : "<<p->info. int counter=0."Root").key. p=root.key). Item_type info. /*body program*/ string line. } p=root. getch()."Root"). i++) { cout<<"Input angka : ". i<=counter. TUGAS Tambahkan menu untuk menghapus node tertentu dalam pohon .key. p=root."Root").

if(node == akhir) { node -> sebelumnya -> selanjutnya == NULL . else { awal -> selanjutnya = node -> selanjutnya . akhir = node -> sebelumnya . Tree hanya boleh memiliki paling banyak dua child. KESIMPULAN Binary Tree adalah tree dengan syarat tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. return awal . } return start .. if(node == awal) { if(awal -> selanjutnya == NULL) return awal . } } else { if(node -> selanjutnya) node -> selanjutnya -> sebelumnya = node sebelumnya . 12 . Pohon biner terurut adalah bentuk lebih khusus lagi dari pohon biner ini.Jawaban : Node_type *hapus(Node_type *node) { Node_type *del_node . del_node = node . awal -> sebelumnya == NULL . } C . } free(node) .

Sign up to vote on this title
UsefulNot useful