SINGLE LINKED LIST (SLL) STRUKTUR DATA Teknik Informatika S1
MATERI :: TYPE DATA DINAMIS – SINGLE LINKED LIST Array vs Linked List Alokasi Memori Single Linked List Non Circular (SLLNC)
ARRAY VS LINKED LIST
Linked List Linked List adalah salah 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
Variabel Statis VS Dinamis (1) 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)
ALOKASI MEMORI
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. 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 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=10; x 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]; 101 a x 10 100 113
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+(2x4) = 109 101 a x 10 100 113
Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2x4) = 109 101 a x 10 100 109 113
Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101+(2x4) = 109 101 a x 8 10 100 109 113
Alokasi Memori Secara Statis int x; x=10; int a[3]; a[2]=8; 101 a x 8 10 100 109 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 117 a 10 100 113
Alokasi Memori Secara Statis int x; x=10; int a[5]; x 117 a 10 100 113
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 malloc\n”); exit(0); } else { printf(“Lakukan operasi memori dinamis”); }
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(ElmtList)); 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 memori void Dealokasi(address *P) { free(*P); }
Single linked list non circular
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 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 100 102
Bentuk Node Single Linked List non Circular(4) 8 9 10 8 9 10 100 103 114 130
Bentuk Node Single Linked List non Circular(5) 8 9 10 Linked list adalah struktur data yang terdiri dari rangkaian node - node 8 114 9 130 10 100 103 114 130
Pembentukan Single Linked List non Circular(1) struct node { int data; node* next; }; Node Node Node 8 114 9 130 10 103 114 130
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 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 LinkedList void init(){ head = NULL; } Function untuk mengetahui kosong tidaknya Single LinkedList Jika pointer head tidak menunjuk pada suatu node maka kosong int isEmpty(){ if(head == NULL) return 1; else return 0;
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 Head, adalah penggunaan penunjuk Last. Untuk menunjuk node paling akhir
Operasi-operasi pada List Linier Operasi-operasi Dasar/Primitif yang bisa dilakukan: Penambahan Depan (insert first) Penambahan Belakang (insert last) Penambahan Setelah (insert after) Penghapusan Depan (delete first) Penghapusan Belakang (delete last) Penghapusan Setelah (delete after) Pencarian Data dan Alamat Pencarian Nilai Max dan Min Pengurutan (Sorting ASC, DESC) Invers (Pembalikan)
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