• Tidak ada hasil yang ditemukan

Think Different Materi ASD (SISKOM) ASD Linked List

N/A
N/A
Protected

Academic year: 2017

Membagikan "Think Different Materi ASD (SISKOM) ASD Linked List"

Copied!
34
0
0

Teks penuh

(1)

Algoritma dan Struktur Data

(2)

Konsep Array

2

(3)

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

(4)

Syntax:

struct nama_struct {

tipe_data_1 nama_var_1; tipe_data_2 nama_var_2; tipe_data_3 nama_var_3; ……

};

(5)

• Sebuah array yang setiap data elemennya bertipe struct.

Umumnya dipakai untuk menyimpan object data yang terstruktur, misal: data mahasiswa, karyawan, buku, barang, dsb.

(6)

Contoh dengan

Contoh dengan

malloc()

malloc()

#include <stdio.h> #include <stdio.h> #include <conio.h> #include <conio.h> #include <stdlib.h> #include <stdlib.h> void main() void main() { {

//deklarasi pointer//deklarasi pointer float *pjari, *pluas;

float *pjari, *pluas;

//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer

pjari = (float *)malloc(sizeof(float));pjari = (float *)malloc(sizeof(float));

pluas = (float *)malloc(sizeof(float));pluas = (float *)malloc(sizeof(float));

