ALGORITMA CIRCULAR DOUBLE LINKED LIST (Perspustakaan)

ini pekerjaan kami :
- Dodi Permana
- Selamet Riyadi
- Swayji Giandika
- Sri Anggraeni
- Pipit Pitria

{-----------------------------------------SISIP DEPAN-------------------------------------------}
procedure sisip_depan_double(I/O awal,akhir:pointer input kode:integer judul:string)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menghasilkan satu simpul yang disisipkan di depan pada double linked list}
Kamus :
dataBuku:pointer
Algoritma :
New(dataBuku)
dataBuku↑.kodeBuku ← kode
dataBuku↑.judulBuku ← judul
if (awal = nil) then
awal ← dataBuku
akhir ← dataBuku
akhir↑.next ← awal
awal↑.prev ← akhir
else
dataBuku↑.next ← awal
awal↑.prev ← dataBuku
awal ← dataBuku
akhir↑.next ← awal
awal↑.prev ← akhir
endif
endprocedure


{-----------------------------------------SISIP BELAKANG-------------------------------------------}
procedure sisip_belakang_double(I/O awal,akhir :pointer input kode:integer judul:string)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menghasilkan satu simpul yang disisipkan di belakang pada double linked list}
Kamus :
dataBuku : pointer
Algoritma :
New(dataBuku)
dataBuku↑.kodeBuku ← kode
dataBuku↑.judulBuku ← judul
dataBuku↑.next ← awal
if (awal = nil) then
awal ← dataBuku
akhir ← dataBuku
akhir↑.next ← awal
awal↑.prev ← akhir
else
dataBuku↑.prev←akhir
akhir↑.next←dataBuku
akhir←dataBuku
akhir↑.next←awal
awal↑.prev←akhir
endif
endprocedure





{-----------------------------------------SISIP TENGAH-------------------------------------------}
procedure sisip_tengah_double(I/O awal,akhir :pointer input kode:integer judul:string menu_sisiptengah :integer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menghasilkan satu simpul yang disisipkan di tengah pada double linked list}

Kamus :
procedure sisip_belakang_double(I/O awal,akhir :pointer input kode:integer judul:string)
dataBuku,bantu : pointer
datasisip: integer
ketemu:boolean
Algoritma :
if(awal=nil)then
New(dataBuku)
dataBuku↑.kodeBuku← kode
dataBuku↑.judulBuku← judul
dataBuku↑.next← awal
dataBuku↑.prev ← akhir
awal←dataBuku
akhir←dataBuku
else
{SEQUENTIAL SEARCH}
output('Disisipkan Di (Kode Buku) : ')
input(datasisip)
bantu←awal
ketemu←false
while(not ketemu) and (bantu ≠ nil ) do
if(datasisip=bantu↑.kodeBuku)then
ketemu←true
else
bantu←bantu↑.next
if(bantu↑.next = awal↑.next) then
bantu ← nil
endif
endwhile
if(ketemu) then
New(dataBuku)
dataBuku↑.kodeBuku←kode
dataBuku↑.judulBuku←judul
if(bantu=awal↑.prev) then
sisip_belakang_double(awal,akhir,kode,judul)
else
if(menu_sisiptengah=1) then
dataBuku↑.prev ← bantu
dataBuku↑.next ← bantu↑.next
bantu↑.next↑.prev ← dataBuku
bantu↑.next ←dataBuku
else
if(menu_sisiptengah=2) then
dataBuku↑.prev ← bantu↑.prev
dataBuku↑.next ← bantu
bantu↑.prev↑.next ← dataBuku
bantu↑.prev ← dataBuku
endif
endif
else
output('Data Yang Akan Anda Sisipkan Tidak Ada')
endif
endprocedure



{------------------------------------------HAPUS DATA--------------------------------------}

procedure hapus_double_depan(I/O awal:pointer output: elemen:integer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menghapus simpul depan pada double linked list}

