Anda di halaman 1dari 23

Kamis, 13.00-15.

00

PRAKTIKUM STRUKTUR DATA


LAPORAN RESMI
MODUL 2
“LINKED LIST”

SESI/ KELOMPOK : D3/8

NAMA PRAKTIKAN :
1. ADHITYA DWI P [1234010019]
2. FADHIL MUHAMMAD [1234010033]

ASISTEN :
1. ADI KISWANTO PUTRA PRATAMA [1134010057]
2. ALFIYAN BAHARUDDIN [1134010046]

LABORATORIUM PEMROGRAMAN KOMPUTER


PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS PEMBANGUNAN NASIONAL “VETERAN” JAWA TIMUR
2013
LEMBAR PENGESAHAN

Telah diperiksa dan disetujui Laporan Resmi :

Praktikum : Struktur Data

Modul :2

Judul : Linked List

Rombongan : D3

Grup :8

Surabaya, November 2013


Mengetahui

[Adi Kiswanto / Alfiyan Baharuddin]


SOAL
ALGORITMA

- Main Program

1. Start
2. Proses N=Nama.new, Menu=0, i=1 , head=kosong, tail=kosong
3. Masukkan Banyak data
4. Jika i <= banyak bernilai benar lanjut ke langkah 5 , jika salah ke langkah 8
5. “Masukkan nama” isi
6. Panggil fugsi n.insert(isi)
7. Proses x=x+1, kembali ke langkah 4
8. Jika menu <= 6 bernilai benar lanjut ke langkah 9, jika salah ke langkah 34
9. Masukkan pilihan menu
10. Jika menu=1 bernilai benar lanjut ke langkah 11, jika salah ke langkah 18
11. “Masukkan nama sesudah” nama
12. “Masukkan banyak data” banyak
13. Proses i=1
14. Jika i <= banyak bernilai benar lanjut ke langkah 15, jika salah ke langkah 8
15. “Masukkan nama baru” isi
16. Panggil fungsi n.append(nama,isi)
17. Proses i=i+1, kembali ke langkah 14
18. Jika menu=2 bernilai benar lanjut ke langkah 18, jika salah ke langkah 26
19. “Masukkan nama sebelum” nama
20. “Masukkan banyak data” banyak
21. Proses i=1
22. Jika i <= banyak bernilai benar lanjut ke langkah 23, jika salah ke langkah 8
23. “Masukkan nama baru” isi
24. Panggil fungsi n.prepend(nama,isi)
25. Proses i=i+1, kembali ke langkah 22
26. Jika menu=3 bernilai benar lanjut ke langkah 27, jika salah ke langkah 29
27. Panggil fungsi n.view
28. Kembali ke langkah 8
29. Jika menu=4 bernilai benar lanjut ke langkah 30, jika salah ke langkah 33
30. Cetak “ANDA TELAH KELUAR”
31. Proses menu=7
32. Kembali ke langkah 8
33. Cetak “ INPUTAN SALAH”
34. End
- Insert

1. Start
2. Deklarasi baru = node.new (isi)
3. Panggil fungsi kosong
4. Jika kosong=true bernilai benar lanjut ke langkah 5, jika salah ke langkah 7
5. Proses head=baru, tail=baru,
6. Lanjut ke langkah 8
7. Proses tail.pnext=baru, baru.plast=tail, tail=baru
8. End

- Append

1. Start
2. Deklarasi baru=node.new (isi) , find=0
3. Panggil fungsi kosong
4. Jika kosong=true bernilai benar lanjut ke langkah 5 , jika salah ke langkah 7
5. Cetak “Data kosong”, lanjut ke langkah 14
6. Proses temp=head
7. Jika temp!=0 bernilai benar lanjut ke langkah 8, jika salah ke langkah
8. Jika nama=temp.data bernilai benar lanjut ke langkah 9, jika salah ke langkah 14
9. Jika temp.plast == kosong bernilai benar lanjut ke langkah 10, jika salah ke langkah 11
10. Proses temp.pnext=baru, baru.plast=temp, tail=baru, lanjut ke langkah 12
11. Proses save=temp.pnext, temp.next=baru, baru.plast=temp, baru.pnext=save,
save.plast=baru , lanjut ke langkah 12
12. Proses find=1, kembali ke langkah 8
13. Temp=temp.pnext, kembali ke langkah 7
14. Jika find=0 bernilai benar lanjut ke langkah 15, jika salah lanjut ke langkah 16
15. Cetak “Data tidak ada”
16. End

