materi berikutnya yang saya dapat dari mata kuliah struktur data, meskipun setiap kuliah ini selalu tegang karena dosen nya agak “menakutkan”, tapi mungkin ini menjadi nilai lebih karena saya menjadi lebih mengerti dan tidak malas-malasan.

Di bawah ini program perpustakaan dengan menggunakan double linked list yang saya buat. semoga bermanfaat.
program dls_perpustakaan;
uses crt;
type
perpus_pointer = ^simpul;
simpul = record
judulbuku : string;
jenisbuku : string;
penulisbuku : string;
next : perpus_pointer;
prev : perpus_pointer;
end;
var
awal,akhir : perpus_pointer;
judul,jenis,penulis : string;
menu,menusisip,menuhapus : integer;
procedure menuutama(var menu:integer);
begin
gotoxy(1,1);writeln(‘PROGRAM PERPUSTAKAAN’);
gotoxy(1,2);writeln(‘——————–’);
gotoxy(1,3);writeln(’1. Penyisipan Data Buku’);
gotoxy(1,4);writeln(’2. Penghapusan Data Buku’);
gotoxy(1,5);writeln(’3. Pencarian Data Buku’);
gotoxy(1,6);writeln(’4. Daftar Data Buku’);
gotoxy(1,7);writeln(’0. Hapus Daftar Buku’);
gotoxy(1,8);write(‘Pilih Menu Utama : ‘);readln(menu);
end;
procedure menupenyisipan(var menusisip:integer);
begin
writeln(‘PROGRAM PERPUSTAKAAN’);
writeln(‘——————–’);
writeln(‘Penyisipan Data Buku’);
writeln(’1. Penyisipan Depan’);
writeln(’2. Penyisipan Tengah’);
writeln(’3. Penyisipan Belakang’);
write();
write(‘Pilih Menu Penyisipan : ‘);readln(menusisip);
end;
procedure menupenghapusan(var menuhapus:integer);
begin
writeln(‘Penghapusan Data Buku’);
writeln(’1. Penghapusan Depan’);
writeln(’2. Penghapusan Tengah’);
writeln(’3. Penghapusan Belakang’);
write(‘Pilih Menu Penghapusan : ‘);readln(menuhapus);
end;
procedure inputdata(var judul,jenis,penulis : string);
begin
writeln(‘Masukan Data Buku’);
writeln(‘—————–’);
write(‘Judul Buku :’);readln(judul);
write(‘Jenis Buku :’);readln(jenis);
write(‘Penulis Buku :’);readln(penulis);
end;
{procedure penyisipan}
procedure sisipdepandouble(judul,jenis,penulis : string; var awal,akhir:perpus_pointer);
var
baru :perpus_pointer;
begin
new(baru);
baru^.judulbuku := judul;
baru^.jenisbuku := jenis;
baru^.penulisbuku := penulis;
if(awal = nil)
then
begin
baru^.next := nil;
baru^.prev := nil;
akhir := baru
end
else
begin
baru^.next := awal;
baru^.prev := nil;
awal^.prev := baru;
end;
awal := baru;
end;
procedure sisipbelakangdouble(judul,jenis,penulis : string; var awal,akhir:perpus_pointer);
var
baru :perpus_pointer;
begin
new(baru);
baru^.judulbuku := judul;
baru^.jenisbuku := jenis;
baru^.penulisbuku := penulis;
baru^.next := nil;
if(awal = nil)
then
begin
awal := baru;
baru^.prev := nil;
akhir := baru
end
else
begin
akhir^.next := baru;
baru^.prev := akhir;
end;
akhir := baru;
end;
procedure sisiptengahdouble(judul,jenis,penulis : string; var awal,akhir:perpus_pointer);
var
datasisip : string;
baru,bantu : perpus_pointer;
ketemu : boolean;
begin
new(baru);
baru^.judulbuku := judul;
baru^.jenisbuku := jenis;
baru^.penulisbuku := penulis;
if(awal = nil)
then
begin
awal := baru;
baru^.prev := nil;
baru^.next := nil;
akhir := baru
end
else
begin
writeln(‘Data Dimasukan Setelah (Judul Buku) ; ‘);readln(datasisip);
bantu := awal;
ketemu := false;
while(not ketemu)and(bantu<>nil)do
begin
if(bantu^.judulbuku = datasisip)
then
ketemu := true
else
bantu := bantu^.next;
end;
if(bantu=akhir)
then
sisipbelakangdouble(judul,jenis,penulis,awal,akhir)
else
begin
baru^.prev := bantu^.prev;
baru^.next := bantu;
baru^.prev^.next := baru;
bantu^.prev := baru;
end;
end;
end;
{procedure penghapusan}
procedure hapusdepandouble(var judul,jenis,penulis : string; var awal,akhir:perpus_pointer);
var
phapus : perpus_pointer;
begin
phapus := awal;
if(awal=akhir)
then
begin
awal := nil;
akhir := nil;
end
else
begin
awal := awal^.next;
awal^.prev := nil;
end;
judul := phapus^.judulbuku;
jenis := phapus^.jenisbuku;
penulis := phapus^.penulisbuku;
dispose(phapus);
end;
procedure hapusbelakangdouble(var judul,jenis,penulis:string; var awal,akhir:perpus_pointer);
var
phapus : perpus_pointer;
begin
if(awal=akhir)
then
begin
phapus := awal;
awal := nil;
akhir := nil;
end
else
begin
phapus := akhir;
akhir := phapus^.prev;
akhir^.next := nil;
end;
judul := phapus^.judulbuku;
jenis := phapus^.jenisbuku;
penulis := phapus^.penulisbuku;
dispose(phapus);
end;
procedure hapustengahdouble(var judul,jenis,penulis:string; var awal,akhir:perpus_pointer);
var
phapus : perpus_pointer;
datahapus : string;
ketemu : boolean;
begin
write(‘Masukan Judul Buku pada Data yang akan Dihapus : ‘);readln(datahapus);
phapus := awal;
ketemu := false;
while(not ketemu)and(phapus <> nil)do
begin
if(phapus^.judulbuku = datahapus)
then
ketemu := true
else
phapus := phapus^.next;
end;
if(ketemu)
then
begin
if(phapus=awal)
then
hapusdepandouble(judul,jenis,penulis,awal,akhir)
else
begin
if(phapus=akhir)
then
hapusbelakangdouble(judul,jenis,penulis,awal,akhir)
else
begin
phapus^.next^.prev := phapus^.prev;
phapus^.prev^.next := phapus^.next;
judul := phapus^.judulbuku;
jenis := phapus^.jenisbuku;
penulis := phapus^.penulisbuku;
dispose(phapus);
end;
end;
end
else
write(‘Data Tidak Ditemukan’);
end;
{procedure tampil data}
procedure Tampildata(var awal : perpus_pointer);
var
bantu : perpus_pointer;
x :integer;
begin
bantu := awal;
x := 13;
gotoxy(2,10);writeln(‘Daftar Buku’);
gotoxy(2,11);writeln(‘————————————————-’);
gotoxy(2,12);writeln(‘Judul’);
gotoxy(20,12);writeln(‘Jenis’);
gotoxy(35,12);writeln(‘Penulis’);
while (bantu <> nil) do
begin
gotoxy(2,x);writeln(bantu^.judulbuku);
gotoxy(20,x);writeln(bantu^.jenisbuku);
gotoxy(35,x);writeln(bantu^.penulisbuku);
bantu := bantu^.next;
x := x+1;
end;
end;
{procedure cari data}
procedure cari_data(var awal:perpus_pointer);
var
bantu : perpus_pointer;
datacari : string;
x : integer;
ketemu : boolean;
begin
gotoxy(1,10);write(‘Masukan Data yang Dicari ; ‘);readln(datacari);
bantu := awal;
ketemu := false;
while (not ketemu)and(bantu <> nil)do
begin
if (bantu^.judulbuku = datacari)
then
ketemu := true
else
bantu := bantu^.next;
end;
x := 13;
gotoxy(2,11);writeln(‘————————————————-’);
gotoxy(2,12);writeln(‘Judul’);
gotoxy(20,12);writeln(‘Jenis’);
gotoxy(35,12);writeln(‘Penulis’);
if(ketemu)
then
begin
gotoxy(2,x);writeln(bantu^.judulbuku);
gotoxy(20,x);writeln(bantu^.jenisbuku);
gotoxy(35,x);writeln(bantu^.penulisbuku);
end
else
write(‘Data yang Anda cari Tidak Ditemukan’);
writeln;
writeln(‘Tekan Apa Saja Untuk Kembali ke Menu Utama’);
readkey;
clrscr;
end;
procedure penghancuran(var awal : perpus_pointer);
var
phapus : perpus_pointer;
begin
phapus := awal;
while (awal <> nil)do
begin
awal := awal^.next;
dispose(phapus);
phapus := awal;
end;
writeln(‘-Semua Data Dalam Daftar Buku Telah Dihapus-’);
writeln(‘Tekan Apa Saja Untuk ke Menu Utama’);
readkey;
clrscr;
end;
procedure urut_data(var awal: perpus_pointer);
var
min,p1,p2 : perpus_pointer;
temp : string;
begin
p1 := awal;
while(p1 <> akhir)do
begin
p2 := p1^.next;
min := p1;
while(p2 <> nil)do
begin
if(p2^.judulbuku < min^.judulbuku)
then
min := p2;
p2 := p2^.next;
end;
temp := min^.judulbuku;
min^.judulbuku := p1^.judulbuku;
p1^.judulbuku := temp;
temp := min^.jenisbuku;
min^.jenisbuku := p1^.jenisbuku;
p1^.jenisbuku := temp;
temp := min^.penulisbuku;
min^.penulisbuku := p1^.penulisbuku;
p1^.penulisbuku := temp;
p1 := p1^.next;
end;
end;
procedure program_perpustakaan();
begin
repeat
menuutama(menu);
case menu of
1 : begin
clrscr;
menupenyisipan(menusisip);
writeln;
if(menusisip=1)
then
begin
inputdata(judul,jenis,penulis);
sisipdepandouble(judul,jenis,penulis,awal,akhir);
clrscr;
end
else
begin
if(menusisip=2)
then
begin
inputdata(judul,jenis,penulis);
sisiptengahdouble(judul,jenis,penulis,awal,akhir);
clrscr;
end
else
begin
if(menusisip=3)
then
begin
inputdata(judul,jenis,penulis);
sisipbelakangdouble(judul,jenis,penulis,awal,akhir);
clrscr;
end
else
begin
clrscr;
write(‘Menu Yang Anda Masukan Salah’);
end;
end;
end;
end;
2 : begin
clrscr;
menupenghapusan(menuhapus);
if(menuhapus=1)
then
begin
hapusdepandouble(judul,jenis,penulis,awal,akhir);
clrscr;
end
else
begin
if(menuhapus=2)
then
begin
hapustengahdouble(judul,jenis,penulis,awal,akhir);
clrscr;
end
else
begin
if(menuhapus=3)
then
begin
hapusbelakangdouble(judul,jenis,penulis,awal,akhir);
clrscr;
end
else
write(‘Menu Yang Anda Masukan Salah’);
end;
end;
end;
3 : begin
clrscr;
cari_data(awal);
end;
4 : begin
clrscr;
urut_data(awal);
Tampildata(awal);
end;
0 : begin
clrscr;
penghancuran(awal);
end;
end;
until menu > 4;
end;
begin
awal := nil;
akhir := nil;
program_perpustakaan();
readkey;
end.
ini mah implementasi pointer bukan ??
pointer oge mneh ted
bagian dari materi kuliah