SINGLE LINKED LIST SLL STRUKTUR DATA Teknik Informatika

  • Slides: 43
Download presentation
SINGLE LINKED LIST (SLL) STRUKTUR DATA Teknik Informatika S 1

SINGLE LINKED LIST (SLL) STRUKTUR DATA Teknik Informatika S 1

MATERI : : TYPE DATA DINAMIS – SINGLE LINKED LIST • Array vs Linked

MATERI : : TYPE DATA DINAMIS – SINGLE LINKED LIST • Array vs Linked List • Alokasi Memori • Single Linked List Non Circular (SLLNC)

ARRAY VS LINKED LIST

ARRAY VS LINKED LIST

Linked List • Linked List adalah satu bentuk struktur data, berisi kumpulan data (node)

Linked List • Linked List adalah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung-menyambung, dinamis dan terbatas. • Linked List sering disebut juga Senarai Berantai • Linked List saling terhubung dengan bantuan variabel pointer • Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.

Array VS Linked List

Array VS Linked List

Variabel Statis VS Dinamis (1) • Variabel Statis: – Tidak bisa dihapus dan diubah

Variabel Statis VS Dinamis (1) • Variabel Statis: – Tidak bisa dihapus dan diubah ukurannya – Variabel statis dapat diakses hanya dengan menggunakan namanya (bila ingin menunjuk pada suatu posisi dalam array dapat dilakukan dengan menggunakan indeks) • Variabel Dinamis: – Variabel yang dibuat (dan mungkin juga dihapus) selama eksekusi progam. – Variabel dinamis belum nyata ada pada saat program dikompilasi – Satu-satunya cara untuk mengakses variabel dinamis adalah dengan menggunakan pointer – Memiliki suatu tipe tertentu seperti halnya variabel biasa.

Variabel Statis VS Dinamis (2)

Variabel Statis VS Dinamis (2)

ALOKASI MEMORI

ALOKASI MEMORI

Alokasi Memori (1) • Variabel statis menempati bagian memori yang disebut data segment, sehingga

Alokasi Memori (1) • Variabel statis menempati bagian memori yang disebut data segment, sehingga tidak bisa dihapus dari memori begitu program dieksekusi atau tidak bisa diubah ukuran elemennya jika variabel tersebut bertipe array. • Variabel statis menempati bagian memori yang disebut data segment yang dibatasi ukurannya oleh compiler(maksimum 64 Kbyte).

Alokasi Memori (2) • Variabel dinamis di dalam bagian memori yang disebut dengan heap.

Alokasi Memori (2) • Variabel dinamis di dalam bagian memori yang disebut dengan heap. • Memori heap adalah memori yang masih tersedia setelah program dimuat kedalam memori dan alokasi memori untuk pendeklarasian variabel sudah dilakukan

Alokasi Memori (3) • Program yang kemungkinan besar akan membutuhkan jenis, struktur dan ukuran

Alokasi Memori (3) • Program yang kemungkinan besar akan membutuhkan jenis, struktur dan ukuran data yang lebih beragam, harus menggunakan variabel dinamis. • Penggunaan variabel dinamis mutlak diperlukan untuk membuat program yang menggunakan struktur data dinamis (misalnya linked-list).

Alokasi Memori Secara Statis int x; x 100 113

Alokasi Memori Secara Statis int x; x 100 113

Alokasi Memori Secara Statis int x; x=10; x 100 113

Alokasi Memori Secara Statis int x; x=10; x 100 113

Alokasi Memori Secara Statis int x; x=10; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; 101 a x 10 100

Alokasi Memori Secara Statis int x; x=10; int a[3]; 101 a x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101 a x 10

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101 a x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2 x 4) =

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2 x 4) = 109 101 a x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2 x 4) =

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2 x 4) = 109 101 a x 10 109 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2 x 4) =

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2 x 4) = 109 101 a x 8 100 109 10 113

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101 a x 8

Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101 a x 8 100 109 10 113

Alokasi Memori Secara Statis int x; x=10; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[5]; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[5]; x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[5]; ? ? x 10 100

Alokasi Memori Secara Statis int x; x=10; int a[5]; ? ? x 10 100 113

Alokasi Memori Secara Statis int x; x=10; int a[5]; x 10 100 113 117

Alokasi Memori Secara Statis int x; x=10; int a[5]; x 10 100 113 117 a

Alokasi Memori Secara Statis int x; x=10; int a[5]; x 10 100 113 117

Alokasi Memori Secara Statis int x; x=10; int a[5]; x 10 100 113 117 a

Alokasi Memori Secara Dinamis(1) Fungsi Malloc • Malloc adalah fungsi untuk mengalokasikan memory Contoh

Alokasi Memori Secara Dinamis(1) Fungsi Malloc • Malloc adalah fungsi untuk mengalokasikan memory Contoh dari malloc() : int *x; x = (int*) malloc (3 * sizeof(int)); if(x==NULL) { printf(“Error di mallocn”); exit(0); } else { printf(“Lakukan operasi memori dinamis”); }

Alokasi Memori Secara Dinamis(2) • Alokasi memori dibuat tersendiri dengan menggunakan fungsi Alokasi bertipe

