TUGAS PRAKTIKUM
IMPLEMENTASI STRUKTUR DATA
MODUL III
LINKED LIST DENGAN POINTER
MODUL III
LINKED LIST DENGAN POINTER
Fani Widiastuti
123090081
PLUG 8
Asisten : Widy Sulistianto
CoAss: Ial Irwan Arahman
TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS PEMBANGUNAN NASIONAL “VETERAN” YOGYAKARTA
2010
123090081
PLUG 8
Asisten : Widy Sulistianto
CoAss: Ial Irwan Arahman
TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS PEMBANGUNAN NASIONAL “VETERAN” YOGYAKARTA
2010
BAB I
TUGAS
TUGAS
1. Jelaskan dengan detail source code contoh 1 Program Linked List Dengan Pointer!
1. #include
Merupakan Preprocessor Directive, #include memberitahu preposesor kemana harus mencari arti dari “iostream” yang digunakan dalam program. Artinya bisa dicari dalam file iostream, yaitu pustaka yang diakhiri dengan simbol .h. Pustaka (library) adalah kumpulan fungsi dan simbol yang bisa diakses oleh program.
2. #include
biasanya untuk mengalokasikan sejumlah tempat di memory.
3. #define true 1 #define false 0
#define adalah kata kunci untuk membuat suatu pengenal atau konstanta yang jika
terdapat suatu pengenal dalam source code, akan diganti oleh compiler saat kompilasi. dalam deklarasi di atas berarti true disubstitusi dengan 1, dan false disubstitusi dengan 0.
4. using std::cout;
Digunakan untuk memberitahukan bahwa kita akan menggunakan perintah cout atau perintah untuk menampilkan output pada bagian fungsi utama (main).
typedef adalah kata kunci untuk menciptakan tipe data sendiri.
Ini berarti typeinfo bertipe integer, lalu typenode bertipe struct dan pointer. lalu typeinfo didefinisikan sebagai pointer bernama info. sedangkan next bertipe pointer.
Merupakan baris Pendeklarasian fungsi.
1. #include
typeptr awal, akhir; merupakan pendeklarasian variable yang bertipe pointer.
Tipe void digunakan untuk mendeklarasikan fungsi-fungsi yang tidak menghasilkan suatu nilai. Fungsi – fungsi void yang ada di program ini adalah
Ketika kita memanggil fungsi, maka fungsi tersebut bekerja dan kemudian mengirim kembalai nilai hasil pekerjaanya. Nilai yang dikembalikan disebut dengan return value.
Selain ada tipe fungsi void ada juga fungsi bertipe int, yaitu fungsi listkosong.
cout << “List Mula- mula :\n”; merupakan perintah untuk menampilkan output berupa tulisan “List Mula-mula :”. buatlistbaru (); merupakan perintah untuk memanggil fungsi buatlistbaru. sisipnode(50); merupakan perintah untuk memanggil fungsi sisipnode dengan parameter IB yang bernilai 50. sisipnode(20); merupakan perintah untuk memanggil fungsi sisipnode dengan parameter IB yang bernilai 20. sisipnode(5); merupakan perintah untuk memanggil fungsi sisipnode dengan parameter IB yang bernilai 5. sisipnode(100); merupakan perintah untuk memanggil fungsi sisipnode dengan parameter IB yang bernilai 100. sisipnode(70); merupakan perintah untuk memanggil fungsi sisipnode dengan parameter IB yang bernilai 70. sisipnode(25); merupakan perintah untuk memanggil fungsi sisipnode dengan parameter IB yang bernilai 25. bacamundur(); merupakan perintah untuk memanggil fungsi bacamundur. cout << “\n\n Hapus node 50 \n”; cout << “\n Kondisi List setelah dihapus, dibaca dari belakang : \n\n”; merupakan perintah untuk menampilkan output berupa tulisan “Hapus node 50:”. Lalu berpindah baris dan akan tercetak tulisan “Kondisi List setelah dihapus, dibaca dari belakang :” hapusnode(50); merupakan perintah untuk memanggil fungsi hapusnode dengan parameter IH yang bernilai 50. bacamundur(); merupakan perintah untuk memanggil fungsi bacamundur.
- typeptr list; mendeklarasikan variable yang bernama list yang bertipe pointer.
- list = NULL; mendeklarasikan pointer list yang bernilai NULL.
- awal = list; mendeklarasikan bahwa variable awal bernilai sama dengan nilai list.
- akhir= list; mendeklarasikan bahwa variable akhir bernilai sama dengan nilai list.
Merupakan baris fungsi listkosong()
Di dalam fungsi ini terdapat statement pengendalian if, yang mempunyai arti jika kondisi variable awal bernilai NULL maka variable return bernilai true lah yang akan dijalankan, tetapi apabila kondisi variable awal tidak NULL makan variable return false lah yang akan dijalankan.
Merupakan baris fungsi sisipnode(typeinfo IB)
- typeptr NB, bantu; mendeklarasikan variable yang bernama NB dan bantu yang bertipe pointer.
- NB= (typenode *) malloc (sizeof(typenode)); berguna unutk mendeklarasikan sebuah pointer kosong pada memory, yaitu pointer NB yang akan disediakan memory sebesar typenodenya.
- NB ->info = IB; mendeklarasikan bahwa info dari NB merupakan nilai/ isi dari IB(info baru).
- NB -> next = NULL; mendeklarasikan bahwa alamat dari next NB memiliki alamat NULL.
- Di dalam fungsi ini juga terdapat perintah perulangan if bertingkat, yang mempunyai arti sebagai berikut :
Jika kondisi list kosong maka dijalankan statement awal = NB dan akhir= NB. Tetapi jika kondisi list tidak kosong maka terjadilah perintah if lagi dengan jika kondisi IB<= awal-> info maka dijalankan statement sisip di depan yaitu NB -> next =awal, dan awal = NB. Jika kondisi if tersebut bernilai false maka dijalankan statement bantu = awal, dan setelah itu terjadi perintah perulangan dengan perintah while do, yang mempunyai karateristik periksa kondidi terlebih dahulu baru jalankan perintah-perintah di dalamnya. Dengan kondisi while (bantu -> next!=NULL && IB > bantu ->next->info) maka dijalankan perintah bantu = bantu ->next;. Setelah itu ada statement untuk sisip di tengah atau di belakang yaitu NB -> next = bantu -> next; bantu ->next =NB; lalu terdapat perintah if lagi dengan kondisi jika IB> akhir ->info maka dijalankan statement akhir = NB;
Merupakan baris fungsi hapusnode()
Merupakan baris fungsi hapusnode()
- Typeptr hapus, bantu ; mendeklarasikan variable hapus dan bantu dengan tipe pointer
- Terdapat statement pengendalian if bertingkat dengan kondisi pertama jika listkosong maka akan tercetak tulisan “ List Masih kosong”. Tetapi jika kondisi list tidak kosong maka dijalankan perintah if selanjutnya yaitu perintah hapus node di awal dengan kondisi jika awal ->info ==IH maka dijalankan statement hapus = awal; ,lalu awal = hapus->next; lalu perintah hapus free(hapus);. Jika kondisi nya belum benar maka akan dijalankan perintah else yaitu statement bantu = awal; lalu perintah perulangan while dijalankan dengan kondisi (bantu -> next ->next !=NULL && IH!=bantu ->next ->info) maka dijalankan statement perulangan ini : bantu =bantu ->next. Setelah perulangan ada statement pengendalian if lagi dengan kondisi jika (IH==bantu ->next->info) maka dijalankan statement hapus = bantu -> next. Ada statement pengendalian lagi dengan kondisi (IH== bantu ->next->info) maka dijalankan statement hapus=bantu->next. Di dalmnya ada statement pengendalian lagi untuk menghapus di akhir yaitu if(hapus==akhir); lalu akhir=bantu; dan akhir->next=NULL;. Jika kondisi if hapus tidak samadengan akhir maka akan dijalankan perintah ini bantu ->next =hapus->next; free(hapus);. Lalu jika kondisi IH !=bantu->next->info maka akan tercetak tulisan “Node tidak ditemukan!”.
- typeptr bantu; mendeklrasikan variable bantu dengan tipe pointer
- bantu=awal; mendeklarasikan bahwa variable bantu nilai dan alamat nya sama dengan variable awal.
- Terdapat statmenet perulangan while do. Dengan kondisi (bantu!=NULL) selama kondisi tersebut bernilai true maka perintah cout<< “ “ <
info; cout << “ “ ; bantu= bantu ->next; akan terus dijalankan.
typeptr depan, bantu; mendeklrasikan variable depan dan bantu dengan tipe pointer. depan= awal; mendeklarsikan variable depan berada di tempat yang sama dengan variable awal. Terdapat statement perulangan do while, dalam statement perulangan do while maka akan menjalankan perintah-perintah yang ada terlebih dahulu baru membaca / memeriksa kondisi. Maka akan dijalankan perintah bantu= depan; terlebih dahulu setelah itu dijalankan perulangan dengan kondisi ( bantu -> next != akhir) dan perintah bantu = bantu-> next; dijalankan. Setelah itu perintah akhir->next = bantu; dan bantu = akhir; terdapat perintah perulangan lagi dengan kondisi (akhir!=depan) maka dijalankan perulangan akhir->next=NULL; bantu = awal;. Setelah itu ada statement perulangan lagi dengan kondisi (bantu !=NULL) maka akan dijalankan perintah mencetak, yaitu perintah cout << “ “ < info; dan cout << “ “; setelah itu perintah bantu = bantu ->next; dijalankan. Maka pada saat fungsi ini dipanggil akan muncul output dengan tulisan nilai output yang dibaca mundur.
Sebuah linked list adalah array berhingga yang dinamis. Sebuah array memiliki suatu besaran dan Anda dapat memodifikasinya. Tidak seperti array, sebuah linked list tidak memiliki ukuran absolut. Linked list dapat menyimpan banyak variabel sebanyak yang Anda inginkan.
Node-node dalam linked list secara skematis bisa digambar secara berurutan, tetapi dalam memory sebenarnya node-node tersebut tidak harus disimpan secara berurutan pula.
Untuk menggambarkannya kita dapat menggunakan array untuk mengimplementasikan kondisi list dalam memory.
- LINKED LIST KOSONG
Linked list kosong jika list=0, sebab index dimulai dari 1
- LINKED LIST PENUH
Linked list penuh jika kosong=0, sebab index dimulai dari 1
- MENYISIPKAN NODE BARU
Tempat menyimpan node baru diambilkan dari tempat kosong yang pertama kali ditemukan yaitu yang ditunjuk oleh kosong.
- MENGHAPUS NODE
Node yang dihapus akan menjadi tempat kosong pertama kali
- MENCETAK NODE
Pencetakan isi node dimulai dari index yang ditunjuk oleh list dan berhenti setelah index menunjukkan 0 (nol). Index tempat-tempat kosong dimulai dari index yang ditunjuk oleh kosong dan berhenti setelah index menunjukkan 0 (nol)
BAB II
KESIMPULAN
KESIMPULAN
- INFO , berisi informasi tentang elemen data yang bersangkutan.
- NEXT (link field/next pointer field), berisi alamat dari elemen (node) selanjutnya yang dituju.
Terdapat 5 opeasi dalam linked list , yaitu :
- Buatlist(list).
- Listkosong(list).
- Cetaklist(list).
- Sisipnode(list).
- hapusnode(list).