Double linklist adalah sebuah list yang elemennya
menyimpan informasi elemen sebelumnya dan informasi elemen setelahnya (2
penunjuk) sehingga proses penelusuran list dapat dilakukan secara maju dan
mundur. Double linked list terdiri dari beberapa jenis list yaitu linked list
dengan kepala dan ekor (awal, akhir), linked list dengan kepala dan double
linked list berputar.
Double linked list dengan kepala dan ekor memiliki 2 penunjuk yang dapat
diakses pada awal penelusuran list, yaitu penunjuk elemen awal dan penunjuk
elemen akhir.
Double linked list dengan kepala, hanya memiliki
sebuah penunjuk elemen di awal (first).
Double linked list berputar ditandai dengan elemen
setelahnya adalah merupakan elemen pertama (awal) list.
Macam-macam operasi dalam double linked list antara
lain :
A.
Penciptaan
B.
Penyisipan
C.
Penghapusan
D.
Traversal
E.
Pencarian
F.
Pengurutan
Pengurutan data dalam struktur data sangat penting untuk
data yang bertipe
data numerik ataupun karakter. Pengurutan
dapat dilakukan secara ascending (urut naik) dan descending (urut turun).
Disini penulis
akan membahas tentang selection
sort secara descending.
Pengurutan
adalah proses menyusun kembali data yang sebelumnya telah disusun dengan suatu
pola tertentu, sehingga tersusun secara teratur menurut aturan tertentu.
Pada dasarnya selection
sort adalah memilih
elemen maksimum/minimum dari list,
lalu menempatkan elemen maksimum/minimum
itu pada awal atau akhir suatu list. Selanjutnya elemen terujung tersebut “diisolasi” dan
tidak disertakan pada proses selanjutnya.
G.
Penghancuran
Notasi
Algoritmik
Program
rekam_data_mhs_penyewa_mobil
{I.S:
List diberi harga awal}
{F.S:
List dalam keadaan siap digunakan}
Kamus :
{prototype}
Procedure penciptaan (I/O awal,akhir:
point)
Procedure sisipdepan (I/O
awal,akhir:point)
Procedure sisiptengah (I/O
awal,akhir:point)
Procedure sisipakhir (I/O
awal,akhir:point)
Procedure hapusdepan (I/O
awal,akhir:point)
Procedure hapustengah (I/O
awal,akhir:point)
Procedure hapusakhir (I/O
awal,akhir:point)
Procedure pencarian_nim (Input
awal:point)
Procedure pencarian_nama (Input
awal:point)
Procedure selection_sort (I/O
awal:point)
Procedure sewa_tersingkat (Input
awal:point)
Procedure daftar_penyewa (Input
awal:point)
Procedure penghancuran (Input awal,
akhir:point)
Procedure tampilmenu(I/O menu:char)
{deklarasi}
Type
Point=^Data
Datapendaftar = record
< nim :
longint,
nama :
string,
kota :
string,
lamasewa : integer
>
Endrecord
Data = record
< info :datapendaftar,
next,prev : point
>
Endrecord
Awal,akhir :
point
Menu :
char
Procedure penciptaan (I/O awal,akhir:
point)
{I.S: pointer diberi harga awal}
{F.S: pointer dalam keadaan siap digunakan}
Algoritma :
Awal ← nil
Akhir ← nil
Endprocedure
Procedure sisipdepan (I/O
awal,akhir:point)
{I.S: menambahkan satu simpul baru di posisi
pertama}
{F.S: menghasilkan list dengan simpul baru di
posisi pertama}
Kamus :
Baru : point
Algoritma :
alloc (baru)
baru↑.prev ← nil
input (baru↑.info.nim)
input (baru↑.info.nama)
input (baru↑.info.kota)
input (baru↑.info.lamasewa)
if (awal=nil) then
baru↑.next ← nil
awal ← baru
akhir ← baru
else
baru↑.next ← awal
awal↑.prev ← baru
awal ← baru
endif
EndProcedure
Procedure sisiptengah (I/O
awal,akhir:point)
{I.S: menyisipkan satu simpul baru sebelum
simpul tertentu}
{F.S: menghasilkan list dengan simpul baru di
posisi tertentu}
Kamus :
baru,bantu : point
ketemu : boolean
nimdicari : longint
Algoritma :
if (awal=nil) then
alloc (baru)
input
(baru↑.info.nim)
input
(baru↑.info.nama)
input
(baru↑.info.kota)
input
(baru↑.info.lamasewa)
baru↑.next←nil
baru↑.prev←nil
awal←baru
akhir←baru
else
input(nimdicari)
bantu←awal
ketemu←false
{searching}
while
(bantu≠nil) and (not ketemu) do
if
(bantu↑.nim=nimdicari) then
ketemu←true
else
bantu←bantu↑.next
endif
endwhile
{lakukan penyisipan
pada simpul sebelumnya}
if (ketemu) and
(bantu≠awal) then
{sisip
tengah}
alloc
(baru)
input
(baru↑.info.nim)
input
(baru↑.info.nama)
input
(baru↑.info.kota)
input
(baru↑.info.lamasewa)
baru↑.next←bantu
baru↑.prev←bantu↑.prev
bantu↑.prev↑.next←baru
bantu↑.prev←baru
else
if
(bantu=awal) then
output
("silahkan lakukan penyisipan depan")
else
output
("tidak ditemukan data yang dicari")
endif
endif
endif
EndProcedure
Procedure sisipakhir (I/O
awal,akhir:point)
{I.S: menambahkan satu simpul baru di posisi
akhir}
{F.S: menghasilkan list dengan simpul baru di
posisi akhir}
Kamus:
Baru : point
Algoritma:
alloc (baru)
baru↑.next ← nil
input (baru↑.info.nim)
input (baru↑.info.nama)
input (baru↑.info.kota)
input (baru↑.info.lamasewa)
if (awal=nil) then
baru↑.prev ← nil
awal ← baru
akhir ← baru
else
baru↑.prev ← akhir
akhir↑.nex t← baru
akhir ← baru
EndProcedure
Procedure hapusdepan (I/O
awal,akhir:point)
{I.S: menghapus satu simpul di posisi
pertama}
{F.S: menghasilkan list dengan keadaan simpul
pertama terhapus}
Kamus :
elemen : datapendaftar
phapus : point
Algoritma :
if (awal = nil) then
output ("List
masih kosong")
else
if (awal = akhir) then
phapus ← awal
awal ← nil
akhir ← nil
elemen↑.info ← phapus↑.info
dealloc (phapus)
else
phapus ← awal
awal ← awal↑.next
awal↑.prev ← nil
elemen↑.info ← phapus↑.info
dealloc (phapus)
endif
endif
EndProcedure
Procedure hapustengah (I/O
awal,akhir:point)
{I.S: menghapus satu simpul berdasarkan
posisi tertentu}
{F.S: menghasilkan list dengan keadaan satu
simpul terhapus di posisi tertentu}
Kamus :
elemen : Datapendafatar
phapus : Point
posisihapus,caposisi : integer
Algoritma:
Input (posisihapus) {untuk
mencari posisi hapus}
Phapus ← awal
Caposisi ← 1
{searching}
while (phapus ≠ nil) and
(caposis i≠ posisihapus) do
phapus ← phapus↑.next
caposisi ← caposisi+1
endwhile
{lakukan hapus tengah}
if (phapus=nil) then
output ("Data
masih kosong atau berada diluar jangkauan")
else
if (awal = akhir) then
awal ← nil
akhir ← nil
elemen↑.info ← phapus↑.info
dealloc (phapus)
else
phapus↑.prev↑.next ← phapus↑.next
phapus↑.next↑.prev ← phapus↑.prev
elemen↑.info ← phapus↑.info
dealloc (phapus)
endif
endif
EndProcedure
Procedure hapusakhir (I/O
awal,akhir:point)
{I.S: menghapus satu simpul di posisi akhir}
{F.S: menghasilkan list dengan keadaan simpul
terakhir terhapus}
Kamus:
Elemen : Datapendaftar
phapus :
Point
Algoritma:
if (awal = nil) then
output ("list
masih kosong")
else
if (awal = akhir) then
phapus ← akhir
awal ← nil
akhir ← nil
elemen↑.info ← phapus↑.info
dealloc (phapus)
else
phapus←akhir
akhir←akhir↑.prev
akhir↑.next←nil
elemen↑.info←phapus↑.info
dealloc (phapus)
endif
endif
EndProcedure
Procedure pencarian_nim (Input
awal:point)
{I.S: Melakukan pencarian data unik nim
dengan sequential search with boolean}
{F.S: Menampilkan hasil pencarian terhadap
data unik nim}
Kamus :
nim_dicari : longint
ketemu :
boolean
bantu : point
Algoritma :
Input (nim_dicari)
Bantu ← awal
Ketemu ← false
while (bantu ≠ nil) and
(not ketemu) do
if
(bantu↑.info.nim = nim_dicari) then
ketemu ← true
else
bantu ← bantu↑.next
endif
endwhile
if (ketemu) then
output ("NIM
ditemukan!")
output
(bantu↑.info.nim)
output
(bantu↑.info.nama)
output
(bantu↑.info.kota)
output
(bantu↑.info.lamasewa)
else
output ("Tidak
ditemukan penyewa dengan NIM tersebut")
endif
EndProcedure
Procedure pencarian_nama (input awal :
point)
{I.S: Melakukan pencarian data tidak unik
terhadap nama penyewa}
{F.S: Menampilkan seluruh data hasil
pencarian yang berkaitan}
Kamus:
nama_dicari : string
bantu : point
Algoritma:
input (nama_dicari)
bantu ← awal
if (awal = nil) then
output ('List masih
kosong')
else
while (bantu ≠
nil) do
if
(bantu↑.nama = nama_dicari) then
output
(bantu↑.info.nim)
output
(bantu↑.info.nama)
output
(bantu↑.info.kota)
output
(bantu↑.info.lamasewa)
endif
bantu ← bantu↑.next
endwhile
endif
EndProcedure
Procedure selection_sort (I/O awal:
point)
{I.S: Data sudah terdefinisi}
{F.S: Menghasilkan data simpul yang terurut
descending berdasarkan nim}
Kamus :
i, max, j : Point
Temp : Datapendaftar
Algoritma :
i ← awal
while (i↑.next ≠ nil) do
max ← i
j ← i↑.next
while (j≠nil) do
if
(j↑.info.nim>max↑.info.nim) then
max
← j
endif
j ← j↑.next
endwhile
{pertukaran}
temp ← i↑.info
i↑.info ← max↑.info
max↑.info ← temp
i ← i↑.next
endwhile
EndProcedure
Procedure daftar_penyewa (Input
awal:point)
{I.S: Data penyewa sudah terdefinisi}
{F.S: Mencetak daftar penyewa ke piranti
keluaran}
Kamus:
bantu : point
Algoritma:
if (awal = nil) then
output ("List
masih kosong")
else
selection_sort (awal)
bantu ← awal
while
(bantu≠nil) do
output
(bantu↑.info.nim)
output
(bantu↑.info.nama)
output
(bantu↑.info.kota)
output
(bantu↑.info.lamasewa)
bantu←bantu↑.next
endwhile
endif
EndProcedure
Procedure sewa_tersingkat (Input
awal:point)
{I.S: Data sudah terdefinisi}
{F.S: Mencetak hasil dari lama sewa
tersingkat dari total penyewa}
Kamus:
min, bantu :point
Algoritma:
if (awal=nil) then
output("list
masih kosong")
else
min ← awal
bantu ← min↑.next
while
(bantu≠nil) do
if
(bantu↑.info.lamasewa<min↑.info.lamasewa) then
min←bantu
else
bantu←bantu↑.next
endwhile
endif
output (min↑.info.nim)
output (min↑.info.nama)
output (min↑.info.kota)
output (min↑.info.lamasewa)
EndProcedure
Procedure penghancuran (Input awal,
akhir:point)
{I.S : data sudah terdefinisi sebelumnya }
{F.S : simpul dalam keadaan terhapus sepenuhnya}
Kamus :
phapus : point
Algoritma :
phapus←awal
while (phapus≠nil) do
awal←awal↑.next
dealloc (phapus)
phapus←awal
endwhile
akhir←nil
EndProcedure
Procedure tampilmenu(I/O menu:char)
{I.S: pilih menu dibaca dari piranti masukan}
{F.S: melakukan prosedur sesuai menu dipilih}
Algoritma:
output ("Menu")
output ("1. Daftar dengan
Sisip Data")
output ("2. Hapus
Data")
output ("3. Cari Data")
output ("4. Tampil
Data")
output ("0. exit")
Input (menu)
Depend on
(menu)
(menu=1) : output ("1.
Sisip Depan")
output ("2. Sisip Tengah")
output ("3. Sisip Akhir")
output ("4. Back")
Input(menu)
Depend on (menu)
(menu=1) : sisipdepan(awal,akhir)
(menu=2) : sisiptengah(awal,akhir)
(menu=3) : sisipakhir(awal,akhir)
(menu=4) : clrscr
EndDepend
(menu=2) : output ("1. Hapus Depan")
output ("2. Hapus Tengah")
output ("3. Hapus Akhir")
output ("4. Back")
Input(menu)
Depend on (menu)
(menu=1) : Hapusdepan(awal,akhir)
(menu=2) : Hapustengah(awal,akhir)
(menu=3) : Hapusakhir(awal,akhir)
(menu=4) : clrscr
EndDepend
(menu=3) :
output ("1. Cari NIM")
output ("2. Cari Nama")
output ("3. Back")
Input(menu)
Depend on (menu)
(menu=1) : pencarian_nim(awal)
(menu=2) : pencarian_nama(awal)
(menu=3) : clrscr
EndDepend
(menu=4) : output ("1. Daftar Penyewa")
output ("2. Lama Sewa Tersingkat")
output ("3. Back")
Input(menu)
Depend on (menu)
(menu=1) : daftar_penyewa(awal)
(menu=2) : sewa_tersingkat(awal)
(menu=3) : clrscr
EndDepend
(menu=0) : clrscr
EndDepend
Endprocedure
Algoritma:
Penciptaan (awal,akhir)
repeat
tampilmenu
(menu)
until
(menu=0)
penghancuran
(awal,akhir)
Semoga bermanfaat
download windows 8.1 all edition full version gratis