if (if (pjari != NULL && pluas != NULLpjari != NULL && pluas != NULL){//jika berhasil memesan memori){//jika berhasil memesan memori

//gunakan variabel jari dan luas melalui pointer//gunakan variabel jari dan luas melalui pointer

*pjari = 7;*pjari = 7;

*pluas = 3.14 * *pjari * *pjari;*pluas = 3.14 * *pjari * *pjari;

cout << cout << "lingkaran dengan jari-jari : “"lingkaran dengan jari-jari : “ << << *pjari; *pjari;

cout << cout << ““\n\nluasnya : ", *pluas;luasnya : ", *pluas;

(7)

Linked List == kereta????

(8)

Apakah Linked List itu ?

• Elemen (disebut dengan CELL, atau SEL dalam bahasa Indonesia) yang mungkin terletak terpisah-pisah di memory, disambungkan dengan pointer.

• Tiap sel berisi dua informasi : nilai dan pointer ke sel berikutnya

CCCC

(9)

1. Mudah untuk menambahkan dan menghapus elemen C pada array tidak mungkin menambahkan elemen, karena

banyaknya elemen sudah ditentukan dari awal C

2. Panjang list bisa diubah dengan bebas (panjang array fixed) 3. Mudah untuk menyambungkan beberapa list, maupun

memutuskannya (array tidak bisa)

4. Memungkinkan user mendesain struktur data yang kompleks

(10)

Struktur linked List

Node (elemen)

linked list

saling berkait

melalui pointer. Bagian next sebuah node

menunjuk alamat node selanjutnya

pHead

: pointer yang menunjuk node

pertama

A

pHead

(11)

Struktur linked List

Node terakhir menunjuk NULL

Setiap node terdiri atas

Isi data

Next, yaitu pointer ke node selanjutnya

pada list

A

pHead

(12)

Struktur Sebuah Node

struct node {

//bagian data tipedata data 1; tipedata data 2; …

tipedata data n;

//pointer ke node selanjutnya struct node *next;

};

(13)

Array vs linked list

Cara mengakses elemen

Elemen array diakses lewat indeks

Untuk mengakses elemen linked list, harus dilakukan

penelusuran elemen list  Banyaknya anggota

Banyaknya elemen array ditentukan di awal &

jumlahnya tetap

Elemen linked list dibuat di memori ketika

(14)

Array vs Linked List

Array Linked List

Penambahan dan penghapusan

elemen

Tidak mungkin Mungkin

Panjang list Fixed Bisa diubah

Akses ke elemen cepat (harus mengikuti pointer satu

(15)

Array vs Linked List

13

1 2 3

1 header 2 3 a[0] a[1] a[2]

int a[3]; int n;

Array Linked List

address 13

18 address 1824 address 24

Address tidak berurutan

Akses ke tiap sel dimulai dari header Address tiap sel berurutan

value Pointer ke sel berikutnya (next)

next value next value

(16)

Cara menampilkan isi sel tertentu

• Pada array (misalnya nama array: a), isi sel tertentu dapat ditampilkan dengan cara a[nomer urut sel

keberapa]. Misalnya a[5] akan menampilkan isi sel ke-6. Hal ini karena satu sel dengan sel yang lain terletak

pada posisi yang berurutan di memory.

• Pada linked list, kita tidak tahu secara langsung, sel itu terletak dimana dalam memory.

(17)

Cara menampilkan isi sel tertentu

header

pointer

Sel ke-1→ C isi C value=4

address sel berikutnya=38

37 37 38 40 524 38 2 40 13 52 40 NULL

Sel ke-1

Tampilkan isi (value) sel ke-3 !

(18)

NULL POINTER

• Nilai yang dimiliki sebuah pointer adalah address pada memory dimana data tersimpan

• Pointer yang tidak menunjuk ke address manapun disebut dengan NULL pointer. Maksudnya, satu kondisi khusus dimana pointer itu belum diset dengan sebuah address tertentu

• Pada stdio.h biasanya didefinisikan dengan nilai 0 • Saat fungsi fopen,malloc dieksekusi, jika terdapat

error, maka nilai yang dikembalikan adalah NULL

(19)

Deklarasi head

Sebelum membuat linked list, perlu dideklarasikan dan diinisialisasikan head, yaitu pointer yang menunjuk node pertama dari linked list

(20)

Potongan kode – linked list statis

struct motor { float volts; float amps;

struct motor *next; };

typedef struct motor motor;

void main() {

motor *pm1, *pm2, *pm3; }

1. Isi volts dan amps pada pm1, pm2 dan pm3 dengan data sembarang

2. Isi pm1.next dengan alamat pm2, pm2.next dengan alamat pm3, dan pm3.next dengan NULL

3. Tampilkan isi pm2 hanya dengan menggunakan pointer pm1

4. Tampilkan isi pm3 hanya dengan menggunakan pointer pm2

(21)

Operasi dasar linked list

1. Menambah sebuah node. 2. Menghapus sebuah node. 3. Mencari sebuah node.

(22)

Menambahkan node ke list kosong

Before: Code:

pNew -> next = pHead; // set link to NULL pHead = pNew;// point list to first node

After:

39 pNew

pHead

pPre

39 pNew

pHead

(23)

Menambahkan node ke awal list

Before: Code (same):

pNew -> next = pHead; // set link to NULL pHead = pNew;// point list to first node

After:

39 pNew

pHead

pPre

75 124

39 pNew

pHead

pPre

(24)

Menambahkan node di tengah list

Before: Code

pNew -> next = pPre -> next;

pPre -> next = pNew;

After:

64

pNew

pPre

55 124

64

pNew

pPre

(25)

Menambahkan node akhir list

Before: Code

pNew -> next = NULL;

pPre -> next = pNew;

After:

144 pNew

pPre

55 124

144 pNew

pPre

(26)

Menambahkan node pada linked list

Terdapat empat tahap untuk menambah node linked list:

• Membuat node baru.

(27)

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;

(28)

Menghapus node dari linked list

• Untuk menghapus sebuah node:

– Cari node yang akan dihapus (pCur) dan node pendahulunya (pPre).

(29)

Menghapus node pertama dari linked list

Before: Code:

pHead = pCur -> next; free(pCur);

After:

pHead

pPre

75 124

pCur

pHead

pPre

Recycled 124

(30)

Menghapus node dari linked list – kasus umum

Before: Code:

pPre -> next = pCur -> next; free(pCur);

After:

75 96 124

pPre pCur

75 Recycled 124

(31)

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;

(32)

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;

(33)

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

(34)

Tugas

Referensi

Dokumen terkait

Dengan mengikuti training SW 03, Anda diharapkan dapat menggunakan software AnswerTree yang memiliki berbagai metode analisis untuk melakukan prediksi

* Senarai berantai ganda (doubly linked-list) atau senarai dua arah (two-way list), setiap simpulnya mempunyai 2 buah pointer, dengan pointer pertama menunjuk

Ekuitas merek berbasis pelanggan yang terdiri dari brand salience , brand performance , brand imagery , brand judgments , brand feelings , dan brand resonance

Gambar 4.2 Hubungan Kuat Tekan Bata Beton Ringan pada Umur 28 Hari dengan Penambahan Zat Kapur pada Tiap Tipe Bata Beton Ringan

Namun secara umum apabila efektivitas kinerja tersebut dikaitkan dengan kegiatan pelayanan jasa, suatu kinerja layanan akan dikatakan efektif jika pelanggan merasa puas

Hari peringatan AIDS seduniaini juga menjadi kesempatan untuk memikirkan kembali penyebaran serta informasi terkait kondisi penyakit maut ini serta mengkaji kemajuan upaya

Selain digunakan untuk memberikan latihan simulasi ketakutan yang biasa dialami oleh anak – anak, terdapat perangkat lain pada board game yang akan digunakan untuk

Fungsi deletenode( ) akan menghapus node pada posisi curr jika linked list tidak kosong dan memindahkan pointer curr ke posisi node pertama, atau curr bernilai NULL apabila linked