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);
}
0 comments:
Posting Komentar