Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
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; }}}}
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.