type
simpul=^data;
data=record
info:char;
berikut:simpul;
end;
var
elemen:char;
awal,akhir,baru:simpul;
{
Prosedur untuk menambah simpul.
Simpul baru diletakkan di akhir senarai berantai
}
akhir:=baru;
akhir^.berikut:=nil
end;
{
prosedur untuk menambah simpul.
simpul baru diletakkan di awal senarai berantai
}
procedure tambah_depan(var awal,akhir:simpul;elemen:char);
var
baru:simpul;
begin
new(baru);
baru^.info:=elemen;
if awal=nil then
akhir:= baru
else
baru^.berikut:=awal;
awal:=baru;
end;
{
program 5.3
prosedur untuk menambah simpul di tengah senarai berantai
}
procedure tambah_tengah (var awal,akhir:simpul; elemen:char);
var
baru,bantu:simpul;
begin
new(baru);
baru^.info:=elemen;
if awal = nil then {senarai masih kosong}
begin
awal:=baru;
akhir:=baru
end
else
begin
{mencari lokasi yang sesuai}
bantu:=awal;
while elemen>baru^.berikut^.info do
bantu:=bantu^.berikut;
hapus:=bantu^.berikut;
if hapus<>nil then
{simpul yang akan dihapus ketemu}
begin
if hapus <> akhir then
{simpul tengah dihapus}
bantu^.berikut:=hapus^.berikut
else
{simpul terakhir dihapus}
begin
akhir:=bantu;
akhir^.berikut:=nil
end;
dispose(hapus)
end
else
{simpul yang akan dihapus tidak ketemu}
writeln('Simpul yang akan dihapus tidak ada')
end
end;
{
prosedur untuk membaca senarai dari kiri ke kanan (maju)
}
procedure baca_maju (awal,akhir:simpul);
var
bantu:simpul;
begin
bantu:=awal;
repeat
write(bantu^.info:2);
bantu:=bantu^.berikut
until bantu=nil;
writeln
end;
{
Prosedur untuk membalik pointer
}
procedure balik_pointer(var awal, akhir: simpul);
var
bantu, bantu1: simpul;
begin
bantu:= awal;
awal:= akhir;
akhir^.berikut:=bantu1;
akhir:= bantu1;
until akhir = bantu;
akhir^.berikut:= nil;
end;
{
prosedur membaca senarai dari kanan ke kiri
menggunakan cara pembacaan secara rekursif
}
procedure mundur (bantu:simpul);
begin
if bantu <> nil then
begin
mundur(bantu^.berikut);
write(bantu^.info:2)
end;
end;
{
mencari data pada senarai tak terurutkan
jiwa fungsi bernilai 'true' berarti data ketemu
}
function ada_data (elemen:char; awal:simpul):boolean;
var
ketemu:boolean;
begin
ketemu:=false;
repeat
if awal^.info = elemen then
ketemu := true
else
awal := awal^.berikut;
until ketemu or (awal = nil);
ada_data := ketemu
end;
{
Fungsi untuk mencari data pada senarai terurutkan
Jika fungsi bernilai 'true' bearti data ketemu
}
function ada_data1 (awal:simpul; elemen:char):boolean;
var ketemu:boolean;
begin
ketemu:=false;
repeat
if awal^.info = elemen then
{data ditemukan}
ketemu := true
else
if awal^.info < elemen then
awal := awal^.berikut
else
{tidak ditemukan}
awal:=nil
until ketemu or (awal=nil);
ada_data1:=ketemu
end;
{
prosedur inisialisasi senarai berantai
untuk membentuk simpul kepala
}
procedure awalan(var awal:simpul);
begin
new(awal);
{karena belum punya simpul, ini adalah simpul terakhir}
awal^.berikut := nil;
end;
{main program}
begin
end.