1.08k likes | 1.98k Views
Endang Purnama Giri, M.Kom. Annisa, M.Kom. Departemen Ilmu Komputer FMIPA-IPB 2010. Pertemuan 2 STRUKTUR DATA LINKED LIST. Linked List. Suatu untaian atau rangkaian berantai dari node-node yang disusun dengan menggunakan pointer
E N D
Endang Purnama Giri, M.Kom. Annisa, M.Kom. Departemen Ilmu Komputer FMIPA-IPB 2010 Pertemuan 2 STRUKTUR DATALINKED LIST
Linked List • Suatu untaian atau rangkaian berantai dari node-node yang disusun dengan menggunakan pointer • Masing-masing node merupakan suatu record yang terdiri dari dua bagian, yaitu : • Bagian isi/informasi • Bagian pointer (untuk menunjuk ke node berikutnya) informasi pointer
Awal A B C D Linked List • Linked List memiliki sebuah pointer untuk menunjuk node awalnya. • Node terakhir pada linked list memiliki nilai null pada bagian pointernya. • Node-node didalam linked list dapat ditambah (dialokasikan) dan dapat dihapus (didealokasikan) • Kapasitas penyimpanan struktur linked list tidak terbatas (dinamis) tergantung kapasitas memorinya
Pada C Deklarasisebuah node dapatdilakukandengan Struct node{ int data; struct node *selanjutnya; } typedefstruct node node DEKLARASI NODE LINKED LIST
Bentuk operasi pada linked list meliputi • Penambahan data • Penghapusan data • Pengaksesan data • Update data OPERASI LINKED LIST
awal akhir baru 1. Mendeklarasikan record/struct sebagai node 2. Mendeklarasikan pointer bantuan Membuat linked list Struct node{ int data; struct node *next; }typedef struct node node; node awal, akhir, baru;
Operasi penambahan data baru pada linked list dapat memiliki 3 mode • Di awal list • Di antara data yang lain • Di akhir list PENAMBAHAN DATA BARU
baru Node yang akan di masukan harus di alokasikan terlebih dahulu pada memory baru=malloc(sizeof node); PENAMBAHAN DATA DI AWAL
awal baru akhir Node pertama pada sebuah linked list pada umumnya ditunjuk oleh suatu pointer bantuan (head/awal) Ketika sebuah data (node) baru akan dimasukan pada linked list kondisi linked list bisa kosong ataupun sudah ada isinya PENAMBAHAN DATA DI AWAL Jika linked list masih kosong, bentuk linked list dan tunjuk node yang pertama sebagai awal linked list If awal == null { awal = baru;akhir=baru} Jika linked list tidak kosong, masukkan node selanjutnya else {baru->next=awal;awal=baru;} awal baru akhir
void insertAwal(int dataBaru, node *awal){ node *baru; baru=malloc(sizeof(node)); baru->data=dataBaru; if (awal==NULL){ awal=baru; akhir=baru; awal->next=NULL; } else { baru->next=awal; awal=baru; } } FungsiPenambahandiawal
Ilustrasi Penambahan di Akhir • Selain di bagian awal pada bagian akhir list pada umumnya ditunjuk suatu pointer (tail/akhir) PENAMBAHAN DATA DI AKHIR
void insertAkhir(int dataBaru, node *awal,node *akhir){ baru=malloc(sizeof(node)); baru->data=dataBaru; if (awal==NULL) { awal=baru; akhir=baru;} else { akhir->next=baru; akhir=baru; } akhir->next=NULL; } FUNGSI PENAMBAHAN DI AKHIR
Operasi penghapusan memiliki 3 mode • Di awal list • Di akhir list • Data tertentu pada list PENGHAPUSAN DATA
Ilustrasi (sintax -- free(hapus);) PENGHAPUSAN DATA DI AWAL
bantu akhir awal void cetak(node *awal,node *akhir){ node *bantu; bantu = awal; while(bantu!=NULL) { printf(“%d”,bantu->data;); bantu=bantu->next; } } MENCETAK LINKED LIST
Tidak semudah array yang dapat menggunakan index untuk menuju suatu data tertentu Suatu node pada linked list dengan pointer tunggal hanya memiliki info lokasi data (node) selanjutnya Penelusuran secara sekuensial (linier) dari awal sampai dengan posisi ataupun node (tujuan) dengan karakteristik data tertentu PENGAKSESAN DATA
Pada dasarnya update data akan diawali penelusuran data yang ingin diubah Ketika posisi data telah ditemukan secara langsung data terkait pada node dapat langsung diubah dengan data yang baru UPDATE DATA
Ilustrasi Penambahan di Antara Penambahan Data diAntara
Sintaxdalam C void insertAntara(intdataBaru, intdataAntara,node *awal){ node baru,bantu; baru=malloc(sizeof(node)); baru->data=dataBaru; if (awal==NULL) { awal=baru; awal->selanjutnya=NULL; } Penambahan Data diAntara (ii)
Sintaxdalam C else { bantu=awal; while (bantu->data!=dataAntara && bantu->selanjutnya !=NULL){ bantu=bantu->selanjutnya; } baru->selanjutnya=bantu->selanjutnya; bantu->selanjutnya=baru; } } Penambahan Data diAntara (ii)
Ilustrasi (penghapusan node dengan data=4) Penghapusan Data tertentu
Ilustrasi (lanjutan) Penghapusan Data tertentu(ii)
Buatlahfungsiuntuk : • melakukanpencarianberdasarkan key tertentu • melakukanperhitunganberapabanyak data tertentupada list tersebut • melakukanpenghapusan key tertentudalam list • melakukanpenghapusan node diakhir list • melakukan update terhadapnilaisuatu node • melakukanpenambahan data denganmemperhatikanurutan SOAL
int cari(int key,node *awal,node *akhir){ node *bantu; bantu = awal; while(bantu->data!=key && bantu!=NULL) { bantu=bantu->next; } if(bantu!=NULL) return 1; else return 0; } melakukanpencarianberdasarkan key tertentu
int count(int key,node *awal,node *akhir){ node *bantu; int jumlah=0; bantu = awal; while(bantu!=NULL) { if(bantu->data==key) jumlah++; bantu=bantu->next; } return jumlah; } melakukanperhitunganberapabanyak data tertentupada list tersebut
melakukanpenghapusan key tertentudalam list void hapusKey(intkey,node *awal,node *akhir){ node *bantu, *hold; bantu = awal; while(bantu->next->data!=key && bantu!=NULL) { bantu=bantu->next; } if(bantu!=NULL) { hold=bantu->next; bantu->next=hold->next; free(hold); } else printf(“Data tidakketemu”); }
void hapusKey(node *awal,node *akhir){ node *bantu; bantu = awal; while(bantu->next!=akhir) { bantu=bantu->next; } akhir=bantu; free(bantu->next); akhir->next=NULL; } melakukanpenghapusan node diakhir list
void update(int baru, int lama,node *awal,node *akhir){ node *bantu; bantu = awal; while(bantu->data!=lama && bantu!=NULL) { bantu=bantu->next; } if(bantu!=NULL) bantu->data=baru; } melakukan update terhadapnilaisuatu node
void insertUrut(int dataBaru, node *awal, node *akhir){ node *baru,*bantu, *hold; baru=malloc(sizeof(node)); baru->data=dataBaru; if (awal==NULL){ awal=baru; akhir=baru; awal->next=NULL; } else { if(akhir->data<dataBaru) //call insertAkhir else if(awal->data>dataBaru) //call insertAwal else{ bantu=awal; while(bantu->next->data<dataBaru && bantu!=NULL) bantu=bantu->next; if(bantu!=NULL) { hold=bantu->next; bantu->next=baru; baru->next=hold; }}}} melakukanpenambahan data DENGAN MEMPERHATIKAN URUTAN