Kamus :
phapus:pointer
Algoritma :
if (awal = nil)then
output('Data Masih Kosong , Penghapusan Tidak Bisa Dilakukan !!')
else
begin
phapus←awal
elemen← phapus↑.kodeBuku
if(awal=akhir)
then
awal←nil
akhir←nil
else
awal←awal↑.next
awal↑.prev ← akhir
akhir↑.next ← awal
dispose(phapus)
output('Penghapusan Berhasil')
endif
endif
endprocedure


procedure hapus_double_belakang(I/O awal,akhir : pointer output: elemen:integer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menghapus satu simpul di belakang pada double linked list}

Kamus :
phapus:pointer
Algoritma :
if (awal = nil) then
output('Data Masih Kosong , Penghapusan Tidak Bisa Dilakukan !!')
else
if (awal = akhir) then
awal←nil
akhir←nil
else
phapus ← akhir
akhir ← akhir↑.prev
awal↑.prev ← akhir
akhir↑.next ← awal
elemen ← phapus↑.kodeBuku
dispose(phapus)
output('Penghapusan Berhasil')
endif
endif
endprocedure


procedure hapus_double_tengah(I/O: awal,akhir :pointer output: elemen:integer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. Menghapus satu simpul yang ditunjuk oleh user baik yang sebelum atau sesudah pada double linked list}
Kamus :
procedure hapus_double_belakang(I/O awal,akhir : pointer output: elemen:integer)
procedure hapus_double_depan(I/O awal:pointer output: elemen:integer)
bantu,hapus : pointer
datahapus:integer
Algoritma :
output('Masukan Kode Buku Yang Akan Di Hapus : ')input(datahapus)
if (awal = nil )then
output('Data Masih Kosong')
else
bantu←awal
new(hapus)
if(datahapus = awal↑.kodeBuku)then
hapus_double_depan(awal,elemen)
else
while(bantu↑.next ≠ nil) do
if(bantu↑.next↑.kodeBuku = datahapus) then
if (bantu↑.next↑.kodeBuku = akhir↑.kodeBuku)then
hapus_double_belakang(awal,akhir,elemen)
else
hapus←bantu↑.next
bantu↑.next←hapus↑.next
elemen←hapus↑.kodeBuku
dispose(hapus)
output('Data Dengan Kode Barang ',elemen,' Berhasil Dihapus ')
endif
endwhile
else
bantu←bantu↑.next
endif
endif
endif
endprocedure
{-------------------------------------------CARI DATA---------------------------------------}

procedure cari_kode(output: awal :pointer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menampilkan hasil cari data pada simpul yang ditunjuk oleh user pada double linked list}
Kamus :
y : integer
ketemu:boolean
datacari: integer
bantu : pointer
Algoritma :
output('Masukan Kode yang Akan Dicari : ')
input(datacari)
bantu←awal
ketemu←false
while(not ketemu) and (bantu ≠ awal↑.prev) do
if(datacari=bantu↑.kodeBuku)
then
ketemu←true
else
bantu←bantu↑.next
endif
endwhile
if(ketemu) then
output(bantu↑.kodeBuku)
output(bantu↑.judulBuku)
else
output('Buku dengan Kode ',datacari,' Tidak Ditemukan!')
endif
endprocedure


procedure cari_judul(output: awal :pointer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menampilkan hasil cari data pada simpul yang ditunjuk oleh user pada double linked list}
Kamus :
y : integer
bantu:pointer
ketemu:boolean
datacari: string
Algoritma :
output('Masukan Judul yang Akan Dicari : ')
input(datacari)
bantu←awal
ketemu←false
while(not ketemu) and (bantu ≠ awal↑.prev) do
begin
if(datacari=bantu↑.judulBuku)
then
ketemu←true
else
bantu←bantu↑.next
endif
endwhile
if(ketemu) then
output(bantu↑.judulBuku)
output(bantu↑.kodeBuku)
else
output('Buku dengan Judul ',datacari,' Tidak Ditemukan!')
endif
endprocedure



