-->

I'M Bayu Pradika

Graphic Designer . Web Developer . Programmer

Minggu, 28 Agustus 2022

Algoritma Dan Struktur Data BAB VII (Double Linked List 1)

 

  

Double Linked List 1

printf("Hallo Para Programmer!!"); 

printf("Disini Saya Akan Membahas Mengenai Double Linked List Dalam Bahasa C/C++"); 

printf("Terus Ikuti Blog Ini Untuk Mendapatkan Artikel Bermanfaat Selanjutnya yah");

printf("Selamat Belajar!!");

Pengertian

Double linked list dibentuk dengan menyusun sejumlah elemen sehingga pointer next menunjuk ke elemen yang mengikutinya dan pointer back menunjuk ke elemen yang mendahuluinya. Dalam gambar 7.1 ini diilustrasikan sebuah simpul dalam double linked list. Info adalah data yang digunakan dalam simpul, back adalah pointer yang menunjuk pada simpul sebelumnya, dan next adalah pointer yang menunjuk pada simpul sesudahnya




1. Bagaimana Membangun Double linked list

Untuk membangun sebuah linked list, maka terdapat beberapa langkah yang harus disiapkan. Langkah tersebut adalah sebagai berikut

1. Deklarasi

2. Alokasi memori

3. Mengisi data

4. Menyiapkan untuk dihubungkan dengan data baru berikutnya

1.1 Deklarasi Simpul

Double linked list terdiri dari elemen-elemen individu, dimana masing-masing dihubungkan dengan dua pointer. Masing-masing elemen terdiri dari tiga bagian, yaitu sebuah data dan sebuah pointer yang berisi alamat data berikutnya disebut dengan next dan pointer yang berisi alamat data sebelumnya disebut before. Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan cara menunjuk pointer next suatu elemen ke elemen yang mengikutinya. Pointer before pada elemen terakhir merupakan NULL, yang menunjukkan awal dari suatu list. Pointer next pada elemen terakhir merupakan NULL, yang menunjukkan akhir dari suatu list. Pada Gambar 7.2 ditunjukkan deklarasi untuk sebuah simpul menggunakan struktur yang diikuti deklarasi sebuah variable yang menggunakan struktur tersebut.

Dari Gambar 7.2 didapatkan gambaran sebuah simpul pada Gambar 7.3.

1.2 Alokasi Memori

Ketika sebuah variabel dideklarasikan, terlebih dahulu harus diinisialisasi. Demikian juga dengan pengalokasian secara dinamis. Sehingga, fungsi untuk mengalokasikan sebuah node baru, fungsi alokasi_simpul() 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 alokasi_simpul() menghasilkan NULL, bila berhasil maka menghasilkan sebuah simpul. Fungsi dari alokasi_simpul() adalah sebagai berikut :

struct simpul* alokasi_simpul()

{

struct simpul * new;

new = (struct simpul*)malloc(sizeof(struct simpul));

if(new==NULL)

return NULL;

else

{

new->next=NULL;

new->before=NULL;

return new;

}

}

1.3 Mengisi Data Dan Menyiapkan Untuk Dihubungkan Dengan Data Berikutnya

Setelah melakukan deklarasi untuk simpul dan terdapat fungsi untuk melakukan alokasi memori maka keduanya kita gunakan untuk membangun sebuah double linked list dengan perintah sebagai berikut:

Dengan perintah pada Gambar 7.4 didapatkan ilustrasi alokasi memori untuk sebuah simpul seperti Gambar 7.5.


2. Operasi Pada Double Linked List

Terdapat beberapa Operasi yang penting pada double linked list, yaitu:

1. Menyisipkan sebagai simpul ujung(awal) dari linked list.

2. Membaca atau menampilkan

3. Mencari sebuah simpul tertentu

4. Menghapus simpul tertentu (simpul depan)

5. Menghapus simpul tertentu (simpul di tengah)

6. Menghapus simpul tertentu (simpul terakhir)

7. Menyisipkan sebelum simpul tertentu

8. Menyisipkan setelah simpul tertentu

2.1 Menyisipkan Sebagai Simpul Akhir Dari Double linked list

Setelah mendeklarasikan, mengisi data dan menyiapkan untuk dihubungkan dengan simpul berikutnya untuk menciptakan simpul pertama seperti yang dilakukan sebelumnya. Kita bisa melanjutkan dengan operasi menyisipkan sebagai simpul ujung dari linked list. Perintah untuk menyisipkan simpul kedua dst sebagai simpul paling ujung dari linked list adalah sebagai berikut:

baru = alokasi_simpul ();

printf("Nama :");scanf("%s",&baru->nama);

printf("NRP :");scanf("%d",&baru->nrp);

if(j!=0)

{

tail->next=baru;

baru->before=tail;

tail=baru;

}


2.2 Membaca Atau Menampilkan

