1 / 35

Pertemuan 2 STRUKTUR DATA LINKED LIST

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

acton
Télécharger la présentation

Pertemuan 2 STRUKTUR DATA LINKED LIST

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Endang Purnama Giri, M.Kom. Annisa, M.Kom. Departemen Ilmu Komputer FMIPA-IPB 2010 Pertemuan 2 STRUKTUR DATALINKED LIST

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

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

  4. Pada C Deklarasisebuah node dapatdilakukandengan Struct node{ int data; struct node *selanjutnya; } typedefstruct node node DEKLARASI NODE LINKED LIST

  5. Bentuk operasi pada linked list meliputi • Penambahan data • Penghapusan data • Pengaksesan data • Update data OPERASI LINKED LIST

  6. OPERASI Penambahan DataPADA LINKED LIST

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

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

  9. baru Node yang akan di masukan harus di alokasikan terlebih dahulu pada memory baru=malloc(sizeof node); PENAMBAHAN DATA DI AWAL

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

  11. ILUSTRASI PENAMBAHAN DI AWAL

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

  13. Ilustrasi Penambahan di Akhir • Selain di bagian awal pada bagian akhir list pada umumnya ditunjuk suatu pointer (tail/akhir) PENAMBAHAN DATA DI AKHIR

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

  15. PENGHAPUSAN DATA

  16. Operasi penghapusan memiliki 3 mode • Di awal list • Di akhir list • Data tertentu pada list PENGHAPUSAN DATA

  17. Ilustrasi (sintax -- free(hapus);) PENGHAPUSAN DATA DI AWAL

  18. MENCETAK LINKED LIST

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

  20. Pengaksesan & Update Data

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

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

  23. Ilustrasi Penambahan di Antara Penambahan Data diAntara

  24. 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)

  25. 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)

  26. Ilustrasi (penghapusan node dengan data=4) Penghapusan Data tertentu

  27. Ilustrasi (lanjutan) Penghapusan Data tertentu(ii)

  28. LATIHAN

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

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

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

  32. 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”); }

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

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

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

More Related