Think Different Materi ASD (SISKOM) ASD Linked List
Algoritma dan Struktur Data
Linked List
Konsep Array
Array ==
Laci?
2
• Data disimpan dalam suatu struktur, sedemikian
rupa sehingga elemen-elemen di dalam struktur
tersebut dapat diolah secara kelompok ataupun
secara individu.
• Sifat - sifat Array
– Homogen
Seluruh elemen di dalam struktur array mempunyai tipe data
yang sama.
– Random Access
Setiap elemen di dalam struktur array dapat dicapai secara
individual, langsung ke lokasi elemen yang diinginkan, tidak
harus melalui elemen pertama.
3
Syntax:
struct nama_struct {
tipe_data_1
nama_var_1;
tipe_data_2
nama_var_2;
tipe_data_3
nama_var_3;
……
};
4
• Sebuah array yang setiap data elemennya bertipe struct.
Umumnya dipakai untuk menyimpan object data yang terstruktur,
misal: data mahasiswa, karyawan, buku, barang, dsb.
5
Contoh dengan malloc()
#include
#include
#include
void main()
{
//deklarasi pointer
float *pjari, *pluas;
//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer
pjari = (float *)malloc(sizeof(float));
pluas = (float *)malloc(sizeof(float));
if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori
//gunakan variabel jari dan luas melalui pointer
*pjari = 7;
*pluas = 3.14 * *pjari * *pjari;
cout next = pHead; // set link to NULL
39
pHead = pNew;// point list to first node
pHead
pPre
After:
pNew
pHead
pPre
39
Menambahkan node ke awal list
Before:
Code (same):
pNew -> next = pHead; // set link to NULL
pNew
pHead = pNew;// point list to first node
39
pHead
75
124
pPre
After:
pNew
39
pHead
75
pPre
124
Menambahkan node di tengah list
Before:
Code
pNew -> next = pPre -> next;
64
pNew
pPre -> next = pNew;
55
124
pPre
After:
pNew
64
55
pPre
124
Menambahkan node akhir list
Before:
Code
pNew -> next = NULL;
144-> next = pNew;
pPre
pNew
55
124
pPre
After:
pNew
144
55
pPre
124
Menambahkan node pada linked list
Terdapat empat tahap untuk menambah node linked list:
• Membuat node baru.
• Mendapatkan node yang terletak sebelum node baru disisipkan (pPre)
• Atur next node baru agar menunjuk node sesudah posisi penyisipan.
• Atur next pPre agar menunjuk node baru.
Kode untuk menambah data ke linked list
•
Untuk menambah data pada linked list, harus diketahui head pointer
(pHead), pointer yang menunjuk node sebelum tempat penyisipan
(pPre) data yang akan disisipkan (item).
//insert a node into a linked list
struct node *pNew;
pNew = (struct node *) malloc(sizeof(struct node));
pNew -> data = item;
if (pPre == NULL){
//add before first logical node or to an empty list
pNew -> next = pHead;
pHead = pNew;
}
else {
//add in the middle or at the end
pNew -> next = pPre -> next;
pPre -> next = pNew;
}
Menghapus node dari linked list
• Untuk menghapus sebuah node:
– Cari node yang akan
pendahulunya (pPre).
dihapus
(pCur)
– Ubah pPre->next agar menunjuk pCur->next.
– Hapus pCur menggunakan fungsi free
dan
node
Menghapus node pertama dari linked list
Before:
Code:
pHead
75
pHead = pCur -> next;
free(pCur);
124
pCur
pPre
After:
pHead
pPre
Recycled
pCur
124
Menghapus node dari linked list – kasus umum
Before:
Code:
75
96
pPre -> next = pCur -> next;
free(pCur);
124
pCur
pPre
After:
Recycled
75
pPre
pCur
124
Kode untuk menghapus node dari linked list
•
Untuk menghapus node dari linked list, harus diketahui head
pointer (pHead), node yang akan dihapus (pCur), serta
pendahulunya,
//delete a node from a linked list
if (pPre == NULL)
//deletion is on the first node of the list
pHead = pCur -> next;
else
//deleting a node other than the first node of the list
pPre -> next = pCur -> next;
free(pCur).
Mencari node yang mengandung data tertentu
dari linked list
•
Operasi insert dan delete membutuhkan pencarian pada list
untuk menentukan posisi penyisipan atau pointer yang
menunjuk data yang akan dihapus
//search the nodes in a linked list
pPre = NULL;
pCur = pHead;
//search until the target value is found or the end of the list is reached
while (pCur != NULL && pCur -> data != target) {
pPre = pCur;
pCur = pCur -> next;
}
//determine if the target is found or ran off the end of the list
if (pCur != NULL)
found = 1;
else
found = 0;
Traversing a Linked List
•
mengunjungi semua node yang ada pada list dari head sampai
node terakhir
//traverse a linked list
Struct node *pWalker;
pWalker = pHead;
printf(“List contains:\n”);
while (pWalker != NULL){
printf(“%d ”, pWalker -> data);
pWalker = pWalker -> next;
}
Tugas
Coba & Pelajari source code pertemuan7.cpp
Linked List
Konsep Array
Array ==
Laci?
2
• Data disimpan dalam suatu struktur, sedemikian
rupa sehingga elemen-elemen di dalam struktur
tersebut dapat diolah secara kelompok ataupun
secara individu.
• Sifat - sifat Array
– Homogen
Seluruh elemen di dalam struktur array mempunyai tipe data
yang sama.
– Random Access
Setiap elemen di dalam struktur array dapat dicapai secara
individual, langsung ke lokasi elemen yang diinginkan, tidak
harus melalui elemen pertama.
3
Syntax:
struct nama_struct {
tipe_data_1
nama_var_1;
tipe_data_2
nama_var_2;
tipe_data_3
nama_var_3;
……
};
4
• Sebuah array yang setiap data elemennya bertipe struct.
Umumnya dipakai untuk menyimpan object data yang terstruktur,
misal: data mahasiswa, karyawan, buku, barang, dsb.
5
Contoh dengan malloc()
#include
#include
#include
void main()
{
//deklarasi pointer
float *pjari, *pluas;
//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer
pjari = (float *)malloc(sizeof(float));
pluas = (float *)malloc(sizeof(float));
if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori
//gunakan variabel jari dan luas melalui pointer
*pjari = 7;
*pluas = 3.14 * *pjari * *pjari;
cout next = pHead; // set link to NULL
39
pHead = pNew;// point list to first node
pHead
pPre
After:
pNew
pHead
pPre
39
Menambahkan node ke awal list
Before:
Code (same):
pNew -> next = pHead; // set link to NULL
pNew
pHead = pNew;// point list to first node
39
pHead
75
124
pPre
After:
pNew
39
pHead
75
pPre
124
Menambahkan node di tengah list
Before:
Code
pNew -> next = pPre -> next;
64
pNew
pPre -> next = pNew;
55
124
pPre
After:
pNew
64
55
pPre
124
Menambahkan node akhir list
Before:
Code
pNew -> next = NULL;
144-> next = pNew;
pPre
pNew
55
124
pPre
After:
pNew
144
55
pPre
124
Menambahkan node pada linked list
Terdapat empat tahap untuk menambah node linked list:
• Membuat node baru.
• Mendapatkan node yang terletak sebelum node baru disisipkan (pPre)
• Atur next node baru agar menunjuk node sesudah posisi penyisipan.
• Atur next pPre agar menunjuk node baru.
Kode untuk menambah data ke linked list
•
Untuk menambah data pada linked list, harus diketahui head pointer
(pHead), pointer yang menunjuk node sebelum tempat penyisipan
(pPre) data yang akan disisipkan (item).
//insert a node into a linked list
struct node *pNew;
pNew = (struct node *) malloc(sizeof(struct node));
pNew -> data = item;
if (pPre == NULL){
//add before first logical node or to an empty list
pNew -> next = pHead;
pHead = pNew;
}
else {
//add in the middle or at the end
pNew -> next = pPre -> next;
pPre -> next = pNew;
}
Menghapus node dari linked list
• Untuk menghapus sebuah node:
– Cari node yang akan
pendahulunya (pPre).
dihapus
(pCur)
– Ubah pPre->next agar menunjuk pCur->next.
– Hapus pCur menggunakan fungsi free
dan
node
Menghapus node pertama dari linked list
Before:
Code:
pHead
75
pHead = pCur -> next;
free(pCur);
124
pCur
pPre
After:
pHead
pPre
Recycled
pCur
124
Menghapus node dari linked list – kasus umum
Before:
Code:
75
96
pPre -> next = pCur -> next;
free(pCur);
124
pCur
pPre
After:
Recycled
75
pPre
pCur
124
Kode untuk menghapus node dari linked list
•
Untuk menghapus node dari linked list, harus diketahui head
pointer (pHead), node yang akan dihapus (pCur), serta
pendahulunya,
//delete a node from a linked list
if (pPre == NULL)
//deletion is on the first node of the list
pHead = pCur -> next;
else
//deleting a node other than the first node of the list
pPre -> next = pCur -> next;
free(pCur).
Mencari node yang mengandung data tertentu
dari linked list
•
Operasi insert dan delete membutuhkan pencarian pada list
untuk menentukan posisi penyisipan atau pointer yang
menunjuk data yang akan dihapus
//search the nodes in a linked list
pPre = NULL;
pCur = pHead;
//search until the target value is found or the end of the list is reached
while (pCur != NULL && pCur -> data != target) {
pPre = pCur;
pCur = pCur -> next;
}
//determine if the target is found or ran off the end of the list
if (pCur != NULL)
found = 1;
else
found = 0;
Traversing a Linked List
•
mengunjungi semua node yang ada pada list dari head sampai
node terakhir
//traverse a linked list
Struct node *pWalker;
pWalker = pHead;
printf(“List contains:\n”);
while (pWalker != NULL){
printf(“%d ”, pWalker -> data);
pWalker = pWalker -> next;
}
Tugas
Coba & Pelajari source code pertemuan7.cpp