8. Singly Linear Linked List Data Structure + Algorithm = Program UNIV. INDONUSA Esa Unggul
UNIV. INDONUSA Esa Unggul Apakah Linked List? Linked list merupakan sekumpulan item di mana masing-masing item adalah bagian dari suatu node yang juga mengandung suatu link ke suatu node . Visualisasi sebuah node: item link UNIV. INDONUSA Esa Unggul
Apakah Linked List? (Lanjutan) Dibandingkan dengan array, sebuah linked list memiliki keuntungan berupa kemampuan untuk mengatur-ulang item-item secara efisien. Let’s make our hands dirty! UNIV. INDONUSA Esa Unggul
UNIV. INDONUSA Esa Unggul Data Structure Di bawah ini diberikan struktur untuk suatu singly linear linked list: struct node{ int data; // item node* next; // a link }; UNIV. INDONUSA Esa Unggul
Data Structure (Lanjutan) class linklist{ private: node* head; public: linklist(){ head = NULL; } // operasi pada linked list }; UNIV. INDONUSA Esa Unggul
Data Structure (Lanjutan) Di sini, struct node menyatakan sebuah node, sedangkan link itu sendiri yang menunjuk ke suatu node diimplementasikan sebagai pointer ke node (node*). Visualisasi: head NULL UNIV. INDONUSA Esa Unggul
Operasi pada Linked List Terdapat beberapa operasi utama pada struktur ini, diantaranya yaitu: menambahkan node, mencari suatu node dengan nilai item tertentu, menghapus node, mengubah nilai item suatu node, memindahkan suatu node, dan mengurutkan node berdasarkan nilai item. Semua node di dalam suatu list dapat dikunjungi dengan mengetahui pointer yang menunjuk ke node pertama (head). UNIV. INDONUSA Esa Unggul
Operasi pada Linked List (Lanjutan) Sebagai contoh di sini akan diberikan kode lengkap untuk menambahkan suatu item sebagai head dan menampilkan semua item suatu list: #include <iostream> using namespace std; struct node{ int data; node* next; } UNIV. INDONUSA Esa Unggul
Operasi pada Linked List (Lanjutan) class linklist{ private: node* head; public: linklist(){ head = NULL; } void additem(int d); void display(); }; UNIV. INDONUSA Esa Unggul
Operasi pada Linked List (Lanjutan) void linklist::additem(int d){ node* newlink = new node; newlink->data = d; newlink->next = head; head = newlink; } void linklist::display(){ node* current = head; while(current!=NULL){ cout << current->data << endl; current = current->next; UNIV. INDONUSA Esa Unggul
Operasi pada Linked List (Lanjutan) int main(){ linklist li; li.additem(1456); li.additem(5); li.additem(9); li.additem(19); li.additem(71); li.display(); return 0; } UNIV. INDONUSA Esa Unggul
UNIV. INDONUSA Esa Unggul Penjelasan Pernyataan linklist li; menginstansiasi objek dengan nama li, dan memanggil konstruktor: linklist(){ head = NULL; } UNIV. INDONUSA Esa Unggul
Penjelasan (lanjutan) , sehingga pada saat itu list adalah kosong: Penyataan: li.additem(1456); akan menambahkan sebuah node dengan nilai item 1456 ke dalam list tersebut: head NULL UNIV. INDONUSA Esa Unggul
Penjelasan (lanjutan) node* newlink = new node; Ekspresi new node akan meminta alokasi memori sebesar node. Kemudian alamat dari memori yang dialokasikan tersebut disimpan ke dalam variabel bertipe pointer-to-node yang bernama newlink. UNIV. INDONUSA Esa Unggul
Penjelasan (lanjutan) Misal alamat tersebut FFFF0001: newlink = FFFF0001 newlink node FFFF0001 newlink FFFF0001 node UNIV. INDONUSA Esa Unggul
Penjelasan (lanjutan) newlink->data = d; Mengisi nilai item dengan d, yaitu 1456, newlink 1456 UNIV. INDONUSA Esa Unggul
Penjelasan (lanjutan) newlink->next = head; Mengisi nilai next dari node yang ditunjuk oleh newlink dengan nilai head, yaitu NULL: newlink 1456 NULL UNIV. INDONUSA Esa Unggul
Penjelasan (lanjutan) head = newlink; Akan membuat head bernilai FFFF0001 atau dengan kata lain menunjuk ke node yang ditunjuk oleh newlink: head 1456 NULL UNIV. INDONUSA Esa Unggul
UNIV. INDONUSA Esa Unggul Delete Jika ptr adalah sebuah pointer-to-node maka pernyataan delete ptr; Akan menghapus/mendealokasikan node yang ditunjuk oleh ptr tersebut. UNIV. INDONUSA Esa Unggul
UNIV. INDONUSA Esa Unggul Hi Einstein! Buat algoritma (member fungsi) untuk menghapus sebuah node. Buat algoritma untuk memindahkan item terbesar pada sebuah list menjadi node terbelakang pada list tersebut. Buat algoritma untuk memindahkan item terkecil pada sebuah list menjadi node terdepan pada list tersebut. UNIV. INDONUSA Esa Unggul