Struktur Data
Double Linked List Non Circular
N AMA
N IM
K ELAS
: 311310015
: STRUKTUR DATA
Universitas Ma Chung
Malang 2014
Source Code
int main(){
cout<<"Setelah Fungsi Insert Depan: \n";
insertDepan(13);
insertDepan(10);
insertDepan(8);
insertDepan(10);
tampil();
cout<<"Hasil Fungsi Insert Belakang: \n";
insertBelakang(11);
insertBelakang(12);
insertBelakang(14);
insertBelakang(11);
tampil();
cout<<"Hasil Fungsi Hapus Depan: \n";
hapusDepan();
tampil();
cout<<"Hasil Fungsi Hapus Depan: \n";
hapusBelakang();
tampil();
cout<<"Hasil Menghapus Semua data: \n";
clear();
tampil();
getch();
return 0;
}
Screenshot
a. Penyisipan di depan/awal
Operasi ini berguna untuk menambahkan satu simpul baru di posisi pertama. Langkah
pertama untuk penambahan data adalah pembuatan simpul baru dan mengisinya dengan data
pada field info-nya. Pointer yang menunjuk ke simpul tersebut dipanggil dengan nama
baru.
b.
Penyisipan di belakang/akhir
Operasi ini berguna untuk menambahkan elemen baru di posisi akhir. Langkah pertama untuk
penambahan data adalah pembuatan elemen baru dan pengisian nilai infonya. Pointer yang
menunjuk ke data tersebut dipanggil dengan nama baru.
Penghapusan
a.
Penghapusan di awal/depan
Penghapusan data di awal adalah proses menghapus simpul pertama (yang ditunjuk oleh
variabel pointer Awal), sehingga variabel pointer Awal akan berpindah ke simpul
berikutnya. Ada 3 kondisi yang perlu diperhatikan yaitu kondisi linked list masih kosong,
kondisi linked list hanya memiliki 1 data, dan kondisi linked list yang memiliki data lebih dari
1 elemen
b.
Penghapusan di akhir/belakang
Penghapusan data di akhir adalah proses penghapusan pada simpul akhir (yang ditunjuk
pointer akhir) dengan cara mengcopy pointer akhir dengan pointer hapus dan
memindahkan pointer akhir ke tetangga kirinya. dan datapun dapat di hapus.
Penelusuran/traversal
Prosesnya secara umum sama seperti penelusuran pada single liked list.
Pencarian /Searching
Pencarian dilakukan dengan memeriksa data yang ada dalam linked list dengan data yang
dicari. Pencarian dilakukan dari data pertama sampai data ditemukan atau pointer pencari
(bantu) telah mencapai akhir dari list yang menandakan bahwa data yang dicari tidak
ditemukan.
Pengurutan/sorting
Proses penyusunan data acak menjadi tersusun baik secara ascending ataupun
secara discending pada dasarnya sama seperti pada single linked list, hanya saja pada double
linked list dapat dilakukan dari kiri ke kanan atau dari kanan ke kiri dalam hal menyusuri list.
o
void init()
{
TNode *head;
head = NULL;
}
Perlu diperhatikan :
// inisialisasi awal
int isEmpty()
{
if(head == NULL)
return 1;
else
return 0;
}
Perlu diperhatikan :
Setelah memahami penggunaan fungsi ini, bukalah Turbo C++ Anda,
dan copy-kan fungsi ini.
1)
NULL;
NULL;
// jika Linked List sudah ada datanya
head;
baru;
printf(data masuk\n);
}
while(bantu->next != NULL)
{
bantu = bantu->next
}
baru->next = baru;
head->prev = bantu;
}
printf(data masuk\n);
}
Perlu diperhatikan :
Jika Linked List hanya menggunakan head, maka dibutuhkan satu
pointer untuk membantu mengetahui node terakhir dari Linked List.
Dalam code di atas digunakan pointer bantu.
void deleteDepan()
{
TNode *hapus;
if(isEmpty() == 0)
// jika data belum kosong
{
if(head->next != NULL)
// jika data masih lebih dari 1
{
hapus = head;
// letakan hapus pada head
head = head->next; // menggeser head (karena head harus ada)
head->prev = NULL;
// head harus menuju ke NULL
delete hapus; //proses delete tidak boleh dilakukan jika node
masih ditunjuk oleh pointer
}
else
// jika data tinggal head
{
head = NULL;
// langsung diberi nilai NULL saja
}
printf(data terhapus\n);
}
else
// jika data sudah kosong
printf(data kosong\n);
}
Perlu diperhatikan :
Dibutuhkan satu pointer untuk membantu memindahkan head ke node
berikutnya. Dalam code di atas digunakan pointer hapus. Mengapa head
harus dipindahkan?
void deleteBelakang()
{
TNode *hapus;
if(isEmpty() == 0)
{
if(head->next != NULL)
{
hapus = head;
while(hapus->next != NULL)
{
hapus = hapus->next;
}
hapus->prev->next = NULL;
dengan NULL
delete hapus; //proses delete tidak boleh dilakukan jika node
sedang ditunjuk oleh pointer
}
else
// jika data tinggal head
{
head = NULL;
// langsung diberi nilai NULL saja
}
printf(data terhapus\n);
}
else
// jika data sudah kosong
printf(data kosong\n);
}
Perlu diperhatikan :
Jika Linked List hanya menggunakan head, maka dibutuhkan satu
pointer untuk membantu mengetahui node terakhir dari Linked List.
Dalam code di atas digunakan pointer hapus.
Jangan lupa untuk tetap mengaitkan node terakhir ke NULL.
void clear()
{
TNode *bantu, *hapus;
bantu = head;
while (bantu != NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
Perlu diperhatikan :
Dibutuhkan dua pointer untuk membantu menggeser dan menghapus, di
mana dalam code di atas digunakan pointer bantu dan hapus.
void cetak()
{
TNode *bantu;
bantu = head;
if(isEmpty() == 0)
{
while (bantu != NULL)
{
printf(%d , bantu->data);
bantu = bantu->next;
}
printf(\n);
}
else
printf(data kosong);
Perlu diperhatikan :
Dibutuhkan satu pointer untuk membantu menggeser, di mana dalam
code di atas digunakan pointer bantu.