Hidup Itu Untuk Berkarya Bukan Untuk Putus Asa

Jumat, 13 Mei 2011

Single Linked List

       Linked list adalah suatu metode dalam mengurutkan jumlah data agar menjadi satu kesatuan dan tentunya saling berhubungan. Linked list dapat diartikan sebagai rantai data yang saling berhubungan antara satu dengan yang lainnya agar mempermudah dalam mengedit field data yang tersimpan dalam jumlah yang sangat kompleks.. Dalam linked list terdapat istilah node yang berarti kumpulan elemen-elemen dan terkait yang terdapat pada linked list. Sebelum memahami linked list kita hendaknya terlebih dahulu memahami apa itu node, node pada linked list dibagi menjadi 2 bagian yaitu bagian data dan penghantar data atau yang di kenal dengan nama pointer”. Untuk lebih jelasnya, node terlihat pada gambar di bawah ini

Dari gambar diatas diilustrasikan beberapa node, setiap node memiliki masing-masing data dan terdapat pointer yang dijadikan sebagai penghubung atau penunjuk arah dari satu data ke data yang lainnya. Null berarti menunjukan suatu elemen tidak menunjukan kondisi apapun.
Adapun operasi- operasi yang ada pada single linked list yaitu :
a.       Penciptaan dan penghancuran simpul
b.      Inisialisasi dan fungsi pemeriksaan linked lsit
c.      Penyisipan simpul ke linked list
d.     Penghapusan simpul suatu linked list
e.      Traversal atau penelusuran suatu simpul
f.       Pencarian simpul tertentu
A.    ALGORITMA 
{Algoritma Utama}
Algoritma_penyisipan_Single_Linked_List
Kamus:
    
Procedure masukan_nama(output nama_input : char);
Procedure  sisip_nama_depan (input nama: char[20], I/O )
            Procedure  sisip_nama_akhir (input nama: char[20], I/O )
            Procedure  sisip_nama_tengah(char nama_input[20])
                   Procedure hapus_depan (output elemen : tipedata, I/O awal, akhir : nama_pointer)
            Procedure hapus_belakang (output elemen : tipedata, I/O awal, akhir : nama_pointer)
        Procedure hapus_tengah ( input nama: char[24])

Procedure menu_tampil
Procedure tampil  
Procedure menu_sisip
Procedure menu_kelompok
     
{deklarasi}                                                                                                                 
Nama_pointer = ↑simpul
Simpul = Record
<  info : char[20],
    next : nama_pointer>                        
EndRecord

awal, akhir : nama_pointer {pointer penunjuk}
menu : integer
nama : char


Procedure menu_kelompok
{I.S : Data Telah terdefinisi }
{F.S : Menampilkan menu anggota kelompok }

