5 Feb 2015

Delete After simpul dalam pointer pascal


Delete After
Yaitu menghapus data di sebelah kanan dari simpul dari sebuah pointer double linklist

program dlete;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
   point = ^recKar ;
   reckar = record
              id_mhs : string ;
              nama : string ;
              prodi : string ;
              semester : integer ;
              next,prev : point;
            end;
var
  head,now,tail : point ;
  jawab : char ;
  no : byte ;

procedure insertAfter ;      // insert After
begin
  new(now) ;
  if head =nil then
     begin
       head := now ;
       tail := now ;
       head^.prev := nil ;
       tail^.prev := nil ;
     end
  else
    begin
      tail^.next := now ;
      now^.prev := tail ;
      tail := now ;
      tail^.next := nil ;
    end;
end;

procedure deleteAfter ;
begin
  now := tail ;
  if now <> head then
    begin
      tail := now^.prev;
      tail^.next := nil;
    end
  else
    begin
      tail := nil ;
      head := nil ;
    end;
  if now <> nil then dispose(now) ;
end;

begin
  writeln('DATA MAHASISWA');
  writeln('__________________________');
  writeln ;
  repeat
     insertAfter ;
      write('ID MAHASISWA :'); readln(now^.id_mhs);
      write('NAMA         :'); readln(now^.nama);
      write('PRODI        :'); readln(now^.prodi);
      write('SEMESTER     :'); readln(now^.semester);
      writeln ;
      write('Apakah ingin isi data lagi (Y/T)?  ');readln(jawab);
      writeln ;
  until upcase(jawab) ='T' ;
  writeln ;
  writeln('DATA MAHASISWA');
  writeln('__________________________');
  writeln ;
  now := head ;
  while now <> nil do
    begin
      writeln ('ID MAHASISWA   :',Now^.id_mhs) ;
      writeln ('NAMA           :',Now^.nama) ;
      writeln ('PRODI          :',Now^.prodi) ;
      writeln ('SEMESTER       :',Now^.semester) ;
      writeln ;
      inc(no) ;      
     now := now^.next ;  
    end;

  write('Apakah anda ingin menghapus Data (Y/T)? : ');Readln(jawab);
  if UpCase(jawab)='Y' then deleteAfter ;

  writeln ;
  writeln('DATA MAHASISWA');
  writeln('__________________________');
  writeln ;
  no := 1 ;
  now := head ; // bisa dikosongkan untuk LIFO
  while now <> nil do
    begin
      writeln (‘ID MAHASISWA :',Now^.id_mhs) ;
      writeln ('NAMA         :',Now^.nama) ;
      writeln ('PRODI        :',Now^.prodi) ;
      writeln ('SEMESTER     :',Now^.semester) ;
      writeln ;
      inc(no) ;   
      now := now^.next ;  
    end;

  readln ;
end.

No comments:

Post a Comment