I. SINGLE LINKED LIST program singlelinkedlist; {judul program} uses wincrt; type simpul = ^data; {deklarasi simpul, Penulisan pointer simpul dengan bentuk record} data = record {record berisi field nama dan kait} nama : string[25]; {field nama bertipe string dengan maksimum 25 karakter} kait : simpul; {field kait bertipe simpul} end; var awal, akhir, bantu : simpul; {variabel awal, akhir, dan bantu bertipe simpul} ya : char; {variabel bantu untuk pemilihan case of} begin clrscr; awal := nil; {pembuatan nilai awal=nil,pd saat program pertama dijalankan} ya := y;{inisialisasi ya = karakter y} while ya in ['y','Y'] do {selama ya = y kecil atau y besar maka program akan meminta penginputan nama}
begin new(bantu); {mengalokasikan simpul didalam memori dengan statemen new} write(masukkan nama : ); readln(bantu^.nama); {menginputkan nama} write(tambah data lagi [Y/N]: ?); readln(ya); {pemilihan untuk menambahkan data} writeln; if awal = nil then begin bantu^.kait:= nil; {proses1:proses yang dilakukan saat penginputan data yang pertama} awal := bantu; akhir := bantu; end else begin akhir^.kait := bantu; {proses2:proses penambahan data selanjutnya} bantu^.kait := nil; akhir := bantu; end; end; {proses3:proses utk menampilkan data} bantu := awal;
writeln(bantu^.nama); while bantu^.kait <> nil do begin bantu := bantu^.kait; writeln(bantu^.nama); end; readln; end. PROGRAM TERSEBUT JIKA DIEKSEKUSI:
Program tersebut meminta penginputan data selama perintah tambah lagi di isi y/Y. kemudian data yang telah di inputkan akan di cetak kembali. Pengisian : fitri eska yuri doni stop cetak data yang diisikan II. DOUBLE LINKED LIST program doublelinkedlist; {judul program} uses wincrt; type simpul = ^data; {deklarasi simpul double linked list} data = record {record berisi field nama, depan, dan belakang} nama : string; {field nama bertipe string}
depan, belakang : simpul; {field depan, belakang bertipe simpul} end; var awal, akhir, bantu : simpul; {variabel awal, akhir, bantu bertipe simpul} pil : char; {variabel bantu untuk melakukan pemilihan manipulasi data} procedure buatlist (var bantu : simpul); {procedure untuk menambah data} begin if awal = nil then {proses penambahan data/simpul pertama} begin awal := bantu; awal^.depan := nil; awal^.belakang := nil; akhir := awal; end else begin akhir^.depan := bantu; {proses penambahan data/simpul utk kesekiankali} bantu^.depan := nil; bantu^.belakang := akhir; akhir := bantu; end;
end; procedure cetakawal; {procedure utk mencetak data deeri awal list} var bantu :simpul; begin writeln; writeln(********************); writeln(Cetak data dari awal); writeln(********************); bantu := awal; {perintah utk mencetak data dr awal} while bantu <> nil do begin writeln(Nama : , bantu^.nama); bantu := bantu^.depan; end; readln; end; procedure cetakakhir; {procedure untuk mencetak data dari akhir list} var bantu : simpul; begin writeln; writeln(********************); writeln(Cetak data dari akhir); writeln(********************);
bantu := akhir; while bantu <> nil do begin {perintah utk mencetak data dari akhir} writeln(Nama : , bantu^.nama); bantu := bantu^.belakang; end; readln; end; procedure hapuslist; {procedure utk menghapus data dari awal} var bantu : simpul; begin while awal <> nil do {perintah utk menghapus data dari awal list} begin bantu := awal; awal := awal^.depan; dispose(bantu); { mengalokasikan simpul yang sudah tidak terpakai, maka digunakan statemen dispose} end; writeln(Data telah di hapus!!); readln; end; {program utama}
begin awal := nil; repeat clrscr; writeln(Program double linked list); writeln(**************************); writeln(1. Tambah data); writeln(2. Cetak data dari awal); writeln(3. Cetak data dari akhir); writeln(4. Hapus seluruh data); writeln(5. Keluar); write(pilihan anda [1/2/3/4/5] : ); readln(pil); case pil of 1 : begin {perintah menambah data dan memanggil procedure buatlist} new(bantu); { mengalokasikan simpul didalam memori digunakan statemen new } writeln; writeln(Tambah data); write(Masukkan nama : ); readln(bantu^.nama); buatlist(bantu); {pemanggilan procedure buatlist} end;
2 : cetakawal; {pemanggilan procedure cetakawal} 3 : cetakakhir; {pemanggilan procedure cetakakhir} 4 : hapuslist; {pemanggilan procedure hapuslist} end; until (pil>=5); readln; end. PROGRAM TERSEBUT JIKA DI EKSEKUSI: TAMBAH DATA KE 1 Pilih menu 1 FITRI
CETAK DATA DARI AWAL Input 1 : FITRI Input 2 : ESKA Input 3 : DONI Maka hasil cetak dari awal: FITRI ESKA DONI
CETAK DATA DARI AKHIR Input 1 : FITRI Input 2 : ESKA Input 3 : DONI Maka hasil cetak dari awal: DONI ESKA FITRI
Maka data yang telah terisi yaitu FITRI, ESKA, DONI akan di hapus. III. PROGRAM SINGLE LINKEDLIST UNTUK TUGAS Program single_list; Uses WinCrt; Type Pointer = ^TypeData; {deklarasi type data pointer} TypeData = Record {record berisi field nama dan next} Nama : String; {field nama bertipe string} Next : Pointer; {field next bertipe pointer} End; Var {deklarasi variabel pada program utama} List : Pointer; {variabel list bertipe pointer}
nama,nama1 : string; {variabel nama dan nama1 bertipe string} Jwb,pil : Char; {variabel bantu jwb dan pil bertipe char} x: integer; {Procedure Untuk Menambahkan Data(nama)dari Depan} Procedure TambahDataDepan(Var L : Pointer; X : string); Var Baru : Pointer; Begin New(Baru); {mengalokasikan simpul didalam memori digunakan statemen new} Baru^.Nama := X; {Proses untuk menambahkan data selanjutnya dari depan} Baru^.Next := Nil; if L = Nil then L := Baru else Begin Baru^.Next :=L; L :=Baru; End; End; {Proceedure Untuk Menambahkan data(nama) dari Belakang} Procedure TambahDataBelakang(Var L : Pointer; X : string); Var Baru,Bantu : Pointer;
Begin New(Baru); {mengalokasikan simpul didalam memori digunakan statemen new} Baru^.Nama := X; Baru^.Next := Nil; Bantu := L; While Bantu^.Next <> Nil Do Bantu := Bantu^.Next; Bantu^.Next := Baru; End; {Procedure Untuk Menghapus Data dari Depan} Procedure HapusDepan(Var L : Pointer); Var Baru : Pointer; Begin Baru := L; if L = Nil then Writeln(List Kosong) {senarai masih kosong} else Begin L := L^.Next; {simpul pertama dihapus} dispose(Baru); { mengalokasikan simpul yang sudah tidak terpakai, maka digunakan statemen dispose } End; End;
{Procedure Untuk Menghapus Data dari Belakang} Procedure HapusBelakang(Var L : Pointer); Var Baru,bantu : Pointer; Begin Bantu := L; {mencari simpul yang akan dihapus} if Bantu = Nil then Writeln(List Kosong) else Begin While Bantu^.Next^.Next <> nil do {simpul yang akan dihapus ketemu} Bantu := Bantu^.next; {simpul terakkir dihapus} New(Baru); {mengalokasikan simpul didalam memori digunakan statemen new} Baru := Bantu^.Next; Bantu^.Next:=nil; dispose(Baru); { mengalokasikan simpul yang sudah tidak terpakai, maka digunakan statemen dispose } End; End; {Procedure Untuk Mencetak Data yang Telah Di inputkan} Procedure Cetak(L : Pointer); Var Bantu : Pointer; Begin
Bantu := L; {inisialisasi Bantu = list} While Bantu <> Nil Do Begin Write(Bantu^.nama); Bantu:=Bantu^.Next; End; End; {Program Utama} Begin New(List); {mengalokasikan simpul didalam memori digunakan statemen new} List:=nil; {Pembuatan nilai List=nil, pada saat program pertama dijalankan} Jwb := Y; Writeln(MEMASUKKAN DATA); Write(Masukkan Nama : ); Readln(nama); {proses yang dilakukan saat penginputan data yang pertama} TambahDataDepan(List,nama); writeln; clrscr; x:=0; {inisialisasi variabel n dengan nilai 0} repeat clrscr; writeln(**************************); writeln(*******MENU PILIHAN*******);
writeln(**************************); writeln; writeln(1. Tambah Data Dari Depan); writeln(2. Tambah Data Dari Belakang); writeln(3. Hapus Data Depan ); writeln(4. Hapus Data Belakang ); writeln(5. Cetak Data ); writeln(0. Selesai); writeln; write(Pilihan Anda : ); readln(pil); writeln; case pil of 1 : Begin jwb := Y; Writeln(TAMBAH DATA DARI DEPAN); While UpCase(jwb)=Y Do Begin Write(Masukkan Nama : ); Readln(nama); TambahDataDepan(List,nama); {memanggil procedure TambahDataDepan} Write(Ingin menambah data lagi? [Y/T] );Readln(jwb); End; Cetak(List); {memanggil procedure cetak} Writeln; readln;
End; 2 : Begin jwb := Y; Writeln(TAMBAH DATA DARI BELAKANG); While UpCase(jwb)=Y Do Begin Write(Masukkan Nama : ); Readln(nama); TambahDataBelakang(List,nama); {memanggil procedure TambahDataBelakang} Write(Ingin menambah data lagi? [Y/T] );Readln(jwb); End; Cetak(List); {memanggil procedure cetak} writeln; readln; End; 3 : Begin Writeln(HAPUS DEPAN ); HapusDepan(List); {memanggil procedure HapusDepan} Cetak(List); {memanggil procedure cetak} Writeln; readln; end; 4 : Begin Writeln(HAPUS BELAKANG); HapusBelakang(List);
{memanggil procedure HapusBelakang} Cetak(List); {memanggil procedure cetak} Writeln; readln; end; 5 : begin cetak(list); {memanggil procedure cetak} writeln; readln; end; 0: writeln(Program selesai, Silahkan kembali ke MENU!); else writeln; writeln(Pilih sesuai MENU yang tersedia!); readln; end; until pil=5; readln; end. PROGRAM TERSEBUT JIKA DI EKSEKUSI: Input data awal
TAMBAH DATA: