TIPS Memahami Linked List

Tips ini saya tulis berdasar pengalaman pribadi selama masih kuliah dan mengambil mata kuliah Algoritma dan Struktur Data. Harapan saya sedikit banyak bisa membantu pembaca dalam menguasai topik programming yang satu ini. Terus terang pas jaman kuliah dulu saya kesulitan memahami apa sebenarnya linked list. Maklum dalam linked list kita sedikit bicara hal abstrak, nggak begitu jelas karena yang dibahas adalah membayangkan isi memori komputer. Bahkan sampai selesai UAS pun saya masih bertanya-tanya, "Linked List???". Hingga akhirnya saya dapat menemukan pencerahan dari-Nya. Alhamdulillah :)

TIPS 1. Pahami konsep dasar Linked List.
Singkat cerita, linked list (LL) adalah identik dengan array/ larik. LL merupakan struktur data yang bisa menyimpan rangkaian data secara dinamis. Dinamis karena bisa ditambah dan dikurangi sesuai kebutuhan program. Dengan demikian ketika kita bicara linked list maka bayangkan bahwa ia secara fisik hampir sama ilustrasinya dengan tipe data array, yaitu deretan kotak elemen yang memanjang. Bedanya, klo array itu kotaknya berdempetan, sedangkan linked list kotak-kotaknya (node/simpul) nanti terhubung dengan minimal sebuah garis panah (pointer).

TIPS 2. Gambar dulu ilustrasinya.
LL itu abstrak, namun bisa kita buat gambaran prosesnya. Bagian yang paling rumit dalam LL adalah merangkai simpul satu dengan simpul lainnya sehingga terbentuklah LL dan menjamin masih terhubungnya seluruh rangkaian node meskipun terjadi penambahan node baru maupun penghapusan node lama di posisi manapun (depan, belakang atau tengah). Untuk itu sebelum kita menulis baris perintah code program untuk operasi-operasi LL alangkah lebih baiknya jika kita awali dengan menggambarkan dulu ilustrasinya. Baik untuk kondisi LL masih baru berupa satu node, dua node maupun banyak node. Selain itu juga ketika LL dalam mode operasi penambahan maupun penghapusan node. Pastikan kita sudah menggambarkan dengan benar tentang perubahan-perubahan terhadap kondisi panah penghubung. Sebelumnya begini, setelah proses jadi begitu. Misal, yang semula bernilai NULL alias nggak kemana-mana, setelah penambahan menjadi terhubung ke simpul terdepan.
baru->next = head;
Atau bisa juga misalnya yang semula menunjuk ke simpul X berubah dialihkan menunjuk ke simpul Y karena simpul X akan dihapus, dst.
if (temp->next == X)
{
temp->next = Y;
free(X);
}
Jadi ilustrasikan dulu skema prosesnya, baru tuliskan codingnya.

TIPS 3. Jangan takut mencoba.
Practice make perfect. Silahkan dicoba berbagai macam skenario yang mungkin terjadi. Tambah di depan, tambah di belakang atau sisipkan di tengah. Hapus simpul di tengah, hapus simpul yang di belakang sendiri atau hapus simpul yang terdepan. Bagaimana pula klo LL-nya adalah Double, artinya punya dua pointer (panah penghubung) sehingga sebuah simpul bisa membaca simpul berikutnya dan juga simpul sebelumnya. Silahkan dicoba itu semua. Siapkan selembar kertas untuk menggambarkan ilustrasi prosesnya. Pasti akan asyik dan menarik :)

OK. Mungkin itu dulu tiga tips dari saya. Semoga ada manfaatnya. If there are any question, please remind me and write something right here. Perhaps i do can help :D

Contoh Program Menu Linked List

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
struct node{
int info;
struct node *next;
};
typedef struct node *simpul;