- Prepend

1. Start
2. Deklarasi baru=node.new (isi) , find=0
3. Panggil fungsi kosong
4. Jika kosong=true bernilai benar lanjut ke langkah 5 , jika salah ke langkah 7
5. Cetak “Data kosong”, lanjut ke langkah 14
6. Proses temp=head
7. Jika temp!=0 bernilai benar lanjut ke langkah 8, jika salah ke langkah
8. Jika nama=temp.data bernilai benar lanjut ke langkah 9, jika salah ke langkah 14
9. Jika temp.plast == kosong bernilai benar lanjut ke langkah 10, jika salah ke langkah 11
10. Proses temp.plast=baru, baru.plast=baru, head=baru, lanjut ke langkah 12
11. Proses save=temp.plast, temp.plast=baru, baru.pnext=temp, baru.plast=sae,
save.pnext=baru , lanjut ke langkah 12
12. Proses find=1, kembali ke langkah 8
13. Temp=temp.pnext, kembali ke langkah 7
14. Jika find=0 bernilai benar lanjut ke langkah 15, jika salah lanjut ke langkah 16
15. Cetak “Data tidak ada”
16. End

- View

1. Start
2. Deklarasi baru=node.new (isi)
3. Panggil fungsi kosong
4. Jika kosong=true bernilai benar lanjut ke langkah 5, jika salah ke langkah 6
5. Cetak “data kosong”, lanjut ke langkah 10
6. Proses temp=head, no=1
7. Jika temp!=0 bernilai benar lanjut ke langkah 8, jika salah ke langkah 10
8. Cetak temp.data
9. Proses No=no+1, temp=temp.pnext , kembali ke langkah 7
10. End

- Kosong

1. Start
2. Jika head=kosong and tail=kosong bernilai benar lanjut ke langkah , jika salah ke
langkah 3
3. Proses=true , lanjut ke langkah 5
4. Kosong=true, lanjut ke langkah 5
5. End
FLOWCHART

Diagram UML
Flowchart Setiap Method

1. Main Program

START

N=Nama.new
Menu=0
i=1, head=kosong,
tail=kosong

Menu<=6
“masukkan
banyak
data” y
t

“Masukkan
pilihan
i<=banyak menu”

y
y

“Maukkan
nama” Menu=1 t Menu=2 t Menu=3 t Menu=4
isi

y y y y

n.insert(isi)
Masukkan nama Masukkan nama “ANDA
sesudah nama” sebelum nama” N.view TELAH
nama nama KELUAR”

X=x+1
t
“Masukkan “Masukkan Menu=7
banyak data” banyak data”
banyak banyak

i=1 i=1

“INPUTAN
SALAH”

i<=banyak i<=banyak

t
y y

“Masukkan “Masukkan
nama baru “ nama baru “
isi isi

N.append(nama,isi) N.pepend(nama,isi)

i=i+1 i=i+1

END
2. Insert

START

Baru = node.new (isi)

kosong

Kosong=true t

tail.pnext=baru
head=baru
baru.plast=tail
tail=baru
tail=baru

START
3. Append

START

Baru = node.new (isi)


Find=0

kosong

Kosong=true y

“data
Temp=head kosong”

Temp != 0

Nama=temp.data

y
t
Temp.pnext==
t
kosong

y
save=temp.pnext
temp.pnext=baru
Temp.pnext=baru baru.plast=temp
Baru.plast=temp baru.pnext=save t
Tail=baru save.plast=baru

Find=1
Temp=temp.pnext
return

y Find=0

“Data tidak
ada”
t

END
4. Prepend

START

Baru = node.new (isi)


Find=0

kosong

Kosong=true y

“data
Temp=head kosong”

Temp != 0

Nama=temp.data

y
t
Temp.plast==
t
kosong

save=temp.plast
y
temp.plast=baru
baru.pnext=temp
Temp.plast=baru baru.plast=save
Baru.plast=baru save.pnext=baru t
head=baru

Find=1
Temp=temp.pnext
return

y Find=0

“Data tidak
ada”
t