{-----------------------------------TAMPIL DATA--------------------------------}

procedure tampil(input awal:pointer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menampilkan semua simpul yang belum terurut pada double linked list}
Kamus :
bantu : pointer
i,y : integer
Algoritma :
bantu ← awal
while (bantu ≠ nil ) do
output(bantu↑.kodeBuku)
output(bantu↑.judulBuku)
bantu←bantu↑.next
i←i+1
if(bantu↑.next=awal↑.next) then
bantu← nil
endif
endwhile
endprocedure

procedure tampil_dsc(input awal:pointer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menampilkan data yang sudah diurut secara descending pada double linked list}
Kamus :
min,bantu,a,b:pointer
i,y,temp:integer
temp2 :string
Algoritma :
bantu←awal
a←awal
if(awal=nil) then
output('Data Masih Kosong, Sisipkan Terlebih dahulu.')
endif
while (a ≠ akhir) do
b←a↑.next
min ← a
while(b ≠ bantu) do
if (b↑.kodeBuku > min↑.kodeBuku) then
min←b
b←b↑.next
temp←a↑.kodeBuku
a↑.kodeBuku ← min↑.kodeBuku
min↑.kodebuku←temp
temp2←a↑.judulBuku
a↑.judulBuku ← min↑.judulBuku
min↑.judulBuku←temp2
a←a↑.next
endif
endwhile
endwhile
while (bantu ≠ nil) do
while (bantu ≠ nil) do
begin
output(bantu↑.kodeBuku)
output(bantu↑.judulBuku)
bantu←bantu↑.next
if(bantu↑.next=awal↑.next) then
bantu ← nil
endif
endwhile
endwhile
endprocedure

{----------------------------------------PENGHANCURAN-----------------------------}

procedure penghancuran(I/O: awal : pointer)
{I.S. : Data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdefinisi }
{F.S. : Menghapus semua data pada double linked list}
Kamus :
procedure hapus_double_depan(I/O awal:pointer output: elemen:integer)
elemen : integer
Algoritma :
repeat
hapus_double_depan(awal,elemen)
until (awal = nil)
output('Data Berhasil Dihapus.')
endprocedure

{-----------------------------------------ALGORITMA UTAMA-------------------------------------------}
perpustakaan
type
pointer = ↑Buku
Buku = record
kodeBuku : integer
judulBuku: string
next,prev : pointer
end

Kamus :
procedure sisip_depan_double(I/O awal,akhir:pointer input kode:integer judul:string)
procedure sisip_belakang_double(I/O awal,akhir :pointer input kode:integer judul:string)
procedure sisip_tengah_double(I/O awal,akhir :pointer input kode:integer judul:string menu_sisiptengah :integer)
procedure hapus_double_depan(I/O awal:pointer output: elemen:integer)
procedure hapus_double_belakang(I/O awal,akhir : pointer output: elemen:integer)
procedure hapus_double_tengah(I/O: awal,akhir :pointer output: elemen:integer)
procedure cari_kode(output: awal :pointer)
procedure cari_judul(output: awal :pointer)
procedure tampil(input awal:pointer)
procedure tampil_dsc(input awal:pointer)
procedure penghancuran(I/O: awal : pointer)
awal,akhir : pointer
kode : integer
judul : string
pilih,menu_sisip,menu_hapus,menu_cari,menu_sisiptengah,menu_tampil:integer
ulang,pilih2:char
i:integer
Algoritma :
awal←nil
akhir←nil
ulang←'y'
repeat
output(' Menu Utama ')
output('[1].Sisipkan Data ')
output('[2].Hapus Data ')
output('[3].Cari Data ')
output('[4].Tampilkan Data ')
output('[5].Hapus Total ')
output('[0].Keluar ')
output('Masukan Pilihan : ')
input(pilih)
dependon (pilih)
1: output('DAFTAR BUKU PERPUSTAKAAN')
output(' Menu Sisip ')
output('[1].Sisip Depan ')
output('[2].Sisip Tengah ')
output('[3].Sisip Belakang ')
output('[0].Keluar ')
output('Masukan Pilihan : ')
input(menu_sisip)

