P. 1
Struktur Data Modul 5 8

Struktur Data Modul 5 8

|Views: 82|Likes:
Published by Afriyadi Sulaksono

More info:

Published by: Afriyadi Sulaksono on Apr 11, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

04/03/2013

pdf

text

original

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

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

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. 3 .

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

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->