Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Pertemuan 2 STRUKTUR DATA LINKED LIST

Presentasi serupa


Presentasi berjudul: "Pertemuan 2 STRUKTUR DATA LINKED LIST"ā€” Transcript presentasi:

1 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

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 Linked List Linked List memiliki sebuah pointer untuk menunjuk node awalnya. Awal A B C D 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 DEKLARASI NODE LINKED LIST
Pada C Deklarasi sebuah node dapat dilakukan dengan Struct node{ int data; struct node *selanjutnya; } typedef struct node node

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

6 OPERASI Penambahan Data PADA LINKED LIST

7 Membuat linked list 1. Mendeklarasikan record/struct sebagai node
2. Mendeklarasikan pointer bantuan Struct node{ int data; struct node *next; }typedef struct node node; node awal, akhir, baru; awal akhir baru

8 PENAMBAHAN DATA BARU Operasi penambahan data baru pada linked list dapat memiliki 3 mode Di awal list Di antara data yang lain Di akhir list

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

10 PENAMBAHAN DATA DI AWAL
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 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;} baru awal akhir akhir awal baru

11 ILUSTRASI PENAMBAHAN DI AWAL

12 Fungsi Penambahan di awal
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;

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

14 FUNGSI PENAMBAHAN 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;

15 PENGHAPUSAN DATA

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

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

18 MENCETAK LINKED LIST

19 MENCETAK LINKED LIST awal akhir bantu void cetak(node *awal,node *akhir){ node *bantu; bantu = awal; while(bantu!=NULL) { printf(ā€œ%dā€,bantu->data;); bantu=bantu->next; }

20 Pengaksesan & Update Data

21 PENGAKSESAN DATA 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

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

23 Penambahan Data di Antara
Ilustrasi Penambahan di Antara

24 Penambahan Data di Antara (ii)
Sintax dalam C void insertAntara(int dataBaru, int dataAntara,node *awal){ node baru,bantu; baru=malloc(sizeof(node)); baru->data=dataBaru; if (awal==NULL) { awal=baru; awal->selanjutnya=NULL; }

25 Penambahan Data di Antara (ii)
Sintax dalam C else { bantu=awal; while (bantu->data!=dataAntara && bantu->selanjutnya !=NULL){ bantu=bantu->selanjutnya; } baru->selanjutnya=bantu->selanjutnya; bantu->selanjutnya=baru;

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

27 Penghapusan Data tertentu(ii)
Ilustrasi (lanjutan)

28 LATIHAN

29 SOAL Buatlah fungsi untuk :
melakukan pencarian berdasarkan key tertentu melakukan perhitungan berapa banyak data tertentu pada list tersebut melakukan penghapusan key tertentu dalam list melakukan penghapusan node di akhir list melakukan update terhadap nilai suatu node melakukan penambahan data dengan memperhatikan urutan

30 melakukan pencarian berdasarkan key tertentu
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;

31 melakukan perhitungan berapa banyak data tertentu pada list tersebut
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;

32 melakukan penghapusan key tertentu dalam list
void hapusKey(int key,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 tidak ketemuā€);

33 melakukan penghapusan node di akhir list
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;

34 melakukan update terhadap nilai suatu node
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;

35 melakukan penambahan data DENGAN MEMPERHATIKAN URUTAN
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; }}}}


Download ppt "Pertemuan 2 STRUKTUR DATA LINKED LIST"

Presentasi serupa


Iklan oleh Google