,
LINKED
LIST
(NON
CIRCULAR)
Linked list
• Daftar item tertaut
diatur secara berurutan
• Ukuran perubahan
daftar yang ditautkan sebagai item
disisipkan atau
dihapus
• Alokasi memori
dinamis sering digunakan
dalam implementasi
daftar terkait
• Sepuluh fungsi dasar
digunakan
memanipulasi daftar
tertaut (lihat buku teks).
Definisi Linked
List
Pengolahan data yang kita lakukan menggunakan komputer seringkali mirip dengan
ilustrasi di atas, yang antara lain berupa penyimpanan data dan pengolahan lain
dari sekelompok data yang telah terorganisir dalam sebuah urutan tertentu.
Salah satu cara untuk menyimpan sekumpulan data yang kita miliki adalah
menggunakan larik. Telah kita bicarakan dalam Bab 1, keuntungan dan kerugian
pemakaian larik untuk menyimpan sekelompok data yang banyaknya selalu berubah
dan tidak diketahui dengan pasti kapan penambahan atau penghapusan akan
berakhir
Fundamental
• Daftar tertaut adalah urutan item yang diatur satu
sesudah yang lain.
• Setiap item dalam daftar terhubung ke item berikutnya melalui a
Link
• Setiap item ditempatkan bersama dengan tautan ke
item berikutnya, menghasilkan komponen sederhana yang disebut a
simpul.
Mendeklarasikan Kelas untuk Node
struct Node
{
typedef ganda Item;
Data barang; // data disimpan dalam node
Tautan Node *; // arahkan ke simpul berikutnya
};
Sebuah struct adalah jenis kelas khusus di mana semua anggotanya berada
publik. Dalam hal ini ada dua anggota masyarakat
variabel: data, tautan.
Setiap kali sebuah program perlu merujuk ke jenis barang, kami
dapat menggunakan ekspresi Node :: Item.
Kepala Pointer, Tail Pointer
Biasanya, program tidak benar-benar menyatakan
variabel node. Sebaliknya, daftar itu diakses
melalui satu atau lebih pointer ke node.
Struct Node
{
typedef ganda Item;
Data barang;
Tautan Node *;
};
Node * head_ptr;
Node * tail_ptr;
Single linked list
• Simpul terakhir dalam daftar tertaut tidak
arahkan ke simpul berikutnya.
• Jika tautan tidak menunjuk ke suatu simpul, nilainya adalah
diatur ke NULL.
• NULL adalah konstanta C ++ khusus, dari
fasilitas perpustakaan standar <stdlib.h>
• Penanda NULL sering ditulis 0 (nol).
Penggunaan penunjuk NULL di node terhubung terakhir
daftar:
Untuk
mengakses elemen dalam linked list, dimulai dari head dan menggunakan pointer
next dari elemen selanjutnya untuk berpindah dari elemen ke elemen berikutnya
sampai elemen yang diminta dicapai. Dengan single linke list, list dapat
dilintasi hanya satu arah dari head ke tail karena masing-masing elemen tidak
terdapat link dengan elemen sebelumnya. Sehingga, apabila kita mulai dari head
dan berpindah ke beberapa elemen dan berharap dapat mengakses elemen
sebelumnya, kita harus mulai dari head.
Secara
konseptual, linked list merupakan deretan elemen yang berdampingan. Akan
tetapi, karena elemen-elemen tersebut dialokasikan secara dinamis (menggunakan
malloc), sangat penting untuk diingat bahwa kenyataannya, linked list akan
terpencarpencar di memori Pointer dari elemen ke elemen berarti sebagai
penjamin bahwa semua elemen dapat diakses.
Alokasi Simpul
Ketika
sebuah variabel dideklarasikan, terlebih dahulu harus diinisialisasi. Demikian
juga dengan pengalokasian secara dinamis. Sehingga, fungsi untuk mengalokasikan
sebuah node baru, fungsi allocate_node() menggunakan malloc() untuk mendapatkan
memori aktual, yang akan menginisialisasi suatu field data. next selalu
diinisialisasi sebagai NULL.
Untuk melihat kemungkinan alokasi memori
gagal, maka fungsi allocate_node menghasilkan 0, bila berhasil maka
menghasilkan 1. Untuk membebaskan node digunakan fungsi free_node. Fungsi dari
alokasi node adalah sebagai berikut :
int
allocate_node(int data, list *new)
{
new = (list)
malloc (sizeof(node));
if(new==NULL)
return 0;
new->datalist
= data;
new->next=NULL;
return 1;
}
Memasukkan Node di List Head
Void list_head_insert (Node * head_ptr, const Node :: Item & entri)
{
// Prekondisi: head_ptr adalah penunjuk kepala ke daftar tertaut
// Postcondition: node baru ditambahkan ke depan daftar yang berisi entri, dan
// head_ptr diatur ke titik di node baru.
Node *insert_ptr;
insert_ptr = new Node;
insert_ptr->data = entry;
insert_ptr->link = head_ptr;
head_ptr = insert_ptr; }
Mencari Daftar untuk Item
Node* list_search(Node* head_ptr, const Node::Item& target)
{
// Prekondisi: head_ptr adalah penunjuk kepala ke daftar tertaut
// Postcondition: nilai kembalian adalah pointer ke node pertama yang berisi
// target yang ditentukan. Mengembalikan NULL jika tidak ditemukan simpul yang cocok.
Node *cursor;
for(cursor = head_ptr; cursor != NULL; cursor = cursor->link)
if(target == cursor->data)
return cursor;
return NULL;
}
Menghapus Node di List Head
void list_head_remove(Node* head_ptr)
{
// Prekondisi: head_ptr adalah penunjuk kepala ke daftar tertaut
// Postcondition: node pertama dihapus dari daftar depan, dan
// head_ptr diatur untuk menunjuk pada head_ptr-> tautan. Node yang dihapus dihapus
Node *remove_ptr;
remove_ptr = head_ptr;
head_ptr = head_ptr->link;
delete remove_ptr;
}
Menghapus bukan Node di List Head
void
list_remove(Node* previous_ptr)
{
// Prekondisi: previous_ptr adalah pointer ke node dalam daftar tertaut
// Postcondition: node dihapus dari daftar depan, dan
// dihapus node dihapus
Node
*remove_ptr;
remove_ptr
= previous_ptr->link;
previous_ptr->link
= remove_ptr->link;
delete
remove_ptr;
}
Daftar
pustaka:
Kruse
and Ryba Textbook.”Lngked List” from cs.bu.edu/fac/gkollios/cs113/Slides/linkedlist.pdf
Martiana,E,K.(2009).
“Senarai berantai (linked list)” from
entin.lecturer.pens.ac.id




Tidak ada komentar:
Posting Komentar