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:
Posting Komentar