Wednesday, September 21, 2011

Membuat Linked List dengan C++

Hellow blogger..........
Posting ini saya akan coba membuat program Linked List yang sudah saya ada pada posting saya sebelumnya, untuk kali ini saya akan membuat programnya dengan Dev Cpp. Dalam program ini akan dibuat aplikasi untuk menyimpan data seseorang dengan format penyimpanan nama, tahun lulus, angkatan, profesi, dan no Hp,  juga untuk menghapus data yang sudah disimpan. Jadi inilah keuntungan linked list yang bersifat dinamis, tidak seperti array yang bersifat statis, jadi kalau menggunakan Linked List  ini programer akan dimudahkan ketika menyimpan data karena elemen yang disimpan pada memori tidak dibatasi tergantung dari kemampuan memori untuk menyimpan data, Linked List secara otomatis akan menambahkan alamat memori untuk menyimpan data, sistemnya berkesinambungan seperti rantai. Oke sekarang kita langsung ke contoh programnya ya, berikut sourcecode Untuk Linked List...



#include <iostream>
using namespace std;

struct smpn

{ char name[10]; //nama dibatasi sampai 20 karakter
  int thn_lls; // deklarasi thn_lls sbagai integer
  int angkt;   // deklarasi angakatan sbagai integer
  char prof[15]; // prof dibatasi 15 karakter
  char no_hp[15]; // no_hp dibatasi 15 karakter
  smpn *ljt ;// dari struct ke pointer
             //semua data disimpan dalam alamat memori yang sama ljt
};

smpn *mlai_ptr = NULL; // membuat alamat memori 0000
smpn *pndah;           // mendeklarasikan pndah sbagai alamat memori
int pilihan = 0;       

void tmbh_data() //fungsi untuk menambah data

{ smpn *Fr, *Fr1; // struck ke pointer-pointer
Fr = new smpn; //pengalokasian memori dengan operator New
   cout << "\t Masukkan data!\n\a";
   cout << "Masukkan nama          : "; //memasukkan nama kemudian disimpan
   cin >> Fr->name;                     //menyimpan data ke variabel name yang disimpan dilamat memori Fr
   cout << "Tahun Lulus Kuliah     : "; //memasukkan tahun lulus
   cin >> Fr->thn_lls;                  //menyimpan data ke variabel thn_lls yang disimpan dialamat memori Fr
   cout << "Angkatan  berapa       : ";//memasukkan angkatan
   cin >> Fr->angkt;                   //menyimpan ke variabel angkt yang disimpan di almat memori Fr
   cout << "Profesi Anda           : ";
   cin >> Fr->prof;
   cout << "Nomer yang bisa dihub  : ";
   cin>>Fr->no_hp;
   
   Fr->ljt = NULL;     //membuat alamat memori kembali 0000
//mengatur link untuk ke simpul/node berikutnya   
   if (mlai_ptr == NULL) //jika pointer mulai = NULL 
   { mlai_ptr = Fr;
   pndah = mlai_ptr;
}
else
{    Fr1 = mlai_ptr;
// Data tidak sama dengan NULL berarti data tidak kosong
    while (Fr1->ljt != NULL) //Jika tidak sama dengan 0
{    Fr1 = Fr1->ljt;
// Pindah ke link berikutnya
}
     Fr1->ljt = Fr  ;
     }
     }
      
void list_data() 
{ smpn *Fr;
Fr = mlai_ptr;
cout << endl;
if (Fr == NULL) //jika dimemori/data kosong maka
cout << "Tidak ada data yang disimpan\n";
else
{ while (Fr != NULL)
{ //Menampilkan rincian data yang disimpan
        cout << "Nama: "<<Fr->name<<", ";
        cout << "Tahun Lls: "<<Fr->thn_lls<<", ";
        cout << "Angkatan: "<<Fr->angkt<<", ";
        cout << "Profesi: "<<Fr->prof<<", ";
        cout << "No.HP : "<<Fr->no_hp;
        
 if (Fr == pndah)
 cout << "< data";
 cout <<endl;
 Fr = Fr->ljt;
}
    cout <<"Daftar data terakhir" << endl;     
}
}
void hapus_dta_awl()//untuk menghapus data/node pertama
{ smpn *Fr;
Fr = mlai_ptr;
mlai_ptr = mlai_ptr->ljt;
delete Fr;
}

    void hapus_dta_akr() //untuk menghapus data/node terakhir
    {smpn *Fr0, *Fr1;
    if (mlai_ptr == NULL) //mengecek apakah data kosong, kalo iya maka
    cout << "Daftar kosong/n"; //keluar jika data kosong
    else
    Fr0 = mlai_ptr; 
    if (Fr0->ljt == NULL)
    {delete Fr0;   //data dihapus
    mlai_ptr = NULL; //kembali ke NULL
}
else
    {while (Fr0->ljt != NULL)//while untuk pengulangan
    {Fr1 = Fr0;
    Fr0 = Fr0->ljt;
}
    delete Fr0;
    Fr1->ljt = NULL;
}
}

void pndah_brkt ()  //untuk memindahkan ke node berikutnya
     {if (pndah == NULL)
     cout <<"Kamu berada di baris terakir\n";
    else
    pndah = pndah->ljt;
}
    
void move_kmbli()  //untuk kembali ke node sebelumnya
     { if (pndah == mlai_ptr)
     cout <<"Kamu Berada didata awal\n";
     else
     { smpn *sblm;
     sblm = mlai_ptr;
     
     while (sblm->ljt != pndah)
    { sblm = sblm->ljt;
}
    pndah = sblm;
}
}
    int main()  //fungsi utama
    { mlai_ptr = NULL;
    do  //untuk mengulang instruksi pilihan
    {
    list_data();  
    cout << endl;
    cout << "Masukkan pilihanmu(ketik angka) : " << endl;
cout << "0. Keluar dari program." << endl;
cout << "1. Menambahkan node di daftar terkhir." << endl;
cout << "2. Hapus data awal node." << endl;
cout << "3. Hapus data terakhir pada node." << endl;
cout << "4. Pindahkan pointer ke node berikutnya." << endl;
cout << "5. Pindahkan pointer ke node sebelumnya." << endl;
cout << endl << " kamu mau apa >> ";
cin >> pilihan;

switch (pilihan)
{//membuat pilihan
       case 1 : tmbh_data(); break; //sesuai dengan baris program diatas yang menggunakan Void
       case 2 : hapus_dta_awl();break;
       case 3 : hapus_dta_akr(); break;
       case 4 : pndah_brkt();break;
       case 5 : move_kmbli();
}
}
       while (pilihan != 0);//Lakukan pengulangan, pilihan tidak sama dengan 0
       return 0;
}
Berikut adalah tampilan program setelah diCompile & Run:
Agar teman-teman lebih jelas silahkan bikin sendiri programnya, 
Selamat belajar dan mencoba.....
Salam sepuluh ribu jam untuk jadi Expert... ^_^

5 comments :

Anonymous said...

ilmu yang bermanfaat gan.

ditunggu postingan terbarunya iy.

jangan lupa kunjungan balik di berbagi2-ilmu

Unknown said...

tankz brow

Siebel said...

ha panjang banget pusing dah.....

Unknown said...

good code om

klikartikel said...

Ask: gan klo menambahnya secara otomatis bisa ga tanpa harus pilih tambah awal / akhir,
contoh khasus ketika input NIM degan inputan pertama 111 kemudian akan menginputkan 113 otomatis di akhir dan ketika input nim 112 maka akan menambah diantara 111 dan 113, terimakish sebelumnya, sukes buat blognya, :D

Post a Comment