Jurusan Informatika
Fakultas Teknik Industri
Universitas Pembangunan Nasional “Veteran” Yogyakarta
Struktur
Data
Andi Nurkholis, S.Kom., M.Kom.
Doubly & Circular
Linked List
15 September 2025
Definisi Doubly Linked List
Doubly Linked List adalah jenis linked list di mana setiap node memiliki dua
pointer: satu yang mengarah ke node berikutnya (next) dan satu yang
mengarah ke node sebelumnya (prev). Ini memungkinkan traversal bolak-balik
dalam daftar.
Struktur Node dalam Doubly Linked List:
struct Node {
int data; // Menyimpan data
struct Node* next; // Pointer ke node berikutnya
struct Node* prev; // Pointer ke node sebelumnya
};
Kelebihan Doubly Linked List
ĂĽ Traversal Bolak-balik: Memungkinkan traversal baik dari depan maupun
belakang, yang sangat berguna dalam beberapa aplikasi.
ĂĽ Fleksibilitas dalam Insertion dan Deletion: Penghapusan node dapat
dilakukan lebih mudah dengan akses langsung ke node sebelumnya.
ĂĽ Pengkurangan Kesulitan dalam Operasi: Operasi seperti penghapusan dari
kedua ujung bisa dilakukan lebih efisien.
OperasiDasar
Doubly Linked List
1. Menambahkan Node di Awal
(Head)
2. Menambahkan Node di Akhir
(Tail)
3. Menghapus Node
4. Traversing Doubly Linked List
Menambah Node Head
1. Buat node baru menggunakan alokasi memori.
2. Simpan data yang akan dimasukkan ke dalam node baru.
3. Atur pointer next node baru menunjuk ke head lama, dan pointer prev
node baru diisi NULL.
4. Jika head lama tidak kosong, ubah pointer prev head lama menunjuk ke
node baru.
5. Perbarui head agar menunjuk ke node baru sebagai elemen pertama.
Menambah Node Tail
1. Buat node baru melalui alokasi memori.
2. Simpan data yang diinginkan ke dalam node baru.
3. Atur pointer next node baru menjadi NULL, karena akan ditempatkan di
akhir.
4. Hubungkan pointer prev node baru ke node tail lama, dan ubah next tail
lama menunjuk ke node baru.
5. Perbarui tail agar menunjuk ke node baru sebagai elemen terakhir.
Menghapus Node
1. Tentukan node yang akan dihapus (misalnya dengan pencarian berdasarkan
nilai atau posisi).
2. Jika node memiliki prev ≠ NULL, atur next dari node sebelumnya menunjuk
ke node berikutnya.
3. Jika node memiliki next ≠ NULL, atur prev dari node berikutnya menunjuk
ke node sebelumnya.
4. Jika node adalah head, perbarui head ke node berikutnya. Jika node adalah
tail, perbarui tail ke node sebelumnya.
5. Hapus node dari memori (dealokasi).
Traversing Doubly Linked List
1. Inisialisasi pointer current menunjuk ke head.
2. Selama current ≠ NULL, lakukan proses kunjungan (misalnya menampilkan
data).
3. Geser pointer current ke current.next untuk bergerak maju.
4. Jika ingin mundur, mulai dari tail dan geser current ke current.prev.
5. Traversing selesai ketika semua node sudah dikunjungi, baik arah maju
maupun mundur.
Definisi Circular Linked List
Circular Linked List adalah jenis linked list di mana node terakhir menunjuk
kembali ke node pertama, sehingga membentuk lingkaran. Ini bisa menjadi
singly circular atau doubly circular.
Struktur Node dalam Circular Linked List:
struct Node {
int data; // Menyimpan data
struct Node* next; // Pointer ke node berikutnya
};
Kelebihan Circular Linked List
ĂĽ Dukungan untuk Pemrosesan Berulang: Memungkinkan untuk mengulangi
traversal daftar tanpa perlu kembali ke head, cocok untuk aplikasi yang
berulang.
ĂĽ Penggunaan Memori yang Efisien: Tidak perlu mengelola pointer null di
akhir, mengurangi overhead memori.
ĂĽ Pertukaran Data yang Mudah: Cocok untuk aplikasi seperti pemutar musik,
di mana track dapat berulang.
Operasi Dasar
Circular Linked List
1. Menambahkan Node di Awal
(Head)
2. Menambahkan Node di Akhir
(Tail)
3. Menghapus Node
4. Traversing Circular Linked List
Menambah Node Head
1. Buat node baru menggunakan alokasi memori, lalu isi dengan data.
2. Jika list kosong, atur next node baru menunjuk ke dirinya sendiri, kemudian
head diperbarui menjadi node baru.
3. Jika list tidak kosong, hubungkan next node baru ke head lama.
4. Cari node terakhir (tail) dan ubah next-nya menunjuk ke node baru.
5. Perbarui head sehingga menunjuk ke node baru sebagai elemen pertama.
Menambah Node Tail
1. Buat node baru dengan alokasi memori dan isi dengan data.
2. Jika list kosong, atur next node baru menunjuk ke dirinya sendiri, lalu head
dan tail sama-sama menunjuk node baru.
3. Jika list tidak kosong, hubungkan next node baru ke head.
4. Ubah next tail lama agar menunjuk ke node baru.
5. Perbarui tail menjadi node baru sebagai elemen terakhir.
Menghapus Node
1. Tentukan node yang akan dihapus (berdasarkan nilai atau posisi) dengan
traversing mulai dari head.
2. Simpan pointer prev untuk node sebelum target.
3. Jika node target adalah head, cari node terakhir (tail), ubah next-nya
menunjuk ke head baru (head.next).
4. Jika node target bukan head, atur next dari prev menunjuk ke node setelah
target.
5. Dealokasikan node target dari memori.
Traversing Circular Linked List
1. Inisialisasi pointer current menunjuk ke head.
2. Jika list kosong (head = NULL), traversal selesai.
3. Kunjungi node yang ditunjuk current (misalnya cetak data).
4. Geser pointer current ke current.next.
5. Ulangi langkah 3–4 sampai current kembali ke head, lalu hentikan traversal
karena semua node sudah dikunjungi.
Jurusan Informatika
Fakultas Teknik Industri
Universitas Pembangunan Nasional “Veteran” Yogyakarta
Andi Nurkholis, S.Kom., M.Kom.
15 September 2025
Sekian
Terima
Kasih