END
5. View 6. Kosong

START
START

Head=kosong and
Baru = node.new (isi) y tail=kosong t

Kosong = true Kosong = false


kosong

END
Kosong=true y

Temp=head “data
No = 1 kosong”

Temp != 0

Temp.data

t
No=no+1
Temp=temp.pnext

START
SOURCE CODE

class Nama
attr_accessor :head, :tail
def initialize
@head=nil
@tail=nil
end
class Node
attr_accessor :data, :pnext, :plast
def initialize(isi)
@data=isi
@pnext=nil
@plast=nil
end
end
def kosong
if @head==nil and @tail==nil
return true
else
return false
end
end
def insert(isi)
baru=Node.new(isi)
if kosong
@head=baru
@tail=baru
else
@tail.pnext=baru
baru.plast=@tail
@tail=baru
end
end
def append(nama,isi)
baru=Node.new(isi)
find=0
if kosong
puts "Data Masih Kosong!!!"
puts "Entry Gagal!!!"
else
temp=@head
while temp!=nil
if nama==temp.data
if temp.pnext==nil
temp.pnext=baru
baru.plast=temp
@tail=baru
else
save=temp.pnext
temp.pnext=baru
baru.plast=temp
baru.pnext=save
save.plast=baru
end
puts
find=1
return
end
temp=temp.pnext
find=1
return
end
temp=temp.pnext
end
if find==0
puts "Nama tidak ditemukan!!!"
puts
end
end
end
def prepend(nama,isi)
baru=Node.new(isi)
find=0
if kosong
puts "Data Masih Kosong!!!"
else
temp=@head
while temp!=nil
if nama==temp.data
if temp.plast==nil
temp.plast=baru
baru.pnext=temp
@head=baru
else
save=temp.plast
temp.plast=baru
baru.pnext=temp
baru.plast=save
save.pnext=baru
end
find=1
return
end
temp=temp.pnext
end
if find==0
puts "Nama tidak ditemukan!!!"
end
end
end
def view
if kosong
puts "Data Masih Kosong!!!"
else
temp=@head
no=1
while temp!=nil
print("Nama ke-"+no.to_s+" : "+temp.data.to_s)
no+=1
temp=temp.pnext
end
end
end

end
menu=1
n=Nama.new
puts "MASUKKAN BANYAK DATA NAMA:"
banyak=gets.to_i
for i in 1..banyak
end
menu=1
n=Nama.new
puts "MASUKKAN BANYAK DATA NAMA:"
banyak=gets.to_i
for i in 1..banyak
puts "MASUKKAN NAMA #{i} :"
isi=gets.to_s
n.insert(isi)
end
while menu<=6
puts "Menu"
puts "1. Entry Setelah Nama"
puts "2. Entry Sebelum Nama"
puts "3. View Daftar Nama"
puts "4. Exit"
print "Masukkan pilihan menu:"
menu=gets.to_i
if menu==1
print "Masukkan Nama Sesudah Nama : "
nama=gets.to_s
puts "masukkan banyak data:"
banyak=gets.to_i
for i in 1..banyak
print "Masukkan Nama baru ke #{i}: "
isi=gets.to_s
n.append(nama,isi)
end
elsif menu==2
print "Masukkan Nama Sebelum Nama : "
nama=gets.to_s
puts "masukkan banyak data:"
banyak=gets.to_i
for i in 1..banyak
print "Masukkan Nama baru ke #{i}: "
isi=gets.to_s
n.prepend(nama,isi)
end
elsif menu==3
puts "DATA NAMA:"
n.view
elsif menu==4
puts "ANDA TELAH KELUAR"
menu=7
else
puts "INPUTAN SALAH"
end
end
end
end
def delete
puts "DATA TELAH DIHAPUS"
@nama="-"
@nik="-"
@jabatan="-"
@alamat="-"
@gaji="-"
@tunjangan="-"
@total="-"
end
end
end
OUTPUT
1. Input
2. View
3. Search
4. Update

5. Delete
ANALISA MASALAH
Fungsi Search

Pada fungsi search ini, digunakan untk menampilkan data yang di cari oleh user dengan
memasukkan nama yang akan dicari. Misalkan data yang telah di inputkan bernama adi, maka,
jika ingin mencari data terebut, tinggal memasukkan nama “adi” dan akan keluar data tersebut.

