Monday, January 4, 2010

Linked List Dengan Pascal

Saat pertama kali membaca judul itu mungkin ada anggapan kalau postingan ini akan berisi penjelasan mendetail tentang bahasa planet tersebut, seperti postingan-postingan lainnya. Oke, mungkin disini saya akan menjelaskan sedikit tentang Linked List, tapi tidak terlalu mendetail. Karena saya juga belum begitu mengerti. Sederhananya, Linked list adalah daftar record sejenis yang satu sama lain dihubungkan dengan ponter sehingga membentuk data yang berantai, seperti array, cuman Linked List lebih dinamis, pengertian lengkapnya bisa dilihat di Wikipedia.
Oke…yang jadi fokus di postingan ini sebenarnya saya hanya ingin share contoh Linked List dalam bahasa pascal. Kodenya seperti ini :


PROGRAM LinkedList1;
CONST
  Header    ='------------ Menu Utama ------------';
  Separator ='------------------------------------';
TYPE
  DataString  = STRING[30];
  ListPointer = ^ListRecord;
  ListRecord  = RECORD
                  DataField : DataString;
                  NextField : ListPointer
                END;
VAR
  FirstPointer : ListPointer;
PROCEDURE BuildList(VAR FirstPointer : ListPointer;
                        DataItem     : DataString);
VAR
  ToolPointer : ListPointer;
BEGIN
  NEW(ToolPointer);
  ToolPointer^.DataField := DataItem;
  ToolPointer^.NextField := FirstPointer;
  FirstPointer:=ToolPointer
END;
PROCEDURE ReadList(FirstPointer : ListPointer);
VAR  CurrentPointer : ListPointer;
BEGIN
  CurrentPointer := FirstPointer;
  WHILE CurrentPointer <> NIL DO
     BEGIN
       WRITELN(CurrentPointer^.DataField);
       CurrentPointer := CurrentPointer^.NextField
     END;
  WRITELN
END;
PROCEDURE GetData(VARFirstPointer:ListPointer);
VAR  Name:DataString;
BEGIN
  WRITELN('Masukkan nama yang akan ditambahkan lalu tekan ENTER jika selesai.');
  READLN(Name);
  WHILE LENGTH(Name) <> 0 DO
  BEGIN
     BuildList(FirstPointer,Name); READLN(Name)
  END
END;
PROCEDURE DisplayInfo(FirstPointer:ListPointer);
BEGIN
   WRITELN(Separator);
   WRITELN('Isi dari daftar:');
   ReadList(FirstPointer);
   WRITE('Tekan sembarang tombol untuk lanjut...');
   READLN
END;
procedure cetak(firstpointer:listPointer);
var jejek:text;
    CurrentPointer : ListPointer;
begin
assign(jejek,'gundulmu.txt');
rewrite(jejek);
writeln(jejek,'Tertulis dengan Indah sebagai berikut :');
writeln(jejek);
Writeln(jejek,separator);
Writeln(jejek,'ISi dari daftar');
writeln(jejek);
CurrentPointer := FirstPointer;
  WHILE CurrentPointer <> NIL DO
     BEGIN
       WRITELN(jejek,CurrentPointer^.DataField);
       CurrentPointer := CurrentPointer^.NextField
     END;
writeln;
writeln('Data telah di tulis ke gundulmu.txt, tinggal di lihat saja...');
readln;
close(jejek);
end;
PROCEDURE Menu;
VAR  Option : INTEGER;
BEGIN
  WRITELN(Header);
  WRITELN('1. Simpan data pada daftar.');
  WRITELN('2. Tampilan daftar.');
  Writeln('3. Tulis data ke teks ');
  WRITELN('4. Keluar.');
  WRITELN(Separator);
  WRITE('Pilihan --> ');
  READLN(Option);
  CASE Option OF
     1 : GetData(FirstPointer);
     2 : DisplayInfo(FirstPointer);
     3 : cetak(firstpointer);
     4 : exit;
  END;
  Menu
END;
BEGIN
  FirstPointer := NIL;
  menu
END.


Nah, Pusing? Saya juga….



Tapi jangan salah paham dulu, kode ini bukan saya yang buat. Saya hanya memodifikasi sedikit agar dia bisa menulis ke file teks. Mengenai alur program, masih saya pahami (dan sejak kemarin ngga paham-paham). Kode ini saya posting, siapa tahu ada yang membutuhkan listing program Linked List, entah untuk di pelajari, di utak-atik, memperbaiki nilai mata kuliah, atau hanya sekedar melampiaskan dendam masa lalu, saat masih menjadi mahasiswa dengan membanting kode ini.

Mungkin ada yang paham code ini? Silahkan dengan iklas di jelaskan, saya sedang butuh itu justru…..

Kalo yang ingin file *.pas, klik

Ok, sekian dulu semoga berguna………(AHP, 4 Januari 2010, 3:15)

No comments:

Post a Comment