dependon (menu_sisip)
1 : pilih2←'y'
i←1
while (pilih2 = 'y') or (pilih2='Y') do
output('DAFTAR BUKU PERPUSTAKAAN')
output('Penyisipan Data dari Depan')
output('Data Buku Ke- ',i)
output('Kode Buku : ')
input(kode)
output('Judul Buku : ')
input(judul)
sisip_depan_double(awal,akhir,kode,judul)
output('Tambah Buku [Y/T] :')input(pilih2)
i←i+1
endwhile
2 : if (awal=nil) and (akhir=nil) then
output('Data Kosong, Isi Data Terlebih Dahulu')
else
pilih2←'y'
i←1
while(pilih2 = 'y') or (pilih2='Y') do
output('DAFTAR BUKU PERPUSTAKAAN')
output(' Menu Sisip Tengah ')
output('[1].Sisip Setelah ')
output('[2].Sisip Sebelum ')
output('Masukan Pilihan : ')
output('DAFTAR BUKU PERPUSTAKAAN')
output('Penyisipan Data dari Tengah')
output
output('Data Buku Ke- ',i)
output('Kode Buku : ')input(kode)
output('Judul Buku : ')input(judul)
sisip_tengah_double(awal,akhir,kode,judul,menu_sisiptengah)

output('Lakukan Lagi : ')input(pilih2)
i←i+1
endwhile
endif
3 : pilih2←'y'
i←1
while(pilih2 = 'y') or (pilih2='Y') do
gotoxy(28,2)output('DAFTAR BUKU PERPUSTAKAAN')
output('Penyisipan Data dari Belakang')
output('Data Buku Ke- ',i)
output('Kode Buku : ')input(kode)
output('Judul Buku : ')input(judul)
sisip_belakang_double(awal,akhir,kode,judul)
output('Lakukan Lagi : ')input(pilih2)
i←i+1
endwhile
0:exit
enddepend
2:output('DAFTAR BUKU PERPUSTAKAAN')
output(' Menu Hapus ')
output('[1].Hapus Depan ')
output('[2].Hapus Tengah ')
output('[3].Hapus Belakang ')
output('[0].Keluar ')
output('³Masukan Pilihan : ')
input(menu_hapus)

dependon (menu_hapus)
1 : pilih2←'y'
i←1
while (pilih2 = 'y') or (pilih2='Y') do
hapus_double_depan(awal,kode)
output('Lakukan Lagi : ')input(pilih2)
i←i+1
endwhile
2 : pilih2←'y'
i←1
while (pilih2 = 'y') or (pilih2='Y') do
hapus_double_tengah( awal,akhir,kode)
output('Lakukan Lagi : ')input(pilih2)
i←i+1
endwhile
3 : pilih2←'y'
i←1
while (pilih2 = 'y') or (pilih2='Y') do
hapus_double_belakang(awal,akhir,kode)
output('Lakukan Lagi : ')input(pilih2)
i←i+1
endwhile
0:exit
enddepend
3: output('DAFTAR BUKU PERPUSTAKAAN')
output(' Menu Cari ')
output('[1].Berdasarkan Kode ')
output('[2].Berdasarkan Judul ')
output('Masukan Pilihan : ')
input(menu_cari)
dependon (menu_cari)
1 : cari_kode(awal)
2 : judul(awal)
enddepend
4:output(' Menu Tampil ')
output('[1].Sebelum Diurut ')
output('[2].Setelah Terurut ')
output('Masukan Pilihan : ')
input(menu_tampil)
dependon menu_tampil
1 : tampil(awal)
2 : tampil_dsc(awal)
enddepend
5: penghancuran(awal)
0:exit
enddepend
output('³Kembali ke Menu Awal : ³')
input(ulang)
until(ulang = 't') Or (ulang='T')

0 komentar:

Posting Komentar