{ Program Pointer Pertama } type ptr = ^mhs; mhs = record nim : string; nama : string; nilai: byte; next : ptr; m : ptr; new (m); write (' NIM : '); readln (m^.nim); write (' NAMA : '); readln (m^.nama); write (' NILAI m^.next := nil; writeln (m^.nim); writeln (m^.nama); writeln (m^.nilai); : '); readln (m^.nilai);. { Program Pointer Single Linklist } type simpul = ^data; data = record isi : string; next : simpul; elemen : string; awal,akhir,baru,posisi,hapus,bantu : simpul; procedure tambah_belakang (elemen : string); new(baru); baru^.isi := elemen; if awal = nil then awal := baru akhir^.next := baru; akhir := baru; akhir^.next := nil; procedure tambah_depan (elemen : string); new(baru); baru^.isi := elemen; if awal = nil then akhir := baru baru^.next := awal; awal := baru; akhir^.next := nil; procedure hapus_simpul (elemen : string); if awal = nil then writeln ('List Kosong') if awal^.isi = elemen then hapus := awal; awal := hapus^.next; dispose(hapus); 1
bantu := awal ; posisi := awal; while (elemen <> posisi^.isi) and (posisi^.next <> nil) do bantu := posisi; hapus := posisi; if (hapus^.next <> nil) and (posisi^.isi = elemen) then posisi := hapus^.next; bantu^.next := posisi; dispose(hapus); if hapus^.isi = elemen then akhir := bantu; akhir^.next := nil; dispose(hapus); writeln ('Simpul Yang Akan Dihapus Tidak Ada'); tambah_belakang ('A'); tambah_belakang ('F'); tambah_belakang ('B'); tambah_belakang ('C'); tambah_depan ('S'); tambah_depan ('K'); hapus_simpul ('C'); posisi := awal; repeat write (posisi^.isi); until posisi = nil;. { Program Pointer Double Linklist } type ptr = ^data; data = record isi : string; pre, next : ptr; baru,posisi,awal,akhir,bantu,hapus : ptr; procedure tambah_belakang (elemen : string); new (baru); baru^.isi := elemen; baru^.pre := nil; baru^.next := nil; if awal = nil then awal:=baru 2
akhir^.next := baru; baru^.pre := akhir; akhir := baru; akhir^.next := nil; procedure tambah_depan (elemen : string); new (baru); baru^.isi := elemen; baru^.pre := nil; baru^.next := nil; if awal = nil then awal:=baru awal^.pre := baru; baru^.next := awal; awal := baru; awal^.pre := nil; procedure tambah_tengah (elemen : string; n : byte); panjang, i : byte; new (baru); baru^.isi := elemen; baru^.pre := nil; baru^.next := nil; if awal <> nil then posisi := awal; panjang:= 0; repeat inc(panjang); until posisi = nil; if (n>1) and (n<=panjang) then posisi := awal; for i:= 1 to n-2 do bantu := posisi^.next; posisi^.next := baru; baru^.pre := posisi; baru^.next := bantu; bantu^.pre := baru; writeln ('Posisi Pointer Tidak Ada Di Tengah'); writeln ('Pointer Belum Ada'); procedure hapus_simpul (elemen : string); { Hapus Pointer Di Awal } if awal^.isi = elemen then hapus := awal; awal := awal^.next; awal^.pre:= nil; 3
dispose (hapus); { Hapus Pointer Di Tengah } posisi := awal; while (posisi^.isi <> elemen) and (posisi^.next <> nil) do if posisi^.next <> nil then bantu := posisi^.pre; hapus := posisi; bantu^.next := posisi; posisi^.pre := bantu; dispose(bantu); { Hapus Pointer Di Akhir } if posisi^.isi = elemen then hapus := posisi; akhir := posisi^.pre; akhir^.next:= nil; dispose(hapus); writeln ('Pointer Tidak Ditemukan'); procedure baca_depan; posisi := awal; repeat write (posisi^.isi); until posisi = nil; procedure baca_belakang; posisi := akhir; repeat write (posisi^.isi); posisi := posisi^.pre; until posisi = nil; tambah_belakang ('A'); tambah_belakang ('B'); tambah_belakang ('C'); tambah_belakang ('D'); tambah_depan ('Z'); tambah_depan ('X'); tambah_tengah ('P',3); hapus_simpul ('A'); baca_depan; writeln; baca_belakang;. 4
{ Hasil Eksekusi : XZPBCD DCBPZX } { Program Queue } const max = 100; type antri = array[1..max] of char; q : antri; depan,belakang : integer; procedure tambah (x : char); if belakang = max then writeln ('Antrian Penuh') belakang := belakang + 1; q[belakang] := x; { procedure untuk menghapus dari belakang } procedure hapus_geser_belakang; i : byte; if belakang < depan then writeln ('Antrian Kosong') for i:= belakang-3 downto 1 do q[i] := q[i-1]; belakang:= belakang+1; { procedure untuk menghapus dari depan } procedure hapus_geser_depan; i : byte; if belakang < depan then writeln ('Antrian Kosong') for i:= 1 to belakang-1 do q[i] := q[i+1]; belakang := belakang-1; procedure baca; i : byte; for i:= depan to belakang do write (q[i]); procedure info; writeln; 5
writeln ('Depan = ', depan); writeln ('Belakang = ', belakang); depan := 1; belakang:= 0; tambah ('A'); tambah ('B'); tambah ('C'); tambah ('D'); tambah ('E'); hapus_geser_belakang; hapus_geser_belakang; hapus_geser_belakang; hapus_geser_belakang; baca; info;. { Program Queue Tambah Putar } const max = 100; type antri = array[1..max] of char; q : antri; depan,belakang : integer; procedure tambah_putar (x : char); if (belakang = max) and (depan = 1) or ((belakang + 1) = depan) then writeln ('Antrian Penuh') if belakang = max then belakang := 1 belakang := belakang + 1; q[belakang] := x; if depan = 0 then depan := 1; procedure hapus_putar; if depan = belakang then depan := 0; belakang := 0; writeln ('Antrian Penuh'); if depan = max then depan := 1 depan := depan +1; 6
procedure baca; i : byte; for i:= depan to belakang do write (q[i]); procedure info; writeln; writeln ('Depan = ', depan); writeln ('Belakang = ', belakang); depan := 0; belakang:= 0; tambah_putar ('A'); tambah_putar ('B'); tambah_putar ('C'); tambah_putar ('D'); tambah_putar ('E'); hapus_putar; hapus_putar; hapus_putar; hapus_putar; tambah_putar ('H'); tambah_putar ('K'); baca; info;. { Hasil Eksekusi : EHK } { Program Stack / Tumpukan (FIFO) } const max = 10; type tumpukan = array [1..max] of char; t : tumpukan; atas : byte; procedure push (x : char); if atas = max then writeln ('Tumpukan Penuh') atas := atas + 1; t[atas] := x; procedure pop; if atas = 0 then writeln ('Tumpukan Kosong') atas := atas - 1; 7
procedure baca; i : byte; writeln ('Atas = ', atas); for i:= 1 to atas do gotoxy(2,atas+3-i); write (t[i]); push ('A'); push ('B'); push ('C'); push ('D'); push ('E'); push ('F'); pop; pop; baca;. { Program Searching1 ) Program Searching; type larik = array [1..1000] of integer; a : larik; posisi : larik; n,m,x : integer; ada : boolean; procedure cari_vektor ( a : larik); i, data : integer; write (' Data Yang Dicari : '); readln (data); ada := false; x := 0; for i:= 1 to n do if a[i] = data then inc (x); posisi [x] := i; ada := true; if not ada then inc (n); a [n] := data; procedure isi; i : integer; write (' Jumlah Data : '); readln (m); for i:= 1 to m do 8
write (' A[',i,'] : '); readln (a[i]); n := m; procedure info; i : integer; writeln (' Data Awal '); for i:= 1 to m do write (' ',a[i],' '); writeln; if ada then write (' Data Ditemukan Pada Posisi : '); for i:= 1 to x do write (posisi[i],' '); writeln (' Data Tidak Ditemukan '); writeln (' Data Akhir '); for i:= 1 to n do write (' ',a[i],' '); isi; cari_vektor (a); info;. { Program Searching2 ) Program Searching2; type larik = array [1..1000] of integer; a : larik; posisi : integer; n,m,x,j : integer; ada : boolean; procedure cari_vektor_urut_naik ( a : larik); i, data : integer; write (' Data Yang Dicari : '); readln (data); ada := false; i := 1; j := 0; repeat if a[i] = data then posisi := i; ada := true; if a[i] > data then j := i; i := n; 9
inc (i); until (i > n) or ada; if not ada then if j=0 then a[n+1] := data for i:= n downto j do a[i+1] := a[i]; a[j] := data; inc (n); procedure isi; i : integer; write (' Jumlah Data : '); readln (m); for i:= 1 to m do write (' A[',i,'] : '); readln (a[i]); n := m; procedure info; i : integer; if ada then write (' Data Ditemukan ') write (' Data Tidak Ditemukan '); for i:= 1 to n do write (a[i],' '); isi; cari_vektor_urut_naik (a); info;. { Program Searching3 ) Program Searching3; type larik = array [1..1000] of integer; a : larik; posisi,atas,bawah,tengah : integer; n,m : integer; ada : boolean; procedure cari_biner ( a : larik); i, data : integer; write (' Data Yang Dicari : '); readln (data); ada := false; 10
atas := n; bawah := 1; while atas >= bawah do tengah := (atas+bawah) div 2; if data < a[tengah] then atas := tengah - 1 if data > a[tengah] then bawah := tengah + 1 ada := true; posisi := tengah; bawah := atas +1; if ada then write (' Data Ditemukan Pada Posisi ', posisi) write (' Data Tidak Ditemukan '); procedure isi; i : integer; write (' Jumlah Data : '); readln (m); for i:= 1 to m do write (' A[',i,'] : '); readln (a[i]); n := m; isi; cari_biner (a);. { Program Pohon <tree> Non_Rekursif } Program Pohon_Non_Rekursif; type tree = ^simpul; simpul = record info : char; kiri,kanan : tree; bantu,p,q,b : tree; function baru (hrf:char):tree; b : tree; new(b); b^.info := hrf; b^.kanan := nil; b^.kiri := nil; baru := b; 11
procedure sisip_non_rekursif ( akar : tree; hrf : char); b := baru(hrf); if akar = nil then akar := b q := akar; p := akar; while (hrf<>p^.info) and (q<>nil) do p := q; if hrf < p^.info then q := p^.kiri q := p^.kanan; if hrf = p^.info then write ('Data Sudah Ada') if hrf < p^.info then p^.kiri := b p^.kanan := b; sisip_non_rekursif (bantu,'d'); sisip_non_rekursif (bantu,'b'); sisip_non_rekursif (bantu,'c'); sisip_non_rekursif (bantu,'e'); write (b^.info);. { Program Pohon <tree> Rekursif ) Program Pohon_Rekursif; type tree = ^simpul; simpul = record info : char; kiri,kanan : tree; pohon,bantu,p,q,b : tree; function baru (hrf:char):tree; b : tree; new(b); b^.info := hrf; b^.kanan := nil; b^.kiri := nil; baru := b; procedure sisip_rekursif ( pohon : tree; hrf : char); if pohon = nil then pohon := baru(hrf) if pohon^.info > hrf then sisip_rekursif (pohon^.kiri,hrf) if pohon^.info < hrf then sisip_rekursif (pohon^.kanan,hrf) 12
write ('karakter ',hrf,' sudah ada'); sisip_rekursif (bantu,'d'); sisip_rekursif (bantu,'b'); sisip_rekursif (bantu,'c'); sisip_rekursif (bantu,'a'); sisip_rekursif (bantu,'f'); sisip_rekursif (bantu,'e'); write (b^.info);. Eksekusi Searching 1 : Jumlah Data : 5 A[1] : 5 A[2] : 6 A[3] : 8 A[4] : 9 A[5] : 10 Data Yang Dicari : 1 Data Awal 5 6 8 9 10 Data Tidak Ditemukan Data Akhir 5 6 8 9 10 1 Eksekusi Searching 2 : Jumlah Data : 5 A[1] : 1 A[2] : 3 A[3] : 5 A[4] : 7 A[5] : 9 Data Yang Dicari : 8 Data Tidak Ditemukan 1 3 5 7 8 9 Eksekusi Searching 3 : Jumlah Data : 5 A[1] : 1 A[2] : 4 A[3] : 7 A[4] : 9 A[5] : 10 Data Yang Dicari : 11 Data Tidak Ditemukan 13