Alokasi Memori Secara Dinamis(2) • Alokasi memori dibuat tersendiri dengan menggunakan fungsi Alokasi bertipe address untuk parameter data yang akan dimasukkan address Alokasi(infotype X) { P = (address)malloc(sizeof(Elmt. List)); if(P!=Nil) { Info(P) = X; Next(P) = Nil; } return (P); }

Alokasi Memori Secara Dinamis(2) • Penggunaan fungsi free() digunakan untuk mendealokasikan penggunaan data pada

Alokasi Memori Secara Dinamis(2) • Penggunaan fungsi free() digunakan untuk mendealokasikan penggunaan data pada memori void Dealokasi(address *P) { free(*P); }

SINGLE LINKED LIST NON CIRCULAR

SINGLE LINKED LIST NON CIRCULAR

Bentuk Node Single Linked List non Circular(1) Pengertian: • Single : artinya field pointer-nya

Bentuk Node Single Linked List non Circular(1) Pengertian: • Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULL • Linked List : artinya node-node tersebut saling terhubung satu sama lain

Bentuk Node Single Linked List non Circular(2) Pengertian: • Setiap node pada linked list

Bentuk Node Single Linked List non Circular(2) Pengertian: • Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. • Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.

Bentuk Node Single Linked List non Circular(3) • 8 9 10 102

Bentuk Node Single Linked List non Circular(3) • 8 9 10 102

Bentuk Node Single Linked List non Circular(4) • 8 9 10 8 100 103

Bentuk Node Single Linked List non Circular(4) • 8 9 10 8 100 103 9 114 10 130

Bentuk Node Single Linked List non Circular(5) • 8 9 10 • Linked list

Bentuk Node Single Linked List non Circular(5) • 8 9 10 • Linked list adalah struktur data yang terdiri dari rangkaian node - node 8 100 103 9 114 10 130 0

Pembentukan Single Linked List non Circular(1) struct node { int data; node* next; };

Pembentukan Single Linked List non Circular(1) struct node { int data; node* next; }; Node 8 103 114 Node 9 114 130 Node 10 130 0

Pembentukan Single Linked List non Circular(2) Contoh lain Deklarasi Node typedef struct TNode{ int

Pembentukan Single Linked List non Circular(2) Contoh lain Deklarasi Node typedef struct TNode{ int data; TNode *next; }; Penjelasan: • Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari TNode • Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.

SLLNC MENGGUNAKAN HEAD (1) • Dibutuhkan satu buah variabel pointer: head • Head akan

SLLNC MENGGUNAKAN HEAD (1) • Dibutuhkan satu buah variabel pointer: head • Head akan selalu menunjuk pada node pertama Deklarasi Pointer Penunjuk Kepala Single Linked List • Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama dalam linked list (dalam hal ini adalah head). Deklarasinya sebagai berikut: • TNode *head;

SLLNC MENGGUNAKAN HEAD (2) Fungsi Inisialisasi Single Linked. List void init(){ head = NULL;

SLLNC MENGGUNAKAN HEAD (2) Fungsi Inisialisasi Single Linked. List void init(){ head = NULL; } Function untuk mengetahui kosong tidaknya Single Linked. List • Jika pointer head tidak menunjuk pada suatu node maka kosong int is. Empty(){ if(head == NULL) return 1; else return 0; }

SLLNC MENGGUNAKAN FIRST • Kondisi List Kosong tergantung pada penggunaan variabel yang dideklarasikan (head/first).

SLLNC MENGGUNAKAN FIRST • Kondisi List Kosong tergantung pada penggunaan variabel yang dideklarasikan (head/first). Contoh ilustrasi lain:

SLLNC MENGGUNAKAN FIRST & LAST • Variasi lain dari Single Linked List dengan Penunjuk

SLLNC MENGGUNAKAN FIRST & LAST • Variasi lain dari Single Linked List dengan Penunjuk Head, adalah penggunaan penunjuk Last. Untuk menunjuk node paling akhir

Operasi-operasi pada List Linier • Operasi-operasi Dasar/Primitif yang bisa dilakukan: 1. Penambahan Depan (insert

Operasi-operasi pada List Linier • Operasi-operasi Dasar/Primitif yang bisa dilakukan: 1. Penambahan Depan (insert first) 2. Penambahan Belakang (insert last) 3. Penambahan Setelah (insert after) 4. Penghapusan Depan (delete first) 5. Penghapusan Belakang (delete last) 6. Penghapusan Setelah (delete after) 7. Pencarian Data dan Alamat 8. Pencarian Nilai Max dan Min 9. Pengurutan (Sorting ASC, DESC) 10. Invers (Pembalikan)

Tugas Kelompok • Next Week Presentasi operasi-operasi dasar Single Linked List dengan penunjuk First/Head

Tugas Kelompok • Next Week Presentasi operasi-operasi dasar Single Linked List dengan penunjuk First/Head Kelp 1: • Penambahan & Penghapusan Depan Kelp 2: • Penambahan & Penghapusan Belakang Kelp 3: • Penambahan & Penghapusan Setelah