Anda di halaman 1dari 7

Tugas Pengganti

Struktur Data
Double Linked List Non Circular

N AMA

: MARID CANDRA SAPUTRO

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

Fungsi-fungsi yang biasa digunakan :

Fungsi untuk inisialisasi awal

void init()
{
TNode *head;
head = NULL;
}
Perlu diperhatikan :

// inisialisasi awal

Fungsi ini harus ada, untuk memunculkan node awal.


Jangan lupa untuk mendeklarasikan node-nya terlebih dahulu.

Fungsi untuk mengecek kosong tidaknya Linked List

int isEmpty()
{
if(head == NULL)
return 1;
else
return 0;
}

// mengecek kosong tidaknya Linked List

Perlu diperhatikan :
Setelah memahami penggunaan fungsi ini, bukalah Turbo C++ Anda,
dan copy-kan fungsi ini.

Fungsi untuk menambahkan data di depan

void insertDepan(int value)


{
TNode *baru;
baru = new TNode;
baru->data = value;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty() ==
{
head = baru;
head->next =
head->prev =
}
else
{
baru->next =
head->prev =
head = baru;
}

1)

// penambahan data di depan


// pembentukan node baru
// pemberian nilai terhadap data baru
// data pertama harus menunjuk ke NULL
// data pertama harus menunjuk ke NULL
// jika Linked List kosong
// head harus selalu berada di depan

NULL;
NULL;
// jika Linked List sudah ada datanya
head;
baru;

// node baru dihubungkan ke head


// node head dihubungkan ke node baru
// head harus selalu berada di depan

printf(data masuk\n);
}

Fungsi untuk menambahkan data di belakang

void insertBelakang(int value)


{
TNode *baru, *bantu;
baru = new TNode;
baru->data = value;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty() == 1)
{
head = baru;
head->next = NULL;
head->prev = NULL;
}
else
{
bantu = head;

// penambahan data di belakang


// pembentukan node baru
// pemberian nilai terhadap data baru
// data pertama harus menunjuk ke NULL
// data pertama harus menunjuk ke NULL
// jika Linked List kosong
//head harus selalu berada di depan

// bantu diletakan di head dulu

while(bantu->next != NULL)
{
bantu = bantu->next
}
baru->next = baru;
head->prev = bantu;

// menggeser hingga node terakhir


// node baru dihubungkan ke head
// node head dihubungkan ke node baru

}
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.

Fungsi untuk menghapus data di depan

void deleteDepan()
{
TNode *hapus;

// penghapusan data di depan

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?

Fungsi untuk menghapus data di belakang

void deleteBelakang()
{
TNode *hapus;
if(isEmpty() == 0)
{
if(head->next != NULL)
{
hapus = head;
while(hapus->next != NULL)
{
hapus = hapus->next;

// penghapusan data di belakang

// jika data belum kosong


// jika data masih lebih dari 1
// letakan hapus pada head
// menggeser hingga node akhir

}
hapus->prev->next = NULL;

// menghubungkan node sebelumnya

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.

Fungsi untuk menghapus semua data

void clear()
{
TNode *bantu, *hapus;
bantu = head;
while (bantu != NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;

// penghapusan semua data


// letakan bantu pada head
// geser bantu hingga akhir

// delete satu persatu node

// jika sudah habis berikan nilai NULL pada head

Perlu diperhatikan :
Dibutuhkan dua pointer untuk membantu menggeser dan menghapus, di
mana dalam code di atas digunakan pointer bantu dan hapus.

Fungsi untuk menampilkan semua data

void cetak()
{
TNode *bantu;
bantu = head;
if(isEmpty() == 0)
{
while (bantu != NULL)
{
printf(%d , bantu->data);
bantu = bantu->next;
}
printf(\n);
}

// menampilkan semua data


// letakan bantu pada head

// cetak data pada setiap node


// geser bantu hingga akhir

else
printf(data kosong);

// jika data sudah kosong

Perlu diperhatikan :
Dibutuhkan satu pointer untuk membantu menggeser, di mana dalam
code di atas digunakan pointer bantu.

Anda mungkin juga menyukai