void main()
{
simpul baru, head=NULL, tail=NULL, temp;
int pilih;
do
{
printf("MENU\n");
printf("1. Insert\n");
printf("2. View\n");
printf("3. Search\n");
printf("4. Delete\n");
printf("PILIH: ");
scanf("%d", &pilih);
switch(pilih)
{
case 1:
int data;
printf("Data Masuk: ");
scanf("%i", &data);
baru = (simpul) malloc(sizeof (struct node));
baru->info = data;
baru->next = NULL; //tidak menuju simpul mana2
if (head == NULL) //khusus simpul pertama LL
{
head = baru; //pointer head, tail, baru sama
tail = baru;
}
else //untuk simpul2 berikutnya
{
tail->next = baru; //sambungkan di belakang
tail = baru;
}
break;
case 2:
temp = head; //tampilkan mulai dr depan
while(temp!=NULL) //ulangi sampai temp bernilai NULL
{
printf("%i ", temp->info);
temp = temp->next; //geser temp ke belakang
}
printf("\n");
break;
case 3:
int cari;
printf("Cari Angka: ");
scanf("%i", &cari);
temp = head;
while((temp!=NULL)&&(temp->info!=cari))
{
temp = temp->next;
}
if(temp != NULL && temp->info == cari)
printf("Data Ditemukan");
else //if(temp == NULL)
printf("Data Tidak Ditemukan");
printf("\n");
break;
case 4:
int hapus;
char jwb;
simpul prev = NULL;
printf("Hapus Angka: ");
scanf("%i", &hapus);
temp = head;
while((temp!=NULL)&&(temp->info!=hapus))
{
//prev selalu berada 1 simpul di belakang temp
prev = temp;
temp = temp->next;
}
if(temp != NULL && temp->info == hapus)
{
printf("Yakin Dihapus? (y/t)");
flushall();
jwb=getch();
if(jwb == 'y')
{
//jika hapus simpul di tengah
if(temp->next != NULL && temp != head)
prev->next = temp->next;
//jika hapus di depan dan tinggal 1 simpul
else if (temp == head && head->next == NULL)
{
head = NULL;
}
//jika hapus di depan tapi masih ada simpul berikutnya
else if (temp == head && head->next != NULL)
{
head = head->next;
}
//jika hapus di belakang
else if (temp->next == NULL)
{
prev->next = NULL;
tail = prev;
}
free(temp); //hapus dr memori
}
else
printf("Batal Dihapus");
}
else
printf("Data Tidak Ditemukan");
printf("\n");
break;
}
}while (pilih!=5);
}

Contoh Program Linked List Sederhana dalam Bahasa C

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct simpul {
char nama[20];
float nilai;
struct simpul *next_simpul;
} simpulku;
void main()
{ simpulku *simpul1, *simpul2, *simpul3, *simpul4, *temp;
//alokasikan memorinya dulu
simpul1 = (simpulku *)malloc(sizeof(simpulku));
simpul2 = (simpulku *)malloc(sizeof(simpulku));
simpul3 = (simpulku *)malloc(sizeof(simpulku));
//isi data masing2 simpul
strcpy(simpul1->nama, "Amin");
strcpy(simpul2->nama, "Budi");
strcpy(simpul3->nama, "Citra");
simpul1->nilai=90; simpul2->nilai=20;
simpul3->nilai=100;
simpul1->next_simpul = NULL;
//sambungkan link masing2 simpul
simpul1->next_simpul = simpul2;
simpul2->next_simpul = simpul3;
simpul3->next_simpul = NULL;
//tampilkan hasilnya, mulai dr simpul 1
temp = simpul1; //cara satu per satu
printf("%s, %f\n", temp->nama, temp->nilai);
temp = temp->next_simpul;
printf("%s, %f\n", temp->nama, temp->nilai);
temp = temp->next_simpul;
printf("%s, %f\n", temp->nama, temp->nilai);
printf("\n");
temp = simpul1;
for(;temp!=NULL; temp=temp->next_simpul) //cara looping
printf("%s, %f\n", temp->nama, temp->nilai);

//skenario menambahkan simpul baru
simpul4 = (simpulku *)malloc(sizeof(simpulku)); //siapkan
strcpy(simpul4->nama, "Dewi");simpul4->nilai=80; //isi
simpul2->next_simpul = simpul4; //update link
simpul4->next_simpul = simpul3;
printf("\n");
temp = simpul1;
for(;temp!=NULL; temp=temp->next_simpul) //cara looping
printf("%s, %f\n", temp->nama, temp->nilai);
//menghapus simpul budi
simpul1->next_simpul = simpul4; //update link
free(simpul2); //hapus simpul
printf("\n");
temp = simpul1;
for(;temp!=NULL; temp=temp->next_simpul) //cara looping
printf("%s, %f\n", temp->nama, temp->nilai);
}

8 Tips Praktis Pemrograman

Cukup banyak mahasiswa yang merasa kesulitan dalam belajar membuat program. Bingung harus memulai dari mana. Beberapa kejadian yang sering mengganggu dalam proses ini adalah masalah terjadinya error pada saat kompilasi atau eksekusi program. Hal ini terbukti berdasarkan survei yang saya lakukan di kelas dalam 2 semester terakhir.

