[ Linked List Step by Step(3) ]

Pada artikel sebelumnya penulis sudah membahas tentang penambahan Depan dan belakang pada Linked list/Senarai berantai. Pada tulisan kali ini penulis akan membahas bagaimana menghapus Simpul di depan dan belakang simpul induk.
Menghapus simpul Depan
Perlu diperhatikan bahwa pada saat kita akan menghapus suatu simpul, maka posisi head tidak boleh dihapus terlebih dahulu, karena itu akan menyebabkan data yang lainnya akan hilang. Maka kita membutuhkan satu simpul bantu untuk menggantikan posisi head. Di sini penulis menggunakan simpul dengan nama bantu. Pada saat kita akan menghapus simpul depan otomatis sebelum dihapus, simpul bantu menunjuk ke alamat yang sama dengan head. Lalu posisi head dialihkan ke posisi berikutnya. Selanjutnya pointer bantu bisa kita hapus.
Berikut ini adalah source code untuk menghapus simpul dari depan :

void hapusDepan() {
myLinkedList *hapus;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
head = head->next;
delete hapus;
} else {
data = head->data;
head = NULL;
}
} else {
cout < < "Data Masih kosong..\n"; } } [/sourcecode]

Menghapus simpul Belakang

Diperlukan dua pointer untuk menhapus simpul di belakang, pointer pertama untuk menujuk pointer yang akan dihapus, dalam hal ini adalah pointer hapus. Sedangkan pointer lainnya adalah pointer untuk menunjuk ke simpul sebelum simpul yang dihapus, dalam hal ini adalah pointer bantu. Pointer bantu akan selalu bergerak sampai sebelum node yang akan dihapus, baru pointer hapus diletakan setelah pointer bantu. Setelah itu pointer hapus akan dihapus, pointe bantu akan menunjuk ke NULL.

Berikut ini adalah source code untuk menghapus simpul dari belakang:

void hapusBelakang() {
myLinkedList *hapus, *bantu;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
bantu->next = NULL;
delete hapus;
} else {
head = NULL;
}
} else {
cout < < "Data masih kosong..." << endl; } } [/sourcecode] Agar pembaca lebih faham tentang penggunaan dari fungsi-fungsi di atas, mari kita modifikasi program yang sudah penulis sertakan pada artikel sebelumnya. Di bawah ini adalah program yang telah dimodifikasi. Bagian yang dicetak tebal menunjukan kode baru atau telah dimodifikasi. [sourcecode language="cpp"] /** * =========================================================================== * listing3 * @author Eding Muh. Saprudin * source : Handout Struktur Data Prodi TI UKDW/Antonius Rachmat C, S.Kom * =========================================================================== */ #include
#include

/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;

myLinkedList *next;
};

myLinkedList *head;

/* keadaan awal */
void init() {
head = NULL;
}

/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}

/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
clrscr();

myLinkedList *baru;
baru = new myLinkedList;

cout < < "Masukkan Data lengkap di bawah ini : " << endl; cout << "NIM : "; cin >> baru->nim;
cout < < "Nama : "; cin >> baru->nama;
cout < < "Nilai : "; cin >> baru->nilai;

baru->next = NULL;

if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}

/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
clrscr();

myLinkedList *baru, *bantu;
baru = new myLinkedList;

cout < < "Masukkan Data lengkap di bawah ini : " << endl; cout << "NIM : "; cin >> baru->nim;
cout < < "Nama : "; cin >> baru->nama;
cout < < "Nilai : "; cin >> baru->nilai;

baru->next = NULL;

if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}

