Circular Linked List, Doubly Linked list, and Circular Doubly Linked List
Single Linked List Circular
Single Linked List Circular adalah Single Linked List yang
pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut
terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk
ke node terdepannya.
Pengertian:
·
Single : artinya field pointer-nya hanya satu
buah saja dan satu arah.
·
Circular : artinya pointer next-nya akan
menunjuk pada dirinya sendiri sehingga berputar
Ilustrasi Single Linked List Circular
-
Setiap node pada linked list mempunyai field
yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi
data.
-
Pada akhir linked list, node terakhir akan
menunjuk ke node terdepan sehingga linked list tersebut berputar. Node terakhir
akan menunjuk lagi ke head.
·
Insertion
·
Deletion
·
Display
Dalam daftar tertaut melingkar, operasi penyisipan dapat
dilakukan dengan tiga cara. Mereka adalah sebagai berikut ...
o Memasukkan
Di Awal Daftar
o Memasukkan
Di Akhir daftar
o Memasukkan
Di Lokasi Tertentu dalam daftar
Memasukkan Di Awal
Daftar
Kita dapat menggunakan langkah-langkah berikut untuk
menyisipkan simpul baru di awal daftar tertaut melingkar ...
Langkah 1 - Buat newNode dengan
nilai yang diberikan.
Langkah 2 - Periksa apakah daftar
itu Kosong ( kepala == NULL )
Langkah 3 - Jika itu Kosong ,
atur head = newNode dan newNode → next = head .
Langkah 4 - Jika Tidak Kosong
maka, tentukan Node pointer ' temp ' dan inisialisasi dengan ' head '.
Langkah 5 - Terus gerakkan ' temp
' ke node berikutnya hingga mencapai ke node terakhir (sampai ' temp → next
== head ').
Langkah 6 - Set ' newNode → next =
head ', ' head = newNode ' dan ' temp → next = head '.
Memasukkan Di Akhir
daftar
Kita dapat menggunakan langkah-langkah berikut untuk
menyisipkan simpul baru di akhir daftar tertaut melingkar ...
Langkah 1 - Buat newNode dengan
nilai yang diberikan.
Langkah 2 - Periksa apakah daftar
itu Kosong ( kepala == NULL ).
Langkah 3 - Jika itu Kosong ,
atur head = newNode dan newNode → next = head .
Langkah 4 - Jika Tidak Kosong
maka, tentukan temp penunjuk simpul dan inisialisasi dengan kepala .
Langkah 5 - Terus pindahkan temp
ke simpul berikutnya hingga mencapai ke simpul terakhir dalam daftar (hingga
temp →
berikutnya == kepala ).
Langkah 6 - Tetapkan temp →
selanjutnya = newNode dan newNode → next = head .
Memasukkan Di Lokasi
Tertentu dalam daftar (Setelah Node)
Kita dapat menggunakan langkah-langkah berikut untuk
menyisipkan simpul baru setelah simpul dalam daftar tertaut melingkar ...
Langkah 1 - Buat newNode dengan
nilai yang diberikan.
Langkah 2 - Periksa apakah daftar
itu Kosong ( kepala == NULL )
Langkah 3 - Jika itu Kosong ,
atur head = newNode dan newNode → next = head .
Langkah 4 - Jika Tidak Kosong
maka, tentukan temp penunjuk simpul dan inisialisasi dengan kepala .
Langkah 5 - Terus pindahkan temp
ke simpul berikutnya hingga mencapai ke simpul setelah itu kami ingin
memasukkan newNode (sampai temp1 → data sama dengan lokasi , di sini
lokasi adalah nilai simpul setelah itu kami ingin memasukkan newNode) .
Langkah 6 - Setiap kali periksa
apakah temp dicapai ke node terakhir atau tidak. Jika sudah mencapai simpul
terakhir maka tampilkan 'Diberikan simpul tidak ditemukan dalam daftar !!!
Penyisipan tidak dimungkinkan !!! ' dan menghentikan fungsinya. Kalau tidak,
pindahkan temp ke node berikutnya.
Langkah 7 - Jika temp dicapai ke
simpul yang tepat setelah itu kami ingin memasukkan newNode kemudian periksa
apakah itu simpul terakhir (temp → berikutnya == kepala).
Langkah 8 - Jika temp adalah node
terakhir maka atur temp → next = newNode dan newNode → next =
head .
Langkah 8 - Jika temp bukan node
terakhir maka atur newNode → next = temp →
berikutnya dan temp → next = newNode .
Dalam daftar tertaut melingkar, operasi penghapusan dapat
dilakukan dengan tiga cara yaitu sebagai berikut ...
- Menghapus dari Awal daftar
- Menghapus dari Akhir daftar
- Menghapus Node Tertentu
Menghapus dari Awal
daftar
Kita dapat menggunakan langkah-langkah berikut untuk
menghapus simpul dari awal daftar tertaut melingkar ...
Langkah 1 - Periksa apakah daftar
itu Kosong ( kepala == NULL )
Langkah 2 - Jika itu Kosong maka, tampilkan 'Daftar Kosong !!! Penghapusan tidak dimungkinkan ' dan menghentikan fungsinya.
Langkah 3 - Jika Tidak Kosong maka, tentukan dua pointer Node 'temp1' dan ' temp2 ' dan inisialisasi keduanya ' temp1 ' dan ' temp2 ' dengan kepala .
Langkah 4 - Periksa apakah daftar hanya memiliki satu simpul ( temp1 → berikutnya == kepala )
Langkah 5 - Jika BENAR maka atur head = NULL dan hapus temp1 (Mengatur kondisi daftar kosong )
Langkah 6 - Jika FALSE pindahkan temp1 hingga mencapai ke node terakhir. (sampai temp1 → selanjutnya == kepala )
Langkah 7 - Kemudian atur head = temp2 → selanjutnya , temp1 → berikutnya = kepala dan hapus temp2 .
Langkah 2 - Jika itu Kosong maka, tampilkan 'Daftar Kosong !!! Penghapusan tidak dimungkinkan ' dan menghentikan fungsinya.
Langkah 3 - Jika Tidak Kosong maka, tentukan dua pointer Node 'temp1' dan ' temp2 ' dan inisialisasi keduanya ' temp1 ' dan ' temp2 ' dengan kepala .
Langkah 4 - Periksa apakah daftar hanya memiliki satu simpul ( temp1 → berikutnya == kepala )
Langkah 5 - Jika BENAR maka atur head = NULL dan hapus temp1 (Mengatur kondisi daftar kosong )
Langkah 6 - Jika FALSE pindahkan temp1 hingga mencapai ke node terakhir. (sampai temp1 → selanjutnya == kepala )
Langkah 7 - Kemudian atur head = temp2 → selanjutnya , temp1 → berikutnya = kepala dan hapus temp2 .
Menghapus dari Akhir
daftar
Kita dapat menggunakan langkah-langkah berikut untuk
menghapus simpul dari ujung daftar tertaut melingkar ...
Langkah 1 - Periksa apakah daftar
itu Kosong ( kepala == NULL )
Langkah 2 - Jika itu Kosong maka,
tampilkan 'Daftar Kosong !!! Penghapusan tidak dimungkinkan ' dan menghentikan
fungsinya.
Langkah 3 - Jika Tidak Kosong
maka, tentukan dua pointer Node 'temp1' dan ' temp2' dan inisialisasi ' temp1 '
dengan kepala .
Langkah 4 - Periksa apakah daftar
hanya memiliki satu Node ( temp1 → berikutnya == kepala )
Langkah 5 - Jika BENAR .
Kemudian, atur head = NULL dan hapus temp1 . Dan berakhir dari fungsinya.
(Pengaturan kondisi daftar kosong )
Langkah 6 - Jika itu SALAH .
Kemudian, atur ' temp2 = temp1 ' dan pindahkan temp1 ke simpul berikutnya.
Ulangi hal yang sama hingga temp1 mencapai ke simpul terakhir dalam daftar.
(sampai temp1 → selanjutnya == kepala )
Langkah 7 - Set temp2 →
selanjutnya = kepala dan hapus temp1 .
Menghapus Node
Tertentu dari daftar
Kita dapat menggunakan langkah-langkah berikut untuk
menghapus simpul tertentu dari daftar tertaut melingkar ...
Langkah 1 - Periksa apakah daftar
itu Kosong ( kepala == NULL )
Langkah 2 - Jika itu Kosong maka,
tampilkan 'Daftar Kosong !!! Penghapusan tidak dimungkinkan ' dan menghentikan
fungsinya.
Langkah 3 - Jika Tidak Kosong
maka, tentukan dua pointer Node 'temp1' dan ' temp2 ' dan inisialisasi ' temp1
' dengan kepala .
Langkah 4 - Terus gerakkan temp1
hingga mencapai ke simpul yang tepat untuk dihapus atau ke simpul terakhir. Dan
setiap kali atur ' temp2 = temp1 ' sebelum memindahkan ' temp1 ' ke simpul
berikutnya.
Langkah 5 - Jika sudah mencapai
node terakhir maka tampilkan 'Diberikan node tidak ditemukan dalam daftar!
Penghapusan tidak mungkin !!! ' . Dan mengakhiri fungsinya.
Langkah 6 - Jika tercapai ke
simpul persis yang ingin kita hapus, maka periksa apakah daftar hanya memiliki
satu simpul ( temp1 → berikutnya == kepala )
Langkah 7 - Jika daftar hanya
memiliki satu simpul dan itu adalah simpul yang akan dihapus maka atur head =
NULL dan hapus temp1 ( gratis (temp1) ).
Langkah 8 - Jika daftar berisi
beberapa node kemudian periksa apakah temp1 adalah simpul pertama dalam daftar
( temp1 == head ).
Langkah 9 - Jika temp1 adalah
simpul pertama maka atur temp2 = kepala dan terus gerakkan temp2 ke simpul
berikutnya sampai temp2 mencapai ke simpul terakhir. Kemudian atur head = head →
selanjutnya , temp2 → nex t = head dan hapus temp1 .
Langkah 10 - Jika temp1 bukan
simpul pertama maka periksa apakah simpul terakhir dalam daftar ( temp1 →
berikutnya == kepala ).
Langkah 1 1- Jika temp1 adalah
simpul terakhir maka atur temp2 → berikutnya = kepala dan hapus temp1
( gratis (temp1) ).
Langkah 12 - Jika temp1 bukan
node pertama dan bukan node lalu setel temp2 → berikutnya = temp1 →
berikutnya dan hapus temp1 ( gratis (temp1) ).
Menampilkan Daftar
Tertaut melingkar
Kita dapat menggunakan langkah-langkah berikut untuk
menampilkan elemen daftar tertaut melingkar ...
Langkah 1 - Periksa apakah daftar
itu Kosong ( kepala == NULL )
Langkah 2 - Jika Kosong , maka
tampilkan 'Daftar Kosong !!!' dan menghentikan fungsinya.
Langkah 3 - Jika bukan Kosong
maka, tentukan 'temp' Node pointer dan inisialisasi dengan kepala .
Langkah 4 - Tetap menampilkan
temp →
data dengan panah ( ---> ) sampai temp mencapai node terakhir
Langkah 5 - Akhirnya tampilkan
temp →
data dengan panah yang menunjuk ke head → data .
Doubly Linked List
Pengenalan Double Linked List
Pengertian
Double Linked List adalah sekumpulan node data yang terurut linear atau
sekuensial dengan dua buah pointer yaitu prev dan next.
Double Linked List adalah linked list dengan node yang
memiliki data dan dua buah reference link (biasanya disebut next dan prev) yang
menunjuk ke node sebelum dan node sesudahnya. Pada implementasinya, terdapat
dua variasi double linked list yaitu circular dan non-circular layaknya pada
single linked list.
Operasi pada Double
Linked List
Double linked list memiliki beberapa operasi dasar pada
list, misalkan penyisipan, penghapusan, menampilkan maju, dan menampilkan
mundur.
·
Insert First: Penyisipan di awal list, sehingga
pointer head juga akan berpindah ke elemen baru.
·
Insert Last: Penyisipan di akhir list, sehingga
pointer tail juga akan berpindah ke elemen baru.
·
Insert After / Before: Penyisipan after/before
kurang lebih sama satu sama lain.
·
Delete First: Penghapusan di awal list, pointer
head akan berpindah ke node selanjutnya,sementara node awal akan di dealokasi.
·
Delete Last: Penghapusan di akhir list, pointer
tail akan berpindah ke node sebelumnya,sementara node akhir akan di dealokasi.
·
Delete Node: Penghapusan node dengan data
tertentu.
Kode berikut menunjukkan operasi penyisipan di awal daftar
yang tertaut ganda.
//insert link at the
first location
void insertFirst(int key, int data) {
//create
a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()) {
//make
it the last link
last = link;
} else {
//update
first prev link
head->prev = link;
}
//point
it to old first link
link->next = head;
//point
first to new first link
head = link;
}
Kode berikut menunjukkan operasi penghapusan pada awal
daftar yang tertaut ganda.
//delete first item
struct node* deleteFirst() {
//save reference to first link
struct node *tempLink = head;
//if only one link
if(head->next == NULL) {
last = NULL;
} else {
head->next->prev = NULL;
}
head = head->next;
//return the deleted link
return tempLink;
}
Kode berikut menunjukkan operasi penyisipan pada posisi
terakhir dari daftar yang ditautkan ganda.
//insert link at the last location
void insertLast(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()) {
//make it the last link
last = link;
} else {
//make link a new last link
last->next = link;
//mark old last node as prev of new link
link->prev = last;
}
//point last to new last node
last = link;
}
Circular Doubly Linked
Double Linked List Circular adalah linked list dengan
menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer
yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya
(prev), serta sebuah field yang berisi data untuk node tersebut.
Double Linked List Circular pointer next dan prev nya
menunjuk ke dirinya sendiri secara circular. Setiap node pada linked list
mempunyai field yang berisi data dan pointer ke node berikutnya & ke node
sebelumnya. Untuk pembentukan node baru, mulanya pointer next dan prev akan
menunjuk ke dirinya sendiri. Jika sudah lebih dari satu node, maka pointer prev
akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node
sesudahnya.
Semua sel yang terdapat pada list disambungkan dengan
pointer, sedangkan tiap sel memiliki tiga komponen yaitu value, pointer ke sel
sebelumnya dan pointer ke sel berikutnya. Dengan memiliki dua buah pointer ini,
maka doubly-linked list dapat diakses dengan dua arah, ke arah depan dan ke
belakang.
Dibutuhkan dua buah variabel pointer yaitu head dan tail.
Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu
menunjuk pada node terakhir.
Referensi:
Comments
Post a Comment