Berbeda dengan single linked list, untuk double linked list kita dapat menampilkan data secara FIFO(First In First Out) melalui head atau secara LIFO(Last In First Out) melalui tail. Langkah-langkah untuk membaca atau menampilkan double linked list dengan prinsip FIFO adalah sebagai berikut:

1. Inisialisasi sebuah variabel bertipe struct simpul* (bacaFIFO) dengan head

2. Tampilkan data nama dan nrp yang ada pada tampil

3. Jalankan bacaFIFO = bacaFIFO->next

4. Ulangi langkah 2 selama tampil tidak sama dengan NULL

Berikut ini adalah perintah untuk membaca atau menampilkan data pada double linked list dengan prinsip FIFO

bacaFIFO = head;

while (bacaFIFO!=NULL)

{

printf(“%s”,tampil->nama);

printf(“%d”,tampil->n rp);

bacaFIFO = bacaFIFO -> next;

}


Sedangkan langkah-langkah untuk membaca atau menampilkan double linked list dengan prinsip LIFO adalah sebagai berikut:

1. Inisialisasi sebuah variabel bertipe struct simpul* (bacaLIFO) dengan tail

2. Tampilkan data nama dan nrp yang ada pada tampil

3. Jalankan bacaLIFO = bacaLIFO->before

4. Ulangi langkah 2 selama tampil tidak sama dengan NULL

Berikut ini adalah perintah untuk membaca atau menampilkan data pada double linked list dengan prinsip LIFO

bacaLIFO = tail;

while (bacaLIFO!=NULL)

{

printf(“%s”,tampil->nama);

printf(“%d”,tampil->nrp);

bacaLIFO = bacaLIFO -> before;

}

2.3 Mencari Simpul Tertentu 

Langkah-langkah untuk mencari simpul tertentu pada linked list yang sudah terbentuk di atas adalah sebagai berikut: 

1. Inisialisasi sebuah variabel bertipe struct simpul* (cari) dengan head 

2. Ulangi langkah 3 jika data pada simpul cari tidak sama dengan data yang dicari atau cari tidak sama NULL 

3. Jalankan cari = cari->next 

Berikut ini adalah perintah untuk mencari sebuah data pada single linked list

cari = head; 

while (cari->nama!=nama3) 

cari = cari->next;

2.4 Menghapus Simpul Tertentu (Simpul Depan) 

Langkah-langkah untuk menghapus simpul tertentu (depan) dari double linked list adalah sebagai berikut: 

1. Inisialisasi sebuah variabel bertipe struct simpul* (hapus) dengan head 

2. Jika hapus->nama sama dengan head->nama lakukan langkah 3-5 

3. Arahkan head ke head->next 

4. Arahkan head->before ke NULL 

5. Bebaskan simpul hapus Berikut ini adalah perintah untuk menghapus simpul depan dari double linked list:

hapus = head; 

if (hapus->nama==head->nama) 

head=head->next; 

head->before=NULL; 

free(hapus); 

}


2.5 Menghapus Simpul Tertentu (Simpul Tengah) 

Langkah-langkah untuk menghapus simpul tertentu (belakang) dari double linked list adalah sebagai berikut: 

1. Inisialisasi sebuah variabel bertipe struct simpul* (hapus) dengan head 

2. Lakukan langkah 3 selama data pada simpul hapus tidak sama dengan data yang dicari 

3. Arahkan hapus ke hapus->next 

4. Arahkan hapus->before->next ke hapus->next 

5. Arahkan hapus->next->before ke hapus->before 

6. Bebaskan simpul hapus 

Berikut ini adalah perintah untuk menghapus simpul depan dari double linked list:

hapus = head; 

while (hapus->nama!=nama3) 

hapus = hapus -> next; 

hapus->before->next=hapus->next; 

hapus->next->before=hapus->before; 

free(hapus);




2.6 Menghapus Simpul Tertentu (Simpul Terakhir) 

Langkah-langkah untuk menghapus simpul tertentu (depan) dari double linked list adalah sebagai berikut: 

1. Inisialisasi sebuah variabel bertipe struct simpul* (hapus) dengan head 

2. Lakukan langkah 3 selama data pada simpul hapus tidak sama dengan data yang dicari 

3. Arahkan hapus ke hapus->next 

4. Jika hapus->nama sama dengan tail->nama lakukan langkah 3-5 

5. Arahkan tail ke tail->before 

6. Arahkan tail->next ke NULL 

7. Bebaskan simpul hapus 

Berikut ini adalah perintah untuk menghapus simpul depan dari double linked list:

hapus = head; 

while (hapus->nama!=nama3) 

hapus = hapus -> next; 

if (hapus->nama==tail->nama) 

tail=tail->before; 

tail->next=NULL; 

free(hapus); 

}











Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna Veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

0 comments:

Categories

Contact Us

BAYU
+62 896-2690-9619
Kampar, Riau, Indonesia