Anda di halaman 1dari 5

(*List dengan Double Link atau Double Pointer*)

Program Double_linked_list;
Uses WinCRT;
Type
TipeData = Char; (* tipe data menurut pilihan kita *)
Pointer = ^Simpul;
Simpul = Record
Prev
: Pointer;
Elemen : TipeData;
Next
: Pointer
End;
List = Record
Awal : Pointer;
Akhir : Pointer;
Count : Byte;
End;
Procedure Kosongkan (Var L : List);
Begin
L.Awal := Nil; (*set L.Awal = Nil *)
L.Akhir := Nil; (*set L.Akhir = Nil *)
L.Count := 0
(*set L.Count = 0 *)
End;
Procedure Initial (x : TipeData; Var L : List);
Var Bantu : Pointer;
Begin
If (L.Count=0) Then
Begin
1. New (Bantu); (*ciptakan simpul baru ditunjuk oleh Bantu *)
2. Bantu^.Prev := Nil; (*set pointer mundur Bantu = Nil *)
3. Bantu^.Elemen := x; (*isikan elemen Bantu = x *)
4. Bantu^.Next := Nil; (*set pointer maju Bantu = Nil *)
5. L.Awal := Bantu;
(*set L.Awal = Bantu *)
6. L.Akhir := Bantu;
(*set L.Akhir = Bantu *)
7. L.Count :=1 (*SET L.Count =1 *)
End
Else
Writeln( List anda sudah berisi ! );
Readkey
End; (*ingat nomor baris di atas hanya untuk klarifikasi jangan diketikkan di da
lam Pascal *)
Procedure TambahDepan (x : TipeData; Var L : List);
Var Bantu : Pointer;
Begin
IF (L.Count=0) Then
Writeln( Error : List masih kosong ! )
Else
Begin
1. New (Bantu); (*ciptakan simpul baru ditunjuk oleh Bantu *)
2. Bantu^.Prev := Nil; (*set mundur Bantu = Nil *)
3. Bantu^.Elemen := x; (*isikan elemen Bantu = x *)
4. Bantu^.Next := L.Awal;
(*set maju Bantu = L.Awal *)
5. L.Awal^.Prev := Bantu;
(*set mundur L.Awal = Bantu *)
6. L.Awal := Bantu;
(*set L.Awal = Bantu *)
7. L.Count :=L.Count+1 (*naikkan L.Count*)
End;
Readkey
End;

Procedure TambahBelakang (x : TipeData; Var L : List);


Var Bantu : Pointer;
Begin
If (L.Count = 0) Then
Writeln( Error : List masih kosong )
Else
Begin
1. New (Bantu); (*ciptakan simpul baru ditunjuk oleh Bantu *)
2. Bantu^.Prev := L.Akhir;
(*set mundur Bantu = L.Akhir *)
3. Bantu^.Elemen := x; (*isikan elemen Bantu = x *)
4. Bantu^.Next := Nil; (*set maju Bantu = Nil *)
5. L.Akhir^.Next := Bantu;
(*set maju L.Akhir = Bantu *)
6. L.Akhir := Bantu;
(*set L.Akhir = Bantu *)
7. L.Count :=L.Count+1 (*naikkan L.Count *)
End;
Readkey;
End;
Procedure HapusDepan(Var L : List);
Var Bantu : Pointer;
Begin
If (Empty(L)) Then
Writeln( Error : List anda kosong )
Else
If L.Count = 1 Then
Kosongkan(L)
Else
Begin
0. Writeln ('Anda menghapus data : ', L.Awal^.Elemen);
1. Bantu :=L.Awal;
2. L.Awal := L.Awal^.Next;
3. L.Awal^.Prev := Nil;
4. Bantu^.Next := Nil;
5. Dec(L.Count);
6. Dispose(Bantu)
End;
Readkey;
End;
Procedure HapusBelakang(Var L: List);
Var Bantu : Pointer;
Begin
If (Empty(L)) Then
Writeln( Error : List anda kosong )
Else
If L.Count = 1 Then
Kosongkan(L)
Else Begin
0. Writeln ('Anda menghapus data : ', L.Akhir^.Elemen);
1. Bantu := L.Akhir;
2. L.Akhir := L.Akhir^.Prev;
3. L.Akhir^.Next := Nil;
4. Bantu^.Prev := Nil;
5. Dec(L.Count);
6. Dispose(Bantu)
End;
Readkey;
End;
Procedure CariMaju(x:tipedata; L:List);