/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout < < data << " sudah terhapus \n"; } else { cout << "Data Masih kosong..\n"; } cout << "Tekan Enter untuk kembali ke Menu!"; getch(); } /** * fungsi untuk menghapus dari belakang node */ void hapusBelakang() { myLinkedList *hapus, *bantu; char *data; if (paKosong() == 0) { if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout < < data << " sudah terhapus... " << endl; } else { cout << "Data masih kosong..." << endl; } cout << "Tekan Enter untuk kembali ke Menu!"; getch(); } /** * fungsi untuk menampilkan data linked list */ void tampilData() { int no = 1; clrscr(); myLinkedList *bantu; bantu = head; if (paKosong() == 0) { while (bantu != NULL) { cout << "No. : " << no << endl; cout << "NIM : " << bantu->nim < < endl; cout << "Nama : " << bantu->nama < < endl; cout << "Nilai : " << bantu->nilai < < endl << endl; no++; bantu = bantu->next;
}
cout < < endl; } else { cout << "Data masih kosong " << endl; } cout << "Tekan Enter untuk kembali ke menu!"; getch(); } /** * fungsi Menu, Untuk menentukan linked list mana * yang dipilih */ int menu() { int pilihan; clrscr(); cout << "+----------------------+\n"; cout << "| MENU PILIHAN |\n"; cout << "+----------------------+\n"; cout << "| 1. Tambah Depan |\n"; cout << "| 2. Tambah Belakang |\n"; cout << "| 3. Hapus Depan |\n"; cout << "| 4. Hapus Belakang |\n"; cout << "| 5. TampilData |\n"; cout << "| 6. Keluar |\n"; cout << "+----------------------+\n"; cout << "| PILIHAN ANDA ? [ ] |\n"; cout << "+----------------------+\n"; gotoxy(19,11); cin >> pilihan;
return pilihan;
}

/**
* fungsi operasi data
*/
void operasiData() {
int pilih;

do {
pilih = menu();
clrscr();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
clrscr();
cout < < "Terima kasih coy!!!"; break; } } while (pilih != 6); } /** * PROGRAM UTAMA */ void main() { init(); operasiData(); } [/sourcecode] Demikianlah program sederhana dengan menggunkana linked list. Jika pembaca sudah faham bin ngerti, bisa dikembangkan menjadi program yang lebih kompleks. Tapi tunggu dulu… Jika tambah dan hapus dari depan atau dari belakang, trus bagaimana jika jika kita ingin mengambahkan atau menghapus Simpul dari tengah? Yup itu tugas Anda, coba Anda modifikasi program di atas sehingga bisa menambahkan dan menghapus simpul dari tengah. Selamat mencoba. Oh ya jangan lupa kasih komentar ya🙂

biar lebih yahud download aja filenya di sini

13 Komentar »

  1. Abi Bakar Said:

    contohnya gimana fren?

    • e12x Said:

      untuk contohnya udah saya sertakan di sit atau di link download

  2. makasih atas ilmunya yo… insya alloh berguna lah…

    • e12x Said:

      Yup sama-sama. Ilmu itu pada dasarnya Open source. Ya.. Amin…

  3. kangarie Said:

    bener2 programnya bikin pusing 8 keliling.. mungkin belon dapet wangsit kali yah.. syntake urung mudeng2..

    • e12x Said:

      ya coba aja kamu semedi di gua, siapa tahu dapet wangsit….

    • e12x Said:

      namanya program ya bikin pusing lha… kalo yg gak pusing itu maen game😀

  4. Ferireza Said:

    makasih, programnya sangat bermutu om.

  5. Ferireza Said:

    ngomong2 tu abis #include ko kosong? sebelum komen punya orang lain “gak mutu n ga jalan” periksa dulu lah punya sendiri… piss.. hehe..

    • e12x Said:

      jangan salah dulu bung. mungkin tu di blog aja. biar jelas U download aja source codeX. q dah sertain linkX man. Piss .. he😀

  6. Rara Said:

    ne baru aq download mas..

    ntar kalo aq ga’ bisa ngerjain, tolong bantuin ya..

    • e12x Said:

      Ya… met mencoba ra2 pasti bisa kok🙂

  7. Persi-F Said:

    ^_^


{ RSS feed for comments on this post} · { TrackBack URI }

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s