Pada fungsi search ini,


def search
membandingkan variabel nama baru dengan
printf "Masukkan Nama
nama yang telah ada sebeelumnya. Jika data
Karyawan yang akan di cari :"
nama yang dimasukkan sama, maka data
@namabaru=gets.chomp
akan keluar, njika tidak sesuai, maka data
if @namabaru == @nama
tidak akan keluar.
view
else Dalam fungsi search ini, memanggil
puts "NAMA YANG ANDA MASUKKAN fungsi view juga karena source code yang
TIDAK ADA" ada didalamnya sama, sehingga hanya perlu
end memanggil fungsi view yang ada di dalam
end kelas karyawan.

Fungsi Update

Pada fungsi update ini digunakan untuk mengganti data yang telah di inputkan atau
mengupdate data yang telah di inputkan dengan cara memasukkannama data yang akan diganti.
Jadi jika kita ingin mengganti data yang telah ada, misalnya bernama adi, maka kita tinggal
memasukkan nama “adi” yang akan kita update.

Dalam fungsi update ini,


def update membandingkan nama data baru
printf "Masukkan Nama Karyawan yang yang akan di update dengan nama
akan di update :" data yang telah di inputkan
@update=gets.chomp sebelumnya. Jika nama baru sama
if @update==@nama dengan nama yang telah di inputkan,
input maka akan melakukan prosses
else pemanggilan fungsi input. Karena
puts "NAMA YANG ANDA MASUKKAN TIDAK ADA" source code nya sama dengan fungsi
end input, yaitu memasukkan data baru
end
yang akan mengupdate data yang
lama.
Fungsi Proses

def proses Pada fungsi proses ini, dilakukan proses


if @kodejabatan == 1001 perhitungan dan penginisialisasian variabel. Yaitu
@jabatan="Direktur" jika kode jabatan yang dimasukkan 1001, maka jabatan
@nik=1001 nya dalah direktur, nik nya 1001 dan gaji nya dalah
@gaji=5000000 5000000. Begitu juga jika menginputkan kode jabatan
elsif @kodejabatan == lain, maka akan diproses sesuai source code yang telah
2002 di program.
@jabatan="Manager"
@nik=2002 Selain itu, dalam fungsi proses iini, juga dilakukan
@gaji=4000000 proes perhitungan tunjangan gaji . tunjangan didapatkan
elsif @kodejabatan == dari jam lembur x 100000 + jumlah anak x 2000000 +
3003 10% dari gaji. Kemudian variabel-variabel tersebut
@jabatan="Staff" akan di panggil di dalam kelas-kelas lainn.
@nik=3003
@gaji=3000000
elsif @kodejabatan ==
4004
@jabatan="Sekretaris"
@nik=4004
@gaji=3000000
elsif @kodejabatan ==
5005
@jabatan="OB"
@nik=5005
@gaji=2000000
elsif @kodejabatan ==
6006
@jabatan="Security"
@nik=6006
@gaji=2000000
else
@jabatan="tidak ada"
@nik=0
end
@tunjangan=(@lembur*1000
00)+(@anak*200000)+(@gaj
i/10)
@total=@gaji+@tunjangan
end
end
KESIMPULAN
Dari hasil praktikum di atas dapat di ambil suatu kesimpulan bahwa linked list adalah
suatu simpul / node yang di kaitkan dengan simpul yang lain dalam suatu urutan yang tertentu.
Suatu simpul dapat terbentuk suatu struktur. Setiap simpul memeliki dua kelompok elemen yaitu
elemen darat dan elemen pointer. Suatu simpul harus mempunyai satu atau lebih elemen struktur
yang berupa pointer. Elemen struktur yang berupa pointer ini di sebut link.

Sedangkan double linked list adalah linked list yang terdapat interaksi antar nodenya di
mana setiap node dapat menunjuk node sebelum dan node setelah yang memiliki 2 elemen
pointer. Di dalam ruby kita mengenal nama node berupa head dan tail. Di dalam double linked
list terdapat 2 jenis untuk penembahan data yaitu append dan prepend. Append merupakan
penambahan data sesudah node yang di tunjuk, sedangkan prepend merupakan penambahan
sebelum node yang di tunjuk.

Anda mungkin juga menyukai