var Temu:Boolean;
P : Pointer;
Begin
If (L.Count = 0) Then
Writeln ('Error: List Anda Kosong')
Else Begin
P:= L.Awal;
Temu := False;
While (P<>Nil) And (Not (Temu)) Do
If (P^.Elemen = x) Then
Temu := True
Else
P := P^.Next;
End;
IF Temu True Then
Writeln(x, ' ditemukan')
Else
Writeln(x, ' tidak ditemukan');
Readkey
End;
Procedure CariMundur(x:tipedata; L:List);
var Temu:Boolean;
P : Pointer;
Begin
If (L.Count = 0) Then
Writeln ('Error: List Anda Kosong')
Else Begin
P:= L.Akhir;
Temu := False;
While (P<>Nil) And (Not (Temu)) Do
If (P^.Elemen = x) Then
Temu := True
Else
P := P^.Prev;
End;
IF Temu True Then
Writeln(x, ' ditemukan')
Else
Writeln(x, ' tidak ditemukan');
Readkey
End;
Procedure TampilMaju(L : List);
Var P : Pointer;
Begin
P := L.Awal;
While P <> Nil Do
Begin
Write(P^.Elemen:4);
P:=P^.Next
End;
Readkey
End;
Procedure TampilMundur(L:List);
Var P: Pointer;
Begin
P := L.Akhir;
While P <> Nil Do

Begin
Write(P^.Elemen);
P:=P^.Prev
End;
Readkey
End;
(*Program Utama *)
Var L : List;
Pil : Byte;
X : TipeData;
Begin
Repeat
Clrscr;
Gotoxy (15,4); Write( ========================== );
Gotoxy (15,5); Write( Program Double Linked List );
Gotoxy (15,6); Write( ====================== );
Gotoxy (18,7); Write( Menu Pilihan );
Gotoxy (15,8); Write( 1. Mengosongkan List );
Gotoxy (15,9); Write( 2. Memulai Mengisi List );
Gotoxy (15,10); Write( 3. Menambah Data di Depan );
Gotoxy (15,11); Write( 4. Menambah Data di Akhir );
Gotoxy (15,12); Write( 5. Menghapus Data di Depan );
Gotoxy (15,13); Write( 6. Menghapus Data di Akhir );
Gotoxy (15,14); Write( 7. Mencari Maju ');
Gotoxy (15,15); Write( 8. Mencari Mundur ');
Gotoxy (15,16); Write( 9. Menampilkan Isi List Maju );
Gotoxy (15,17); Write( 10. Menampilkan Isi List Mundur );
Gotoxy (15,18); Write( 0. Selesai );
Gotoxy (15,19); Write( Masukkan Pilihan Anda :
);
Readln(Pil);
Case Pil Of
1: Begin
Clrscr;
Writeln ( Mengosongkan List );
Kosongkan(L);
Readkey
End;
2: Begin
Clrscr;
Writeln ( Memulai isi barisan );
Write( Masukkan data anda : ); Readln(X);
Initial (X, L);
End;
3: Begin
Clrscr;
Writeln ( Menambah di depan );
Write( Masukkan data anda : ); Readln(X);
TambahDepan (X, L);
End;
4: Begin
Clrscr;
Writeln ( Menambah di belakang );
Write( Masukkan data anda : ); Readln(X);
TambahBelakang (X, L);
End;
5: Begin
Clrscr;
Writeln ( Menghapus di depan );

HapusDepan (L);
End;
6: Begin
Clrscr;
Writeln ( Menghapus data di belakang );
HapusBelakang (L);
End;
7: Begin
Clrscr;
Writeln(' Mencari Data dimulai dari Depan')
Write('Masukkan data yang dicari : ');
Readln(x);
CariMaju(x,L);
End;
8: Begin
Clrscr;
Writeln(' Mencari Data dimulai dari Belakang')
Write('Masukkan data yang dicari : ');
Readln(x);
CariMundur(x,L);
End;
9: Begin
Clrscr;
Writeln ( Menampilkan isi list maju );
TampilMaju(L)
End;
10: Begin
Clrscr;
Writeln ( Menampilkan isi list mundur );
TampilMundur(L)
End;
End;
Until Pil = 0;
Writeln( Terimakasih ya! );
Readkey
End.

Tugas (Kumpulkan minggu depan)


Tunjukkan eksekusi pekerjaan berikut secara berturut-turut dengan cara menunjukk
an tahap-demi tahap proses sampai diperoleh hasil akhir:
1. Kosongkan (L) ==> Gambarkan 2. Initial (x, L) ==> x=huruf pertama nama anda; Gambarkan tahap demi tahap samp
ai diperoleh list hasil
3. TambahDepan (x, L) ==> x = huruf terakhir nama anda
4. TambahBelakang (x, L) ==> x = huruf kedua nama anda
5. TambahDepan (x, L) ==> x = huruf kedua terakhir nama anda
6. TambahBelakang (x, L) ==> x = digit terakhir NIM anda
7. HapusDepan (L) ==> Gambarkan tahap demi tahap sampai diperoleh list hasil
8. TampilMundur (L) ==> Tampilkan list anda
9. HapusBelakang (L) ==> Gambarkan tahap demi tahap sampai diperoleh list hasil
10. HapusDepan (L) ==> Gambarkan tahap demi tahap sampai diperoleh list hasil
11. TampilMaju (L) ==> Tampilkan list anda

Anda mungkin juga menyukai