Dokumen tersebut membahas tentang struktur data multi list yang terdiri dari beberapa list berkait yang saling berhubungan. Multi list digunakan untuk mengelola data pegawai dan anak-anaknya. Diberikan contoh deklarasi struktur data multi list pegawai dan anak beserta fungsi-fungsi dasar seperti traversal, pencarian, penambahan, dan penghapusan elemen pegawai dan anak. Terakhir diberikan latihan untuk membuat struktur data multi list divisi k
2. Tujuan
Mahasiswa dapat : merancang model
struktur multi list dan menyusun relasi
antar sub list dengan memanfaatkan
semua algoritma yang sudah diberikan
dalam operasi dasar list berkait dengan
benar
4. Pengertian Multi List
MultiList adalah suatu struktur yang terdiri dari
beberapa buah list berkait yang saling berkaitan
(berelasi).
Setiap struktur list berkait berbeda
karakteristiknya dengan list berkait yang lain.
Misalkan akan dibuat sebuah multi list yang akan
mengelola sejumlah pegawai dan anak-anak
yang dimiliki oleh pegawai bersangkutan.
Dalam hal ini pegawai akan disusun dalam
sebuah list berkait singly dan anak pun akan
disusun dalam list berkait singly pula.
5. Multi List Pegawai dan Anak
-------------------------------------------------------------------------------------
No NIP Nama Pegawai ... Nama Anak ....
-------------------------------------------------------------------------------------
1. A001 W A
B
2. A002 X C
D
E
3 . A003 Y -
4 A004 Z H
---------------------------------------------------------------------------------------
W
(Pegawai) X Y Z
A
B
C
D
E
H
First
FirstAnak
(nama Anak)
next
next
anak
Y tidak memiliki anak
6. Deklarasi dari struktur data multi list pegawai
struct Anak {
char infoAnak;
Anak* nextAnak;
};
struct Pegawai {
char infoPeg;
Anak* FirstAnak;
Pegawai* next;
};
typedef Pegawai* pointerPeg;
typedef Anak* pointerAnak;
typedef pointerPeg ListPeg;
7. Operasi Multi List
Dengan menggunakan primitif-primitif yang sudah diketahui
sebelumnya, maka dalam hal ini bisa dipilih yang bersesuaian
untuk menyelesaikan permasalahan yang berkaitan dengan
multilist.
Proses yang bisa dilakukan antara lain penambahan data pegawai
(misal dengan Insert First) dan penghapusan data pegawai (misal
dengan Delete First).
Begitupun untuk penambahan data Anak bisa dilakukan dengan
Insert First dan penghapusan dengan Delete First. Penambahan
atau penghapusan dilakukan setelah mengetahui elemen orangtua
dari anak dengan menggunakan searching pegawai terlebih
dahulu.
9. Insert First Anak / Penambahan Baru Elemen Anak di depan
Untuk melakukan Insert Anak dilakukan dengan fungsi
sebagai berikut:
Dilakukan pencarian terhadap elemen orang tua terlebih
dahulu
Jika ditemukan maka kemudian baru dilakukan
penyisipan di depan pada FirstAnak. dengan 2 kasus
yang ditangani yaitu list anak masih kosong dan list
anak sudah ada isi.
Jika tidak ditemukan maka penyisipan tidak dilakukan
10. void insertFirstAnak(ListPeg& First, char key,
pointerAnak pBaru){
// I.S List First mungkin kosong dan pBaru sudah terdefinisi
// F.S Elemen anak bertambah satu elemen di depan
pointerPeg pOrtu;
int ketemu;
cout<<"Insert First Anak"<<endl;
// linearSearch(First,key,ketemu,pOrtu);
pOrtu=First;
ketemu=0;
while (pOrtu !=NULL && ketemu==0) { //!ketemu
if (pOrtu->infoPeg==key)
ketemu=1;
else
pOrtu=pOrtu->next;
}
//----------------------------------------------
if (ketemu){ // (ketemu==1)
cout<<"Ditemukan"<<endl;
if (pOrtu->FirstAnak==NULL){
pOrtu->FirstAnak=pBaru;
}
else {
pBaru->nextAnak=pOrtu->FirstAnak;
pOrtu->FirstAnak=pBaru;
}
}
else{
cout<<"Tidak ditemukan"<<endl;
}
}
11. Delete First Anak / Penghapusan Elemen Anak di depan
Untuk melakukan Delete Anak dilakukan dengan fungsi
sebagai berikut:
Dilakukan pencarian terhadap orang tua terlebih dahulu
Jika ditemukan maka kemudian baru dilakukan
penghapusan di depan pada FirstAnak. dengan 3 kasus
yang ditangani yaitu list anak masih kosong, list anak
dengan isi 1 elemen dan list anak dengan isi lebih dari
satu elemen. Jika tidak ditemukan maka penghapusan
tidak dilakukan
12. void deleteFirstAnak(ListPeg& First, char key,
pointerAnak& pHapus){
// I.S List First mungkin kosong
// F.S. List anak berkurang didepan, yg dihapus dikembalikan
pointerPeg pOrtu;
int ketemu;
cout<<"Delete First Anak"<<endl;
pOrtu=First;
ketemu=0;
while (pOrtu !=NULL && ketemu==0) {
if (pOrtu->infoPeg==key)
ketemu=1;
else
pOrtu=pOrtu->next;
}
if (ketemu) {
if (pOrtu->FirstAnak==NULL){ // kosong
pHapus=NULL;
cout<<"List kosong, tidak ada hapus"<<endl;
}
else if (pOrtu->FirstAnak->nextAnak==NULL){
//isi 1 elemen
pHapus=pOrtu->FirstAnak;
pOrtu->FirstAnak=NULL;
}
else { // isi > 1 elemen
pHapus=pOrtu->FirstAnak;
pOrtu->FirstAnak=pOrtu->FirstAnak->nextAnak;
pHapus->nextAnak=NULL;
}
}
else{
cout<<"Tidak ditemukan"<<endl;
}
}
13. Traversal Seluruh Pegawai dan Anak
akan dilakukan proses untuk menampilkan daftar semua pegawai
berikut data anak-anak yang dimiliki.
void traversalOrtuAnak(ListPeg First){
pointerPeg pBantuPeg;
pointerAnak pBantuAnak;
cout<<"Traversal Pegawai"<<endl;
pBantuPeg=First;
while (pBantuPeg!=NULL){ //loop ortu
cout<<pBantuPeg->infoPeg <<endl;
pBantuAnak=pBantuPeg->FirstAnak;
while (pBantuAnak!=NULL) { //loop anak
cout<<" "<<pBantuAnak->infoAnak <<endl;
pBantuAnak=pBantuAnak->nextAnak;
}
pBantuPeg=pBantuPeg->next;
}
}
14. Latihan dan Tugas
Buatlah struktur data / kamus data serta prosedur untuk menampilkan data divisi
karyawan dan daftar karyawan pada divisi tsb berbentuk multi list
Bentuk tampilan yang diinginkan adalah sbb :
Daftar Divisi dan Karyawan PT KomputerKu Tbk
No. Nama Divisi NIP Karyawan Nama karyawan
1
2
3
HRD
Produksi
Pemasaran
H001
H002
P001
P002
P003
S001
Budi
Cica
Santi
Heri
Lili
Lala