Error itu hal biasa dalam belajar membuat program. Sebagaimana klo kita jatuh ato nabrak ketika belajar naik sepeda. Sudah hal lumrah klo salah dalam belajar. Namanya saja belajar. Dari yang sama sekali blank, menjadi skillful. Kita bukan malaikat lho. Yang nggak wajar itu adalah tidak mengambil pelajaran dari kesalahan yang ditemukan, ato yang lebih parah adalah mengulangi kembali kesalahan serupa. Error tidak seharusnya membuat semangat belajar kita padam, terhenti di tengah jalan.

Pembaca yang budiman, disini saya akan berbagi pengalaman belajar membuat program. Jujur, saya berangkat dari nol untuk belajar programming. Bahkan 2 tahun pertama kuliah, saya masih tanpa komputer pribadi. Cuma nebeng teman, ato mampir di lab. Nggak kenal itu bahasa Pascal, bahasa C maupun C++. Tapi karena saya sudah memilih kuliah di bidang IT, ya apa boleh buat. Demi masa depan, semua tantangan harus dihadapi. Salah satunya adalah ketrampilan membuat program.

Tips yang pertama adalah tumbuhkan cinta dulu (ceile...) kepada pemrograman. Tanpa ada cinta ya jangan harap bisa punya motivasi tinggi. Cinta bisa alami, bisa dikondisikan. Sebaiknya dua-duanya kita miliki. Klo alami prosesnya butuh banyak waktu karena "trisno jalaran soko kulino". Cinta karena kebiasaan. Namanya kebiasaan itu lama. Tiada hari tanpa coding :). Namun cinta bisa juga dikondisikan. Relatif cepat. Kita harus kondisikan mindset kita bahwa tanpa menguasai programming ya tamat sudah masa depan. Mo jadi apa nanti? Lulusan IT mo kerja apa klo programming saja nggak ngeh? Ato jangan-jangan malah ke-DO duluan? :(. So, cintai dulu membuat program. Bayangkan dengan kita cinta programming, maka kita kelak akan bisa membuat program sekelas Winning Eleven, Windows Vista ato Counter Strike! Keren kan :)

Kedua, miliki akses ke komputer. Nggak harus beli. Anda masih punya sahabat karib, teman baik (ini gunanya gaul di kampus, ikut organisasi). Anda pun masih bisa pinjam komputer di lab seijin pengurusnya ato bisa juga di ruang himpunan/ asisten. Tips ketiga, terkait dengan masalah komputer, adalah praktekkan programming. Membuat program bukan pekerjaan hayalan, ngelamun, ditulis di angan-angan kemudian dijalankan. Itu mbujuk, ngawur, nggak ada dalilnya. Menguasai pemrograman harus dari mencobanya. Bukan sekedar mendengarkan kuliah di kelas (kalo nggak tidur/ ngobrol sendiri), membaca dan mengingat-ingat catatan. Pemrograman bukan sekedar pemahaman tapi juga menuntut adanya ketrampilan. Dengan mencoba sendiri langsung di depan komputer akan semakin menguatkan interaksi kita dengan programming. Semakin merasakan bahwa membuat program itu sangat menarik. Bayangkan, kita bisa menyuruh-nyuruh komputer untuk mengerjakan apa yang kita inginkan lewat pemrograman!

Yang keempat, mulailah dengan contoh yang sederhana. Jangan overlap langsung ke contoh yang relatif tingkat kesulitannya tinggi. Cukup dengan 10 baris dulu, jangan langsung yang 50 baris. Bisa pusing nantinya. Dalam kurikulum programming, mulailah dengan mengenal jenis-jenis tipe data dan coba program jenis sekuensial sederhana dulu. Lanjutkan dengan mempelajari contoh branching ato looping. Semakin sulit lagi, gabungkan looping dan branching dalam satu program. Tak ketinggalan, pelajari juga tipe data terstruktur semisal array dan struct. Syaratnya: pastikan Anda punya cukup literatur yang berisikan banyak contoh source code program. Setelah anda memahami contoh program, silahkan modifikasi source code tersebut. Pelajari dan analisa dampak yang terjadi.

Kelima, jika menemukan error, jangan panik dulu. Teliti kembali source code yang telah ditulis. Apakah sudah sesuai dengan contoh? Semua kompiler bahasa pemrograman menyediakan fasilitas error report, biasanya di bagian bawah jendel program. Disitu tertera lokasi baris terjadinya error disertai dengan penjelasan sebabnya. Syaratnya ya dikit-dikit kita harus menguasai bahasa Inggris. Bila ternyata masih belum paham maksud error-nya maka ada beberapa kemungkinan solusi: 1. tanya teman baik anda yang paham programming. 2. konsultasi ke mbah Google. 3. bawa masalah tersebut ke kampus. 4. hubungi kantor polisi terdekat (just kidding) maksudnya tulis saja ke blog ini, mungkin saya bisa mbantu :)

