HAPUS SIMPUL POINTER DOUBLE

14 11 2008

uses crt;
type ptr =^data;
data = record
isi  : string;
pre,
next : ptr;
end;
var baru,posisi,awal,akhir,bantu,hapus : ptr;

procedure tambah_belakang (elemen : string);
begin
new (baru);
baru^.isi :=elemen;
baru^.pre :=nil;
baru^.next :=nil;
if awal = nil then awal :=baru
else
begin
akhir^.next :=baru;
baru^.pre := akhir;
end;
akhir := baru;
akhir^.next :=nil;
end;

procedure baca_depan;
begin
posisi :=awal;
repeat
write (posisi^.isi);
posisi := posisi^.next;
until posisi = nil;
end;

procedure baca_belakang;
begin
posisi :=akhir;
repeat
write (posisi^.isi);
posisi :=posisi^.pre;
until posisi = nil;
end;
procedure tambah_depan (elemen :string);
begin
new(baru);
baru^.isi :=elemen;
baru^.pre :=nil;
baru^.next := nil;
if awal = nil then awal := baru
else
begin
awal^.pre := baru;
baru^.next :=awal;
end;
awal := baru;
awal^.pre :=nil;
end;

procedure tambah_tengah(elemen:string;n:byte);
var panjang, i:byte;
begin
new (baru);
baru^.isi:=elemen;
baru^.pre:=nil;
baru^.next:=nil;
if awal <> nil then
begin
posisi:=awal;
panjang:=0;
repeat
posisi :=posisi^.next;
inc(panjang);
until posisi=nil;
if (n>1) and (n<=panjang) then
begin
posisi :=awal;
for i :=1 to n-2 do
posisi :=posisi^.next;
bantu :=posisi^.next;
posisi^.next :=baru;
baru^.pre :=posisi;
baru^.next :=bantu;
bantu^.pre :=baru;
end
else writeln (‘Posisi tidak di tengah’);
end
else
writeln (‘Pointer belum ada’);
end;

procedure hapus_simpul (elemen : string);
begin
if awal^.isi = elemen then
begin
hapus :=awal;
awal:=awal^.next;
awal^.pre:=nil;
dispose (hapus);
end
else
begin
posisi :=awal;
while (posisi^.isi <> elemen) and
(posisi^.next <> nil) do
posisi := posisi^.next;
if posisi^.next <> nil then
begin
bantu :=posisi^.pre;
hapus :=posisi;
posisi :=posisi^.next;
bantu^.next :=posisi;
posisi^.pre :=bantu;
dispose (hapus);
end
else if posisi^.isi = elemen then
begin
hapus :=posisi;
akhir := posisi^.pre;
akhir^.next :=nil;
dispose (hapus);
end
else writeln (‘Pointer tidak ditemukan’);
end;
end;

begin
clrscr;
tambah_belakang (‘a’);
tambah_belakang (‘b’);
tambah_belakang (‘c’);
tambah_belakang (‘d’);
tambah_depan (‘z’);
tambah_depan (‘x’);
tambah_tengah (‘p’,3);
hapus_simpul (‘b’);
write (‘jika dari depan dan dihapus :’);
baca_depan;
writeln;
write (‘jika dari belakang dan dihapus :’);
baca_belakang;
readln;
end.


Actions

Information

Leave a comment