Program single_linked_list; uses crt; type TipeData=integer; PData=^TData; TData=record info:tipedata; next:PData; end; procedure tambah_belakang(data:Tipedata;var awal,akhir:PData); var baru:PData; begin new(baru); baru^.info:=data; baru^.next:=nil; if awal=nil then begin awal:=baru; akhir:=baru; end else begin akhir^.next:=baru; akhir:=baru; end; end; procedure tambah_depan(data:Tipedata;var awal,akhir:PData); var baru:PData; begin new(baru); // alloc(baru); baru^.info:=data; baru^.next:=nil; if awal=nil then begin awal:=baru; akhir:=baru; end else begin baru^.next:=awal; awal:=baru; end; end; procedure tambah_tengah(data:Tipedata;var awal,akhir:PData); var baru:PData; psisip:PData; datasisip:tipeData; begin new(baru); baru^.info:=data; baru^.next:=nil; if awal=nil then begin awal:=baru; akhir:=baru; end else begin write('Data lokasi sisip : ');readln(datasisip); psisip:=awal; while (psisip^.info<>datasisip)and (psisip<>akhir) do psisip:=psisip^.next; if psisip^.info=datasisip then begin baru^.next:=psisip^.next; psisip^.next:=baru; if psisip=akhir then akhir:=baru; end else writeln('Posisi sisip tidak ditemukan'); end; end; procedure tampil(awal:PData); var p:PData; begin write('ISI LINKED LIST : '); if awal=nil then writeln('Data kosong') else begin p:=awal; while p<>nil do begin write(p^.info:4); p:=p^.next; end; writeln; end; end; procedure hapus_depan(var awal,akhir:PData); var phapus:PData; begin if awal=nil then writeln('Data kosong, penghapusan tidak dilakukan') else if awal=akhir then begin dispose(awal); awal:=nil; akhir:=nil; end else begin phapus:=awal; awal:=awal^.next;// awal:=phapus^.next; dispose(phapus); end; end; procedure hapus_belakang(var awal,akhir:PData); var bantu:PData; begin if awal=nil then writeln('Data kosong, penghapusan tidak dilakukan') else if awal=akhir then begin dispose(awal); awal:=nil; akhir:=nil; end else begin bantu:=awal; while(bantu^.next<>akhir) do bantu:=bantu^.next; dispose(akhir); akhir:=bantu; akhir^.next:=nil; end; end; procedure travelsal(awal:PData); var bantu:PData; total:integer; banyak:integer; begin if awal=nil then writeln('Data Kosong') else begin //write('Data linked list : '); total:=0; banyak:=0; bantu:=awal; while bantu<>nil do begin // write(bantu^.info:5); banyak:=banyak+1; total:=total+bantu^.info; bantu:=bantu^.next; end; writeln('Rata-rata : ',total/banyak:6:2); end; end; procedure pencarian(awal,akhir:PData); var i:PData; dicari:integer; posisi:integer; begin if awal=nil then writeln('Mau nyari apa, datanya kosong') else begin write('Dicari : ');readln(dicari); posisi:=1; i:=awal; while (i^.info<>dicari)and(i<>akhir) do begin i:=i^.next; posisi:=posisi+1; end; if i^.info=dicari then writeln('Ditemukan di posisi ke-',posisi) else writeln('Tidak ditemukan'); end; end; procedure pengurutan(awal,akhir:PData); var i,j:PData; temp:integer; begin if awal=nil then writeln('Ngapain diurutin?????, datanya kosong') else begin i:=awal; while i<>akhir do begin j:=i^.next; while j<>nil do begin if i^.info>j^.info then begin temp:=i^.info; i^.info:=j^.info; j^.info:=temp; end; j:=j^.next; end; i:=i^.next; end; end; end; procedure pengurutanseleksi(awal,akhir:PData); var i,j,min:PData; temp:integer; begin if awal=nil then writeln('Ngapain diurutin?????, datanya kosong') else begin i:=awal; while i<>akhir do begin min:=i; j:=i^.next; while j<>nil do begin if j^.infonil do begin hapus_belakang(awal,akhir); end; end; end; var awal,akhir:PData; i:integer; banyak:integer; databaru:integer; begin awal:=nil; akhir:=nil; banyak:=10; for i:=1 to banyak do begin databaru:=random(100); tambah_depan(databaru,awal,akhir); end; tampil(awal); writeln('Data setelah dihancurkan'); penghancuran(awal,akhir); tampil(awal); readln; end.