Kamus :
    
 
Algoritma:
do{ 
     output ("                ___________________________________________________ ")
     output("                                                  KELOMPOK                                                ")
     output ("                                      S T R U K T U R   D A T A                                    ")
     output ("                               S I N G L E    L I N K E D    L I S T                              ")
     output ("                ___________________________________________________") 
     output ("                                                                                                                       “)
     output ("                      1. Eko Siswoyo                                                                         ")
     output ("                      2. Fery Ardiyansyah                                                                 ")
     output ("                      3. Lendra Mardani                                                                    ")
     output ("                      4. Patria Eka Pratama                                                               ")
     output ("                      5. Firman Widiansyah                                                              ")
            output ("                                                                                                                        ")
            output ("                      Selanjutnya Tekan Sembarang Tombol . . .                             ")
   }
Endprocedure

      
  Procedure menu_tampil
{I.S : User memasukan pilihan menu }
{F.S : Menghasilkan menu yang dipilih }

Kamus :
     pilih : integer
 
Algoritma:

do{
          Output ("      ---------------------------------------------------------------------------------- \")
           Output ("      |                   MENU UTAMA DATA BARANG                           |")
          Output ("      --------------------------------------------------------------------------------|")
           Output ("      |                                                                                                       |")
           Output ("      |         1. Sisip Data                                                                         |")
           Output ("      |         2. Hapus Data                                                                       |")
           Output ("      |         3. Cari (Search)                                                                    |")
           Output ("      |         4. Urut                                                                                  |")
           Output ("      |         5. Tampil                                                                              |")
           Output ("      |         0. Keluar Program                                                                |")
           Output ("      |___________________________________________________|")
           Output ("                                                                                                             ")
           Output ("                          Masukan Pilihan [1..5][0]                                          ")
           Output("                                                                                                              ")
           
          }
 while (pilih!=0);            
  }
Endprocedure

Procedure menu_sisip
{I.S : User memasukan pilihan menu }
{F.S : menghasilkan menu yang dipilih }

Kamus :
     pilih_sisip        : integer
     gl                     : char [2]
     nama_input      : char[20]        

 
Algoritma:
      while (pilih_sisip!=0)
      Output ("                                            Menu Penyisipan                       ") 
      Output ("                   ================================= ")
      Output ("                      1. Sisip Depan                                                 ")
      Output ("                                                                                              ")
      Output ("                      2. Sisip Tengah                                                ")
      Output ("                                                                                              ")
      Output ("                      3. Sisip Belakang                                             ")
      Output ("                                                                                              ")
      Output ("                      0. Kembali Ke Menu Utama                            ")
      Output ("                                                                                              ")               
      Output ("                      Pilihan Anda [1..3] : ") input (pilih_sisip)
                
      endwhile
    while (pilih_sisip < 0 || pilih_sisip > 3)
      output ("MAAF, Salah Memasukkan Pilihan, ulangi!!!");getch();scanf("%i",&pilih_sisip)
    endwhile
      (pilih_sisip)
{
    case 1 : (gl,"n")
    do{
    masukan_nama(nama_input)
    sisip_nama_depan(nama_input)
    output ("mau tambah lagi ? y / n : ") input(gl)
}
   while (gl,"Y")==0)
    tampil()
   endwhile

    case 2 : (gl,"n")
    do
    {          
    masukan_nama(nama_input)
    sisip_nama_akhir(nama_input)
    output ("mau tambah lagi ? y / n : ")  input (gl)
    }
while (gl,"Y")==0)
     tampil()
endwhile
   
   case 3 : sisip_nama_tengah(nama_input)
    tampil()
    }
    }
    }
Endprocedure



Procedure  masukan_nama (output nama_input : char)
{I.S : User memasukan data yang akan disisipkan (elemen)}
{F.S : menghasilkan data yang akan disisipkan (elemen)}

Kamus :


Algoritma :
      output ("Masukan List Barang : ") input (nama_input)   
   
Endprocedure



Procedure_tampil(input )
{I.S : data sudah terdefinisi }
{F.S : menampilkan hasil akhir data yang telh disispkan}

Kamus :
        Temp : char[20]
        I : integer
        i=0
        q = awal