Keenam, atur waktu, dan buat jadwal belajar jika perlu. Namanya belajar jelas butuh waktu untuk konsentrasi, fokus. Jam bermain, ato waktu untuk agenda-agenda yang kurang ato bahkan nggak jelas kontribusinya buat masa depan ya sudah sepantasnya dikurangi. Belajar butuh pengorbanan, keluar dari zona nyaman, dari nyantai-nyantai dan asyik berleha-leha. Slot waktu belajar harus jelas. Saya anjurkan bisa rutin tiap hari belajar satu program. Tanamkan: Ini demi masa depan! Ini investasi kita yang akan dipanen 4-5 tahun ke depan. InsyaAlloh.

Ketujuh, tularkan ilmu, sekecil apapun. Orang bijak mengatakan, "Ikatlah ilmu dengan mengamalkannya". Semakin sering kita berbagi ilmu, maka ilmu kita bukannya malah berkurang akan tetapi akan semakin menancap di pikiran, semakin ahli. Orang yang ahli adalah yang bisa memahamkan orang yang sebelumnya tidak paham. Ajari teman yang merasa kesulitan. Kirim artikel-artikel praktis lewat email/ milis. Posting di blog pribadi juga OK.

Tips yang kedelapan, berbakti kepada dan minta doa restu dari orang tua. Bagaimanapun beliau lah yang berkontribusi terhadap kuliah kita. Doa beliau sangat mustajab. Jangan sampai membuat beliau kecewa. Tunjukkan hasil belajar yang positif. Dan tak lupa mohon kepada-NYA supaya dibukakan pintu kemudahan dalam menimba ilmu. Karena milik-NYA-lah ilmu dari segala sumber ilmu. Wallohu a'lam bishowab. Semoga bermanfaat. Btw, ingat-ingat ada DELAPAN (8) tipsnya. Cukup DELAPAN saja... :D

Dasar Operasi String di C++

Tipe data string (nama lain array karakter) sangat sering dipakai dalam pembuatan program, khususnya yang berkaitan dengan pengolahan data berupa kata-kata (kumpulan huruf alpha numerik). Semua bahasa pemrograman mendukung penggunaan konsep string, bahkan untuk bahasa pemrograman generasi terbaru (semisal java, delphi, VB) telah memiliki tipe data string sendiri, bukan lagi memakai array karakter. Lebih dari itu dalam konsep OOP, class string sudah dilengkapi dengan fungsi-fungsi standar yang komplit.

Dalam artikel ini saya akan membahas satu bagian kecil saja tentang string dalam bahasa C++. Kunci utama mengolah tipe data string adalah dengan memahami aturan bahwa karakter terakhir (ujung belakang) sebuah data string SELALU berisi karakter NULL (''). Aturan ini perlu kita camkan ketika akan membuat fungsi-fungsi manipulasi data string, antara lain: menghitung panjang string, menggabungkan dua buah string, mengkopi isi string, mencari data ke dalam string, memotong bagian dalam sebuah string, dst.

Contoh yang akan saya tunjukkan disini adalah program untuk menghitung panjang sebuah string. Perlu Anda ketahui bahwa sebenarnya fungsi-fungsi baku manipulasi string sebenarnya sudah difasilitasi oleh bahasa C++ dengan memakai library string.h, programmer tinggal memanggil fungsinya. Namun tujuan saya membuat contoh ini adalah lebih untuk menguatkan ketrampilan dalam coding bukan sekedar menggunakan.

Dalam library string.h sudah terdapat fungsi length() untuk mengetahui panjang sebuah string. Disini kita akan belajar membuat program yang tujuannya sama denga fungsi length() tersebut. Perhatikan source code berikut:

#include "stdio.h"
void main()
{
char namaku[30];
printf("Ketikkan Nama = "); gets(namaku);
printf("Panjang Nama Anda = ");
for(int i=0; namaku[i] != ''; i++); //loop sampai ketemu NULL
printf("%d karakter", i); //i berisi info panjang string
}

Penjelasan:
Teknik menghitung panjang string di atas adalah dengan membaca satu demi satu isi array karakternya. Selama karakter yang dibaca bukanlah karakter NULL maka i akan terus bertambah satu. Dengan demikian i-lah yang menampung info tentang jumlah karakter di dalam string. Berani mencoba? Selamat Belajar! :D