Struktur Data - 5 Circular dan Doubly Linked List

  • 1.
    Jurusan Informatika Fakultas TeknikIndustri Universitas Pembangunan Nasional “Veteran” Yogyakarta Struktur Data Andi Nurkholis, S.Kom., M.Kom. Doubly & Circular Linked List 15 September 2025
  • 2.
    Definisi Doubly LinkedList Doubly Linked List adalah jenis linked list di mana setiap node memiliki dua pointer: satu yang mengarah ke node berikutnya (next) dan satu yang mengarah ke node sebelumnya (prev). Ini memungkinkan traversal bolak-balik dalam daftar. Struktur Node dalam Doubly Linked List: struct Node { int data; // Menyimpan data struct Node* next; // Pointer ke node berikutnya struct Node* prev; // Pointer ke node sebelumnya };
  • 3.
    Kelebihan Doubly LinkedList ĂĽ Traversal Bolak-balik: Memungkinkan traversal baik dari depan maupun belakang, yang sangat berguna dalam beberapa aplikasi. ĂĽ Fleksibilitas dalam Insertion dan Deletion: Penghapusan node dapat dilakukan lebih mudah dengan akses langsung ke node sebelumnya. ĂĽ Pengkurangan Kesulitan dalam Operasi: Operasi seperti penghapusan dari kedua ujung bisa dilakukan lebih efisien.
  • 4.
    OperasiDasar Doubly Linked List 1.Menambahkan Node di Awal (Head) 2. Menambahkan Node di Akhir (Tail) 3. Menghapus Node 4. Traversing Doubly Linked List
  • 5.
    Menambah Node Head 1.Buat node baru menggunakan alokasi memori. 2. Simpan data yang akan dimasukkan ke dalam node baru. 3. Atur pointer next node baru menunjuk ke head lama, dan pointer prev node baru diisi NULL. 4. Jika head lama tidak kosong, ubah pointer prev head lama menunjuk ke node baru. 5. Perbarui head agar menunjuk ke node baru sebagai elemen pertama.
  • 6.
    Menambah Node Tail 1.Buat node baru melalui alokasi memori. 2. Simpan data yang diinginkan ke dalam node baru. 3. Atur pointer next node baru menjadi NULL, karena akan ditempatkan di akhir. 4. Hubungkan pointer prev node baru ke node tail lama, dan ubah next tail lama menunjuk ke node baru. 5. Perbarui tail agar menunjuk ke node baru sebagai elemen terakhir.
  • 7.
    Menghapus Node 1. Tentukannode yang akan dihapus (misalnya dengan pencarian berdasarkan nilai atau posisi). 2. Jika node memiliki prev ≠ NULL, atur next dari node sebelumnya menunjuk ke node berikutnya. 3. Jika node memiliki next ≠ NULL, atur prev dari node berikutnya menunjuk ke node sebelumnya. 4. Jika node adalah head, perbarui head ke node berikutnya. Jika node adalah tail, perbarui tail ke node sebelumnya. 5. Hapus node dari memori (dealokasi).
  • 8.
    Traversing Doubly LinkedList 1. Inisialisasi pointer current menunjuk ke head. 2. Selama current ≠ NULL, lakukan proses kunjungan (misalnya menampilkan data). 3. Geser pointer current ke current.next untuk bergerak maju. 4. Jika ingin mundur, mulai dari tail dan geser current ke current.prev. 5. Traversing selesai ketika semua node sudah dikunjungi, baik arah maju maupun mundur.
  • 9.
    Definisi Circular LinkedList Circular Linked List adalah jenis linked list di mana node terakhir menunjuk kembali ke node pertama, sehingga membentuk lingkaran. Ini bisa menjadi singly circular atau doubly circular. Struktur Node dalam Circular Linked List: struct Node { int data; // Menyimpan data struct Node* next; // Pointer ke node berikutnya };
  • 10.
    Kelebihan Circular LinkedList ĂĽ Dukungan untuk Pemrosesan Berulang: Memungkinkan untuk mengulangi traversal daftar tanpa perlu kembali ke head, cocok untuk aplikasi yang berulang. ĂĽ Penggunaan Memori yang Efisien: Tidak perlu mengelola pointer null di akhir, mengurangi overhead memori. ĂĽ Pertukaran Data yang Mudah: Cocok untuk aplikasi seperti pemutar musik, di mana track dapat berulang.
  • 11.
    Operasi Dasar Circular LinkedList 1. Menambahkan Node di Awal (Head) 2. Menambahkan Node di Akhir (Tail) 3. Menghapus Node 4. Traversing Circular Linked List
  • 12.
    Menambah Node Head 1.Buat node baru menggunakan alokasi memori, lalu isi dengan data. 2. Jika list kosong, atur next node baru menunjuk ke dirinya sendiri, kemudian head diperbarui menjadi node baru. 3. Jika list tidak kosong, hubungkan next node baru ke head lama. 4. Cari node terakhir (tail) dan ubah next-nya menunjuk ke node baru. 5. Perbarui head sehingga menunjuk ke node baru sebagai elemen pertama.
  • 13.
    Menambah Node Tail 1.Buat node baru dengan alokasi memori dan isi dengan data. 2. Jika list kosong, atur next node baru menunjuk ke dirinya sendiri, lalu head dan tail sama-sama menunjuk node baru. 3. Jika list tidak kosong, hubungkan next node baru ke head. 4. Ubah next tail lama agar menunjuk ke node baru. 5. Perbarui tail menjadi node baru sebagai elemen terakhir.
  • 14.
    Menghapus Node 1. Tentukannode yang akan dihapus (berdasarkan nilai atau posisi) dengan traversing mulai dari head. 2. Simpan pointer prev untuk node sebelum target. 3. Jika node target adalah head, cari node terakhir (tail), ubah next-nya menunjuk ke head baru (head.next). 4. Jika node target bukan head, atur next dari prev menunjuk ke node setelah target. 5. Dealokasikan node target dari memori.
  • 15.
    Traversing Circular LinkedList 1. Inisialisasi pointer current menunjuk ke head. 2. Jika list kosong (head = NULL), traversal selesai. 3. Kunjungi node yang ditunjuk current (misalnya cetak data). 4. Geser pointer current ke current.next. 5. Ulangi langkah 3–4 sampai current kembali ke head, lalu hentikan traversal karena semua node sudah dikunjungi.
  • 16.
    Jurusan Informatika Fakultas TeknikIndustri Universitas Pembangunan Nasional “Veteran” Yogyakarta Andi Nurkholis, S.Kom., M.Kom. 15 September 2025 Sekian Terima Kasih