Algoritma :
    output ("Data Yang Telah Di Sisipkan             ")
    output ("=============================== “)
    while(q!=NULL)
    (temp, q->info)
     output ("->")
     output (temp)
    q = q->next
    i++
     while
 Endprocedure
    
    
    
 Procedure  sisip_nama_depan (input nama: char[20], I/O )
{I.S  : Data yang akan disispkan (nama), pointer penunjuk awal dan pointer akhir sudah terdefinisi }
{F.S : Menampilkan  sisip depan data pada single Linked List }

Kamus:
temp2 : char [20] 


Algoritma:
Alloc (baru)
baru↑.infoß nama
If (awal = NULL)
        then        
             namabaru  ↑  . next ß NULL
             akhir ß namabaru
   
       else
            namabaru  ↑ .next = awal
endif
        awal ß namabaru
endprocedure   


Procedure  sisip_nama_akhir (input nama: char[20], I/O )
{I.S  : Data yang akan disispkan(nama), pointer penunjuk awal dan pointer akhir sudah terdefinisi }
{F.S : Menampilkan  sisip akhir data pada single Linked List }

Kamus:
temp3 : char [20]

Algoritma:
Alloc (baru)
baru↑.infoßnamabaru
If (awal = NULL)
        then        
             awal ß namabaru
   
       else
            akhir ↑ .next = namabaru
            namabaru  ↑ .next=NULL
endif
        akhirßnamabaru
endprocedure   


Procedure : sisip_nama_tengah(char nama_input[20])
{I.S :  Data yang akan disispkan(nama), pointer penunjuk awal dan pointer akhir sudah terdefinisi }
{F.S : Menampilkan sisip tengah data pada Single Linked List }

Kamus
    namabaru,namabantu  : simpul
    nama_cari : char[20]
    ketemu : integer

Algoritma :
if(awal==NULL)
    then
       output("Tidak ada data yang tersedia")
        output ("Silahkan buat data baru terlebih dahulu, dengan memilih menu sisip depan!!!")
      
Procedure menu_sisip
    else
        output ("Masukan nama barang, setelah nama : ")
        input (nama_cari)
        namabantu = awal
        ketemu = 0
        while(ketemu==0 and namabantu ≠ NULL)
                 if(nama_cari,namabantu↑.info)==0)
                             then
ketemu = 1
                             else
                                         namabantu ß namabantu↑.next
                 endif
       endwhile
    if(ketemu==1)
    then
                              masukan_nama(nama_input)
                              if (namabantu==akhir)
                      then
                                         sisip_nama_akhir(nama_input)
                      else
                                         namabaru=(simpul*) Alloc(baru)
                                         namabaru↑.info,nama_input
                                         namabaru↑.next ß namabantu↑.next
                                         namabantu↑.next  ß namabaru
                             endif
      else
                             output("Nama yang dicari tidak ada dalam list atau list kosong")
    endif
endprocedure

Procedure hapus_depan (output elemen : tipedata, I/O awal, akhir : nama_pointer)
{ I S  : list sudah terdefinisi }
{ F S : menghapus suatu simpul yang ada di depan single list }
Kamus:
            phapus : nama_pointer

Algoritma:
phapus ß awal           
            if (awal == akhir)
                        then
                                    awal ß NULL
akhir ß NULL
                         else
                                    awal ß phapus↑.next
                        endif
dealloc(phapus)
endprocedure

Procedure hapus_belakang (output elemen : tipedata, I/O awal, akhir : nama_pointer)
{ I S  : list sudah terdefinisi }
{ F S : menghapus suatu simpul yang ada di belakang single list }
Kamus:
            phapus : nama_pointer
Algoritma:
            phapus ß awal
            while (phapus↑.next ≠ akhir) do
                                    phapus ß phapus↑.next
            endwhile
            akhir ß phapus
            phapus ß akhir↑.next
            elemen ß phapus↑.info
            dealloc(phapus)
endprocedure

Procedure hapus_tengah ( input nama: char[24])
{ I S  : list sudah terdefinisi }
{ F S : menghapus suatu simpul yang ada di tengah single list }

Kamus :
            namacari          : char[24]
            ketemu                         : integer

Algoritma:                   
output(" Masukan data barang yang akan diHapus   :  ") input(namacari)
     phapus ß awal
     ketemu ß 0
     while(ketemu == 0 and phapus != NULL) do
         if ((namacari,phapus↑.info)==0)
              ketemu = 1
         else
              phapus ß phapus↑.next
                        if (ketemu==1)
                                     if (phapus == awal)
                                                 hapus_depan(nama)      
                                     else
                                                 if(phapus == akhir)
                                                                        hapus_belakang(nama)
                                                else
                                                             nama_hapus ß phapus↑.next
                                                                        phapus ß nama_hapus↑.next
                                                            dealloc(phapus)
                        else
                                    tidak_ditemukan();
endprocedure

0 komentar:

Post Coment