Anda di halaman 1dari 6

TIF 2301: Struktur Data & Algoritma Sem.

Ganjil 2017

Kuliah 2: Linked Lists


Dosen : Sawaluddin

2.1 Linked Lists


Linked lists dapat dipandang sebagai bracelets or lego blocks sebab mereka memuat node
yang menunjuk (point to) ke link berikutnya dalam barisan (sequence). Jadi linked lists
terdiri dari sequence (barisan) dari node-node. masing-masing node memiliki nilai (value)
dan link (pointer atau reference) ke node lain. Setiap linked list memuat head node yang
menunjuk ke link pertama dan node terakhir memuat null link. Dalam list Singly linked
lists terdiri dari dua slots dalam masing-masing link: a key slot yang memuat konten (atau
nilai) dan next slot yang menunjuk ke link berikutnya dalam sequence.

Singly-linked linear list:

head key next key next key next


L

N IL

Ex. Represent sequence 1, 2, 3 :

head key next key next key next


L 1 2 3

N IL

Beberapa Terminology:
Suatu node successor adalah node berikutnya dalam sequence, node terakhir tidak mempun-
yai successor. Node predecessor adalah node sebelumnya dalam sequence, node pertama
tidak mempunyai predecessor. Panjang (length) suatu list adalah jumlah elemen di dalam-
nya. List boleh saja empty (tidak mempunyai elemen).

2-1
2-2 Lecture 2: Linked Lists

Mendeklarasikan Node:
Linked list terdiri dari node, kita perlu mendeklarasikan sebuah struktur yang mendefinisikan
sebuah node tunggal. Struktur kita harus memiliki setidaknya satu variabel untuk bagian
data dan pointer untuk node berikutnya. Dalam C++ suatu node dideklarasi dengan cara:

struc Node {
int key ;
Node* next ;
};

atau

class Node {
int key ;
Node* next ;
};

Mendefinisikan Linked List:


Definisikan suatu pointer untuk head dari list, head pointer diberi nilai awal NULL ini
menunjukkan list masih kosong.

Node* L = NULL ;

head
L N U LL

Membuat Node Baru:


Alokasikan memory untuk node baru,

L = new Node ;

head key next


L

Inisialisasi atau berikan nilai (content) daripada node dan set pointer ke NULL.
Lecture 2: Linked Lists 2-3

L->key = 1 ;
L->next= NULL ;

head key next


L 1

Untuk menambah satu node lagi dapat dilakukan dengan cara:

L->next = new Node ;


L->next->key = 3 ;
L->next->next = NULL ;

head key next key next


L 1 3

Atau dapat juga dengan cara berikut:

t = new Node ;
t->key = 3 ;
t->next= NULL ;
L->next = t ;

Creation of Linked List Using C++


Sekarang, kita memerlukan sebuah kelas yang memuat fungsi untuk menangani node. Kelas
ini harus memiliki dua petunjuk penting, yaitu head (kepala) dan tail (ekor). Konstruktor
akan membuat mereka NULL untuk menghindari nilai sampah (garbage).

class listNode {
private:
Node *head, *tail;

public:
listNode(){
head=NULL;
tail=NULL;
}
2-4 Lecture 2: Linked Lists

// tambahkan fungsi/method disini

};

Sekarang, kita akan menulis sebuah fungsi untuk node. Proses pembuatan node sangat
sederhana. Kita membutuhkan pointer dari tipe node (yang kita definisikan) dan kita akan
memasukkan nilai ke field data. Field node berikutnya akan dinyatakan sebagai NULL
karena akan menjadi simpul terakhir dari linked list.
Nah, fungsinya akan memiliki kasus yang sangat spesial dimana kita ingin tahu apa yang
akan terjadi jika linked list masih kosong? Kita harus memeriksanya. Apakah Anda ingat
bahwa kepala menunjuk ke simpul pertama? Artinya jika kepala sama dengan NULL maka
kita dapat menyimpulkan bahwa linked list kosong.
Perlu diketahui bahwa jika hanya ada satu node (yang akan kita buat) dalam linked list,
maka disebut head dan tail.
Dan jika sebuah linked list sudah dibuat, maka kita akan memasukkan node ini di akhir
linked list. Kita tahu bahwa simpul terakhir disebut tail. Jadi kita akan membuat node
yang baru dibuat ini di setelah node tail .
Pembuatan node baru di akhir linked list memiliki 2 langkah:

• Menghubungkan node yang baru dibuat dengan node ekor. Berarti menyampaikan
alamat simpul baru ke pointer ekor berikutnya.

• Pointer tail harus selalu menunjuk ke simpul terakhir. Jadi kita akan membuat tail
pointer kita sama dengan node baru.

Method untuk membuat node baru akan seperti ini:

createNode(value)
1 Node ∗ temp =new Node
2 temp- > key =value
3 temp- > next =NULL
4 if (head = =NULL)
5 head =temp
6 tail =temp
7 temp =NULL
8 else
9 tail - > next =temp
10 tail =temp
Lecture 2: Linked Lists 2-5

N U LL Pointer:
N U LL pointer digunakan untuk menunjukkan akhir dari list. Akan selalu di uji (tested)
sebelum menggunakan pinter.

Node* p ;
while( p != NULL ) ......

atau dengan cara yang berikut, keduanya sama.

Node* p ;
while( !p ) ......

List Traversal untuk Display:


Visit setiap node dalam list: tampilkan konten, validasi data, dan sebagainya.

list-Traversal()
1 Node ∗ p =head
2 while p 6= null
3 print content
4 p =p- > next

Menghapus Node dari Lists:


Jika sudah terbiasa dengan membuat linkedlist. Sekarang, saatnya melakukan manipulasi
pada linked list. Linked lists memberi kita fitur yang bagus untuk menghapus sebuah node.
Proses penghapusan juga mudah diterapkan. Struktur dasarnya adalah mendeklarasikan
pointer sementara yang menunjuk node yang akan dihapus. Lalu sedikit bekerja pada link
dari node. Ada juga tiga kasus di node simpul dapat dihapus:

• Menghapus diakhir

• Menghapus diawal

• Menghapus pada posisi tertentu

Menghapus Node diakhir:


Menghapus node terakhir agak sulit dipahami dibanding node pertama. Dalam kasus node
pertama, Anda hanya memerlukan akses ke kepala dan Anda dapat menghapusnya. Tapi
dalam kasus node terakhir, Anda juga memerlukan akses ke node kedua dari node terakhir
2-6 Lecture 2: Linked Lists

dari linked list karena Anda akan menghapus node terakhir dan membuat node sebelumnya
sebagai tail linked list.
Algoritma harus mampu menemukan node yang datang sebelum node terakhir. Hal ini dapat
dicapai dengan melintasi linked list. Buat dua pointer sementara dan misalkan mereka
bergerak melalui seluruh linked list. Pada akhirnya, node sebelumnya akan menunjuk ke
node kedua ke node terakhir dan node saat ini akan menunjuk ke node terakhir, yaitu node
yang akan dihapus. Kita akan menghapus node ini dan membuat node sebelumnya sebagai
tail.

deleteLast()
1 Node ∗ curr =new Node
2 Node ∗ prev =new Node
3 curr =head
4 while (curr - > next 6=NULL)
5 prev =curr
6 curr =curr - > next
7 tail =prev
8 prev - > next =NULL
9 delete curr

Implementasi dengan C++ sebagai berikut:

Anda mungkin juga menyukai