STRUKTUR DATA
1
2. VARIABEL DAN TIPE DATA
2.1 Variabel
Variabel adalah suatu lokasi di memory yang disiapkan oleh programmer dan
diberi nama yang khas untuk menampung suatu nilai dan atau mengambil kembali nilai
tersebut.
Bentuk umum :
Var Identifier : Tipe Data;
Contoh : Var Nama : String[25];
Deklarasi variabel dengan tipe data sama :
Var Id1, Id2, Id3, Idn : Tipe Data;
Contoh : Var GajiBersih, Pajak, Tunjangan : Real;
Deklarasi variabel dengan tipe data berbeda :
Var Id1 : Tipe data1;
Id2 : Tipe data2;
Id3 : Tipe data3;
Contoh : Var Nama : String[25]
Umur : Integer;
Status : Char;
2
Longint 4 byte -2144483648..214748
d) Character (Char)
Jenis data yang merupakan karakter tunggal/jenis karakter yang terdapat dalam
kode ASCII (American Standard Code of Information Interchange).
e) String (Susunan dari beberapa char)
Merupakan tipe data yang berupa kumpulan karakter dengan panjang tertentu.
Jika string tidak didefinisikan maka akan memakai memory sebesar 255 byte.
Contoh program menggunakan tipe data sederhana :
Programnya :
program datakaryawan;
uses crt;
var
nama:string[20];
3
gaji:real;
utang:real;
gaber:real;
gol:integer;
begin
clrscr;
write('Masukkan nama karyawan:');readln(nama);
write('Masukkan gaji:');readln(gaji);
write('Masukkan utang:');readln(utang);
write('Masukkan golongan:');readln(gol);
gaber:=gaji-utang;
writeln;writeln;
Writeln('Nama karyawan=',nama);
Writeln('Gaji karyawan=',gaji:4:2);
Writeln('Utang karyawan=',utang:4:2);
Writeln('Golongan karyawan=',gol);
writeln('Gaji bersih=',gaber:4:2);
readln;
end.
Output :
4
Type Nama_Tipe = Record
Field1 : tipe data;
Field2 : tipe data;
Fieldn : tipe data;
End;
Programnya :
program cobarecord;
uses crt;
type
hasil=record
nama :string[20];
npm:string[10];
iuran:integer;
end;
var
mhs:hasil;
begin
clrscr;
with mhs do
begin
write('Masukkan nama=');readln(nama);
write('Masukkan NPM=');readln(npm);
write('Masukkan iuran=');readln(iuran);
writeln('Nama=',nama);
writeln('NPM=',npm);
writeln('Iuran=',iuran);
readln;
end;
end.
Output :
b) Set (Himpunan)
Kumpulan elemen atau objek yang mempunyai tipe data yang sama tanpa
memperhatikan urutan penulisan.
5
Bentuk Umum :
Type Nama_Tipe = (Himpunan);
Pengenal : Set Of Nama_Tipe
Var Nama_Variabel : Fengenal;
Contoh : Type NamaHari = (Minggu, Senin, Selasa, Rabu, Kamis, Jumat,
Sabtu)
Hari : Set Of NamaHari;
Var HariKerja : Hari;
c) Array (Larik)
Kumpulan elemen yang bertipe data sama dalam satu variabel.
Bentuk Umum :
Type Nama_Tipe = Array[range] Of Tipe Data;
Var Nama_Variabel : Nama_Tipe;
Programnya :
program contoharray;
uses crt;
var
i:array[1..5]of integer;
begin
clrscr;
write('Masukkan nilai1:');readln(i[1]);
write('Masukkan nilai2:');readln(i[2]);
write('Masukkan nilai3:');readln(i[3]);
write('Masukkan nilai4:');readln(i[4]);
i[5]:=i[1]+i[2];
writeln(i[1]);
writeln(i[2]);
writeln(i[3]);
writeln(i[4]);
writeln('Hasil jumlah=',i[5]);
readln;
end.
6
Output :
d) File (Berkas)
Merupakan sekumpulan byte yang disimpan dalam media penyimpanan.
Bentuk Umum :
Type NamaTipe = Record
Pengenal : File Of NamaTipe
Var NamaVariabel : Pengenal;
Contoh :
Type Data = Record
DataMahasiswa : File Of Data
Var Nama_Variabel : DataMahasiswa;
Programnya :
program cobatulisreco;
uses crt;
type
tsiswa=record
npm:string[10];
nama:string[30];
jurusan:string[10];
end;
tfilesiswa=file of tsiswa;
var
filesiswa:tfilesiswa;
siswa:array[0..9]of tsiswa;
jumlah:integer;
procedure inputsiswa;
var i:integer;
begin
clrscr;
write('Masukkan jumlah data[max 10]:');
readln(jumlah);
for i:=0 to jumlah-1 do begin
7
write('Masukkan NIP siswa :');readln(siswa[i].npm);
write('Masukkan Nama siswa :');readln(siswa[i].nama);
write('Masukkan Jurusan siswa :');readln(siswa[i].jurusan);
writeln;writeln;
end;
assign(filesiswa,'d:\fileis.dat');
rewrite(filesiswa);
for i:=0 to jumlah do
write(filesiswa,siswa[i]);
close(filesiswa);
end;
procedure bacaberkas;
var panjangfile:integer;
i:integer;j:integer;
begin
clrscr;
assign(filesiswa,'d:\fileis.dat');
{$i-}
reset(filesiswa);
{$i+}
if IOresult=0 then begin
while not eof(filesiswa) do begin
read(filesiswa,siswa[i]);
inc(i);
end;
close(filesiswa);
for j:=0 to i-1 do begin
writeln(siswa[j].npm);
writeln(siswa[j].nama);
writeln(siswa[j].jurusan);
writeln;writeln;
end;
end
else
writeln('File bermasalah');
end;
begin
clrscr;
inputsiswa;
bacaberkas;
readln;
end.
8
Output :
9
3. ARRAY
Array merupakan suatu tipe data terstruktur yang terdapat dalam memory yang
terdiri dari sejumlah elemen (tempat) yang mempunyai tipe data sama dan merupakan
gabungan dari beberapa variabel sejenis serta memiliki jumlah komponen yang jumlah
tetap.
Elemen-elemen dari array tersusun secara sequintal dalam memori computer.
Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun banyak dimensi.
0 1 2 3 4 5 6 7 8 9
Bentuk Umum :
Type NamaArray = Array[IndeksArray] Of Tipe Data;
Contoh :
10
i:array[1..3]of string;
begin
clrscr;
write('Masukkan nama 1:');readln(i[1]);
write('Masukkan nama 2:');readln(i[2]);
write('Masukkan nama 3:');readln(i[3]);
writeln;
writeln(i[1]);
writeln(i[2]);
writeln(i[3]);
readln;
end.
Output :
Bentuk Umum :
Type NamaArray = Array [indeks baris, indeks kolom’ of TipeData;
Contoh :
Type Matriks = Array [1..3, 1..5] of Byte;
Var : Larik : Matriks;
11
Programnya :
program contoharray2dimensi;
uses crt;
var
tabel:array[1..3,1..2]of byte;
i,j:integer;
begin
clrscr;
tabel[1,1]:=5;
tabel[1,2]:=8;
tabel[2,1]:=9;
tabel[2,2]:=7;
tabel[3,1]:=1;
tabel[3,2]:=3;
for i:=1 to 3 do
begin
for j:=1 to 2 do
write(tabel[i,j]:10);
writeln;
end;
readln;
end.
Output :
12
Ket : @B [i,j] : Alamat yang dicari;
@B [a,b] : Alamat awal;
i : Indeks baris yang dicari; n : Jumlah elemen per baris;
j : Indeks kolom yang dicari; k : Jumlah elemen per kolom;
a : Indeks awal baris; L : Panjang memori;
b : Indeks awal kolom;
Contoh :
Sebuah array dua dimensi dengan ordo 3 x 5 menggunakan tipe data double,
dimana alamat awal berada di @A[2,3]/1588H.
a) Buat Array A sebagai tipe data baru!
b) Berapa jumlah elemen dan panjang memori untuk Array A?
c) Buat susunan elemen Array tersebut!
d) Tentukan alamat @A[4,6] dengan RMO dan CMO!
Pembahasan :
a) Type David = Array [2..4, 3..7] of Double;
Var Larik : David;
b) Jumlah elemen = (u – i + 1) * (u – j + 1)
=3*5
Panjang Memori = 15 * 8
= 120
c)
A[2,3] A[2,4] A[2,5] A[2,6] A[2,7]
A[3,3] A[3,4] A[3,5] A[3,6] A[3,7]
A[4,3] A[4,4] A[4,5] A[4,6] A[4,7]
d) RMO
@B[i,j] = @B[a,b] + {((i-a) n + (j-b)) L}
= 1588H + {((4-2) 5 + (6-3)) 8}
= 1588H + 104D
= 1588H + 68H
= 15F0H + 104D
13
CMO
@B[i,j] = @B[a,b] + {((j-b) k + (i-a)) L}
= 1588H + {((6-3) 3 + (4-2)) 8}
= 1588H + 88D
= 1588H + 58H
= 15E0H
14
A[2,1,1,3] A[2,1,1,4]
A[2,1,2,3] A[2,1,2,4]
A[2,2,1,3] A[2,2,1,4]
A[2,2,2,3] A[2,2,2,4]
A[3,0,1,3] A[3,0,1,4]
A[3,0,2,3] A[3,0,2,4]
A[3,1,1,3] A[3,1,1,4]
A[3,1,2,3] A[3,1,2,4]
A[3,2,1,3] A[3,2,1,4]
A[3,2,2,3] A[3,2,2,4]
15
4. STACK (TUMPUKAN)
16
Begin
If not Full then
Begin
Top := Top+1; {atau : Inc(Top);}
Stack[Top] := elemen;
End;
End;
- Empty : Function untuk menentukan apakah stack kosong atau tidak.
Function Empty : Boolean;
Begin
Empty := False;
If Top = 0 Then Empty := True;
End;
- Pop : Mengambil elemen teratas dari stack. Stack tidak boleh kosong.
Procedure Pop (elemen : TipeData);
Begin
If Not Empty then
Begin
Elemen := Stack[top];
Top := Top-1; {atau : Dec(top);}
End;
End;
- Clear : Mengosongkan stack (ket : jika Top = 0, stack dianggap kosong).
Procedure Clear;
Begin
Top := 0;
End;
17
Berikut diberikan contoh deklarasi konstanta, tipe, dan variabel yang akan
dipakai dalam penjelasan operasi-operasi double stack dengan array.
Const Max = 8
Type TipeData = Integer;
Stack = Array[1..max] of Byte;
Var Top : Array [1...2] of Byte;
Operasi-operasi pada Double Stack dengan Array :
- Create : Membuat sebuah stack baru yang masih kosong.
Procedure Create;
Begin
Top[1] : = 0; {stack1 dianggap kosong jika top[1] = 0}
Top[2] : = Max + 1; {stack dianggap kosong jika top[2] = Max +1}
End;
- Full : Function untuk memeriksa apakah stack yang ada sudah penuh.
Function Full : Boolean;
Begin
Full := False;
If Top[1]+1 >= Top[2] then Full := True;
End;
- Push : Memasukkan sebuah elemen ke salah satu stack.
Procedure Push (elemen : TipeData; NoStack : Byte);
Begin
If not Full then
Begin
Case NoStack Of
1 : Top[1] := Top[1] +1;
2 : Top[2] := Top[2] -1;
End;
Stack[Top[NoStack]] := elemen;
End;
18
- Empty : Function untuk menentukan apakah stack1 atau stack2 kosong atau
tidak.
Function Empty (NoStack : Byte): Boolean;
Begin
Empty := False;
Case NoStak Of
1 := If Top[1] = 0 then
Empty := True;
2 := If Top[2] = Max + 1 then
Empty := True;
End;
- Pop : Mengambil elemen teratas dari salah satu stack.
Procedure Pop (Var elemen : TipeData; NoStack : Byte);
Begin
If Not Empty (NoStack) then
Begin
Elemen := Stack[top[NoStack]];
1 := Top[1] := Top[1] – 1;
2 := Top[2] := Top[2] + 1;
End;
End;
End;
- Clear : Mengosongkan salah satu stack
Procedure Clear (NoStack : Byte);
Begin
Case NoStack Of
1 := Top[1] := 0;
2 := Top[2] := Max + 1;
End;
End;
19
4.3 Stack dengan Single Linked List
Keunggulan single linked list dibanding array adalah penggunaan alokasi
memori yang dinamis sehingga menghindari pemborosan memori.
Type TipeData = Byte;
Point = ^Simpul;
Isi : TipeData;
Next : Point;
End;
Var Top : Point;
Ket : Untuk stack digunakan konsep single linked list, LIFO
Operasi-operasi pada Stack dengan Single Linked List :
- Create : Membuat sebuah stack baru yang masih kosong.
Procedure Create;
Begin
Top : = Nil
End;
- Push : Memasukkan sebuah elemen baru ke dalam stack.
Procedure Push (elemen : TipeData);
Var Now : Point;
Begin
New (Now);
Now^.Isi := elemen;
If Empty then
Now^.Next := Nil;
Else
Now^.Next := Top;
Top := Now;
End;
- Empty : Function untuk menentukan apakah stack yang ada masih kosong atau
tidak.
20
Function Empty : Boolean;
Begin
Empty := False;
If Top = Nil Then Empty := True;
End;
- Pop : Mengambil elemen teratas dari stack.
Procedure Pop (Var elemen : TipeData);
Var Now : Point;
Begin
If Not Empty then
Begin
Elemen := Now^.Isi;
Now := Top;
Top := Top^.Next;
Dispose (Now);
End;
End;
- Clear : Menghapus stack yang ada.
Procedure Clear;
Var Trash : TipeData;
Begin
White not empty do Pop(Trash);
End;
Programnya :
program stack;
uses crt;
type ptr = ^simpul;
simpul = record
nama : string;
tinggi : real;
next : ptr;
end;
var
list,baru: ptr;
i,n,pil : integer;
nama : string;
21
tinggi: real;
procedure tambahdata_dpn(var listnya : ptr; namanya : string; tingginya
: real);
var baru : ptr;
begin
new(baru);
baru^.nama:=namanya;
baru^.tinggi:=tingginya;
if listnya=nil then
listnya:=baru
else
baru^.next:=listnya;
listnya:=baru;
end;
procedure tampildata_dpn(var listnya : ptr);
var bantu : ptr;
begin
bantu:=listnya;
writeln('NAMA - TINGGI');writeln;
while bantu<> nil do
begin
writeln(bantu^.nama,' - ',bantu^.tinggi:0:2);
bantu:=bantu^.next;
end;
end;
procedure hapusdata_dpn(var listnya : ptr);
var bantu : ptr;
begin
if listnya=nil then
writeln('List kosong')
else
if listnya^.next=nil then
begin
bantu:=listnya;
listnya:=nil;
dispose(bantu);
end
else
begin
bantu:=listnya;
listnya:=listnya^.next;
dispose(bantu);
end;
end;
begin
list:=nil;
repeat
clrscr;
writeln(' M E N U : ');
22
writeln;
writeln('(1). Tambah Data');
writeln('(2). Ambil Data');
writeln('(3). Lihat Data');
writeln('(0). Keluar');
write('PILIHAN = ');readln(pil);writeln;
case pil of
1 : begin
write('Banyak Data yang ditambah [PUSH] = ');readln(n);
for i:=1 to n do
begin
writeln('-------------');
write('NAMA = '); readln(nama);
write('TINGGI = '); readln(tinggi);
tambahdata_dpn(list,nama,tinggi);
end;
end;
2 : begin
hapusdata_dpn(list);
writeln('Data Telah Diambil [POP]');
readln;
end;
3 : begin
tampildata_dpn(list);
readln;
end;
end;
until (pil=0);
readln;
end.
Output :
23
24
5. QUEUE (ANTRIAN)
Queue merupakan salah satu contoh aplikasi dari pembuatan double linked list
yang cukup sering kita temui dalam kehidupan sehari-hari, misalnya pada saat kita
mengantri di loket untuk membeli tiket.
Istila yang cukup sering dipakai apabila seseorang masuk ke dalam sebuah
antrian adalah ENQUEUE, sedangkan apabila seseorang keluar dari antrian adalah
DEQUEUE.
Untuk dapat membuat aplikasi antrian dapat menggunakan 2 metode :
1. Array
- Linear Array
- Circular Array
2. Linked List
Implementasi Queue dengan Array
a) Linear Array
Merupakan satu array yang dibuat seakan-akan merupakan suatu garis lurus
dengan satu pintu masuk dan satu pintu keluar. Berikut penggalan konstanta, type, dan
variabel yang akan dipakai untuk menjelaskan operasi-operasi dalam queue linear array.
Const MaxQueue = 6;
Type TypeQueue = Byte;
Var Queue : Array [1..MaxQueue] of TypeQueue;
Head, Tail : Byte;
Operasi-operasi pada Queue dengan Linear Array:
- Create : Menciptakan Queue yang baru dan kosong dengan cara memberikan nilai
awal (head) dan nilai akhir (tail) dengan nol (0).
Procedure Create;
Begin
Head : = 0; Tail := 0;
End;
25
- Empty : Mengecek apakah Queue masih kosong atau sudah berisi data.
Function Empty : Boolean;
Begin
If Top = 0 Then
Empty := True;
Else
Empty := False;
End;
- Full: Mengecek apakah Queue sudah penuh atau masih bisa menampung data.
Function Full : Boolean;
Begin
If Tail = MaxQueue then
Full := True
Else
Full := False;
End;
- EnQueue : Memasukkan satu elemen ke dalam queque.
Procedure Enqueue (elemen : Byte);
Begin
If Empty then
Begin
Head := 1;
Tail := 1;
Queue [Head] := elemen;
End;
Else
If Not Full then
Begin
Inc(Tail);
Queue[Tail] := Elemen;
End;
End;
26
- DeQueue : Mengambil satu elemen dari queque, operasi ini sering disebut SERVE.
Procedure Dequeue;
Var 1 := Byte;
Begin
If Not Empty then
Begin
For I := Head to Tail-1 do;
Queue [i] := Queue[i+1];
Dec(Tail);
End;
End;
b) Circular Array
Merupakan suatu array yang dibuat seakan-akan merupakan sebuah lingkaran
dengan titik awal (head) dan titik akhir (tail) saling bersebelahan jika array tersebut
masih kosong.
Operasi-operasi pada Queue dengan Circular Array :
- Create : Menciptakan Queue yang baru dan kosong.
Procedure Create;
Begin
Head : = 1;
Tail := MaxQueue;
End;
27
- Empty : Mengecek apakah Queue masih kosong atau sudah berisi data.
Function Empty : Boolean;
Begin
If (Tail Mod MaxQueue) + 1 = Head then
Empty := True;
Else
Empty := False;
End;
- Full: Mengecek apakah Queue sudah penuh atau masih bisa menampung data.
Function Full : Boolean;
Var X : 1..Maxqueue;
Begin
X := (Tail Mod MaxQueue) + 1;
If (X Mod MaxQueue) + 1 = Head then
Full := True
Else
Full := False;
End;
- EnQueue : Memasukkan satu elemen ke dalam queque. (Tail dan Head mula-mula
adalah nol).
Procedure EnQueue (elemen : TypeElement);
Begin
If Not Full then
Begin
Tail := (Tail Mod MaxQueue) + 1;
Queue[Tail] := Elemen;
Queue [Head] := elemen;
End;
End;
- DeQueue : Mengambil satu elemen dari Queque.
Procedure Dequeue;
28
Begin
If Not Empty then
Head := (Head Mod MaxQueue) + 1;
End;
- Empty : Mengecek apakah Queue masih kosong atau sudah berisi data.
Function Empty : Boolean;
29
Begin
If Q.Head = Nil then
Empty := True;
Else
Empty := False;
End;
- Full: Mengecek apakah Queue sudah penuh atau masih bisa menampung data.
Function Full : Boolean;
Begin
If N = MaxQueue then
Full := True
Else
Full := False;
End;
- EnQueue : Memasukkan satu elemen ke dalam queque. (Tail dan Head mula-mula
adalah Nil).
Procedure EnQueue (elemen : TypeData);
Var Now : Point;
Begin
If Not Full then
Begin
New (Now);
Now^.Isi := Elemen;
Now^.Next := Nil;
If Empty then
Begin
Q.Head := Now;
Q.Tail := Now;
N := 1;
End Else
Begin
Q.Tail^.Next := Now;
30
Q.Tail := Now;
Inc (N);
End;
End;
End;
- DeQueue : Mengambil satu elemen dari Queque.
Procedure Dequeue;
Var Now : point;
Begin
If Not Empty then
Begin
Now := QHead;
Q.Head := Q.Head^..Next;
Dispose (Now);
Dec(N);
End;
End;
Programnya :
Program antrian;
uses crt;
Type
list=^node;
node=record
isi:char;
next:List;
end;
Queue=record
depan,belakang:List;
end;
{--------------------------------------------------------------------}
Procedure initQueue(var q:queue);
begin
q.depan:=nil; q.belakang:=nil;
end;
{--------------------------------------------------------------------}
Procedure EnQueue(data:char; var Q:queue);
var b:list;
begin
new(b); b^.isi:=data; b^.next:=nil;
31
if q.belakang=nil then begin
q.belakang:=b;q.depan:=b;
end else begin
q.belakang^.next:=b; q.belakang:=b;
end;
end;
{--------------------------------------------------------------------}
Procedure Dequeue(var q:queue; var hasil:char);
var b:list;
begin
if q.depan <> nil then begin
hasil:=q.depan^.isi; b:=q.depan;
q.depan:=b^.next; dispose(b);
if q.depan=nil then q.belakang:=nil;
end;
end;
{--------------------------------------------------------------------}
var x:char;
q:queue;
begin
clrscr;
initqueue(q);
writeln('Memasukkan data ke dalam queue');
repeat
write('Nilai data : ');x:=upcase(readkey);writeln(x);
if x<>#13 then EnQueue(x,Q);
until x=#13;
writeln;
readln;
writeln('Pengambilan data dari queue yang pertama kali');
while q.depan<>nil do
begin
deQueue(Q,x);writeln(x);
end;
readln;
writeln('Pengambilan data dari queue yang kedua kali');
while q.depan<>nil do
begin
deQueue(Q,x);writeln(x);
end;
end.
32
Output :
33
6. POINTER
Tipe data pointer bersifat dinamis, variabel akan dialokasikan hanya pada saat
dibutuhkan dan sesudah tidak dibutuhkan dapat didealokasikan kembali.
Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian
variabel biasa, hanya perlu ditambahkan symbol (^) sebelum tipe data. Simbol tersebut
menunjuk ke lokasi tertentu pada memori.
34
with datakaryawan1^ do
begin
write('Kode karyawan?');readln(kode);
write('Nama karyawan?');readln(nama);
write('Gaji karyawan?');readln(gaji);
end;
writeln;
writeln('Karyawan ke 2:');
new(datakaryawan2);
with datakaryawan2^ do
begin
write('Kode karyawan?');readln(kode);
write('Nama karyawan?');readln(nama);
write('Gaji karyawan?');readln(gaji);
end;
writeln;
writeln('Karyawan ke 3:');
new(datakaryawan3);
with datakaryawan3^ do
begin
write('Kode karyawan?');readln(kode);
write('Nama karyawan?');readln(nama);
write('Gaji karyawan?');readln(gaji);
end;
writeln;
writeln('Karyawan ke 4:');
new(datakaryawan4);
with datakaryawan4^ do
begin
write('Kode karyawan?');readln(kode);
write('Nama karyawan?');readln(nama);
write('Gaji karyawan?');readln(gaji);
end;
writeln;
writeln('Data karyawan diambil dari heap:');
writeln('--------------------------------');
writeln;
writeln(' Kode Nama gaji');
writeln;
with datakaryawan1^ do writeln(kode:5,nama:20,gaji:12:2);
with datakaryawan2^ do writeln(kode:5,nama:20,gaji:12:2);
with datakaryawan3^ do writeln(kode:5,nama:20,gaji:12:2);
with datakaryawan4^ do writeln(kode:5,nama:20,gaji:12:2);
readln;
end.
35
Output :
36
7. LINKED LIST
- Procedure Insert
Menambahkan sebuah simpul baru ke dalam suatu linked list.
Procedure Insert (elemen : TipeData);
Var Now : Point;
Begin
New (Now);
Now^.Isi := elemen;
If Head = Nil then
Now^.Next := Nil;
Else
Now^.Next := Head;
Head := Now;
End;
37
- Procedure Insert
Menambahkan sebuah simpul baru ke dalam suatu linked list.
Procedure Insert (element :TipeData);
Var Now : Point;
Begin
New (Now);
If Head = Nil then
Head := Now;
Else
Tail^.Next := Now;
Tail := Now;
Tail^.Next := Nil;
Now^.Isi := Elemen;
End;
- Empty : Function untuk menentukan apakah linked list kosong atau tidak.
Function Empty : Boolean;
Begin
If Head = Nil then
Empty := true
Else
Empty := false;
End;
38
- Find First : Mencari elemen pertama dari linked list.
Procedure Find_First;
Begin
Now := Head;
End;
- Retrieve : Mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu
ditampung pada satu variabel.
Procedure Retrieve (var r : TipeData);
Begin
r := Now^.Isi;
End;
- UpDate : Mengubah elemen yag ditunjuk oleh Now dengan isi dari suatu
variabel.
Procedure UpDate (u : TipeData);
Begin
Now^.Isi := u;
End;
- Delete Now : Menghapus elemen yang ditunjuk oleh Now. Jika yang
dihapus adalah elemen pertama dari linked list, maka head akan berpindah
ke elemen berikut.
39
Procedure Delete_Now;
Var x : Point;
Begin
If Now < > Head then
Begin
x := Head;
While x^.next < > Now do
x := x^.next;
x^.next := Now^.next;
End
Else
Head := Head^.next;
Dispose (Now);
Now := Head;
End;
40
- Delete After : Menghapus simpul dari belakang.
Procedure DeleteAfter;
Var Now : Point;
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;
41
End;
If Now < > Nil then dispose (Now);
End;
42
lagi:=' ';
repeat
new(datanama);
write('Nama ?');readln(datanama^.nama);
datanama^.berikut:=namaawal;
namaawal:=datanama;
write('Menambah data lagi (Y/T)?');readln(lagi);
writeln;
until upcase(lagi)<>'Y';
Output :
43
- Insert After : Berguna untuk menambah simpul di belakang pada sebuah double
linked list.
Procedure InsertAfter (e : elemen_Type);
Var Now : Point;
Begin
New(Now);
If Head = Nil then
Head := Now;
Else
Begin
Now^.Prev := Tail;
Tail^.Next := Now;
End;
Now^.Isi := e;
Tail := Now;
Tail^.Next := Head;
Head^.Prev := Tail;
End;
44
Now^.Isi := e;
Now^.next := Tail;
Tail^.Prev := Now;
Tail := Now;
End;
- Delete After : Menghapus simpul dari belakang
Procedure DeleteAfter;
Var Now : Point;
Begin
Now := Tail;
If Head = Tail then
Begin
Tail := Nil;
Head := Nil;
End Else
Begin
Tail := Now^.Prev;
Tail^.Next := Head;
Head^.Prev := Tail;
End;
If Now < > nil then Dispose (Now);
End;
- Delete Before : Kebalikan dari procedure Delete After, menghapus simbul dari
depan.
Procedure DeleteBefore;
Var Now : Point;
Begin
Now := Head;
If Head = Tail then
Begin
Tail := Nil;
45
Head := Nil;
End else
Begin
Head := Now^.Next;
Head^.Prev := Tail;
Tail^.Next := Head;
End;
If Now < > Nil then dispose (Now);
End;
46
Begin
Cari(x);
Now^.Isi := y;
End;
Programnya :
program linklistFIFO;
uses crt;
type penunjuksimpul=^simpul;
simpul=record
kode:string[5];
nama:string[15];
banyak:word;
harga:real;
berikut:penunjuksimpul;
end;
var
databrg,
simpulawal,
simpulakhir:penunjuksimpul;
lagi:char;
begin
clrscr;
mark(databrg);
simpulawal:=databrg;
simpulakhir:=databrg;
lagi:='Y';
while upcase(lagi)='Y' do
begin
new(databrg);
write('Kode barang ? ');readln(databrg^.kode);
write('Nama barang ? ');readln(databrg^.nama);
write('Banyak barang ? ');readln(databrg^.banyak);
write('Harga barang ? ');readln(databrg^.harga);
simpulakhir^.berikut:=databrg;
databrg^.berikut:=nil;
simpulakhir:=databrg;
write('Ada lagi (Y/T)?');readln(lagi);
writeln;
end;
writeln(' Kode Nama Barang Banyaknya Harga ');
writeln;
databrg:=simpulawal;
while databrg<>nil do
begin
with databrg^ do
begin
47
writeln(kode:5,nama:15,banyak:11,harga:12:2);
databrg:=berikut;
end;
end;
readln;
end.
Output :
48
8. TREE
Merupakan salah satu bentuk struktur data tidak linear yang menggambarkan
hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree
bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang
disebut root dan node lainnya terbagi menjadi himpunan-himpunan yang saling tak
berhubungan satu sama lain (Subtree).
a. Predecessor : Node yang berada di atas node tertentu.
b. Successor : Node yang berada di bawah node tertentu.
c. Ancestor : Seluruh node yang terletak sebelum node tertentu dan terletak pada
jalur yang sama.
d. Descendant : Seluruh node yang terletak sesudah node tertentu dan terletak pada
jalur yang sama.
e. Parent : Predecessor satu level di atas satu suatu node.
f. Child : Successor satu level di bawah suatu node.
g. Sibling : Node-node yang memiliki parent yang sama dengan suatu node.
h. Subtree : Bagian dari tree yang berupa suatu node beserta descendantnya dan
memiliki semua karakteristik dari tree tersebut.
i. Size : Banyaknya node dalam satu tree.
j. Height : Banyaknya tingkatan/level dalam suatu tree.
k. Root : Satu-satunya node khusus dalam tree yang tak punya predecessor.
l. Leaf : Node-node dalam tree yang tak memiliki successor.
m. Degree : Banyaknya child yang dimiliki suatu node.
B C
D E F G
49
Ancestor (F) :C
Descendent (C) :G
Parent (D) :B
Child (A) : B; C
Sibling (F) :G
Size :7
Height :3
Root :A
Leaf : D, E, F, G
Degree (C) :2
B C
D E F G
H I J
50
A
B C
B C
D E
A D
B E
C F
51
Root
Left Right
Langkah-langkah traverse :
PreOrder : cetak node yang dikunjungi, kunjungi left, kunjungi right.
52
InOrder : kunjungi left, cetak node yang dikunjungi, kunjungi right.
PostOrder : kunjungi left, kunjungi right, cetak node yang dikunjungi.
Notasi Matematika
Misalkan suatu ekspresi berikut : 3 + 2 * 5 – 4
Prefiks : - + 3 * 2 5 4
Infiks : 3 + 2 * 5 – 4
Prefiks : 3 2 5 * ÷ 4
+ 4
3 x
2 5
65
2. Insert (leftchild, 5)
65
3. Find Root
4. Insert (rightchild, 70)
65
5 70
53
5. Find root
6. Insert (left, 3)
65
5 70
5 70
5 10
Programnya :
uses crt;
type
ptr=^Simpul;
simpul=record
data:integer;
kanan,kiri:ptr;
end;
{--------------------------------------------------------------------}
procedure Init(var p:ptr);
begin
clrscr;
p:=nil;
end;
{--------------------------------------------------------------------}
procedure masukdata(var p:ptr; d:integer);
begin
if p=nil then
begin
new(p);
p^.data:=d;
p^.kiri:=nil;
p^.kanan:=nil;
end
else
54
if p^.data < d then
masukdata(p^.kanan,d)
else
masukdata(p^.kiri,d);
end;
{--------------------------------------------------------------------}
procedure postorder(p:ptr;var ka:integer);
begin
if p<>nil then
begin
postorder(p^.kiri,ka);
postorder(p^.kanan,ka);
writeln(p^.data);
end;
end;
{====================Procedure Hitung Sebelah
Kiri===================}
procedure hitungnode(p:ptr;var ka:integer);
begin
if p<>nil then
begin
inc(ka);
hitungnode(p^.kiri,ka);
hitungnode(p^.kanan,ka);
end;
end;
{=============================Program Utama
==========================}
var
pohon,p,T:ptr;
dt,jum,k,ki,ka :integer;
begin
init(pohon);
repeat
write('Data masuk ke :');readln(dt);
if dt <> 0 then
masukdata(pohon,dt);
until dt=0;
writeln;
ki:=0;
hitungnode(pohon^.kiri,ki);
writeln('banyak Simpul sebelah kiri =',ki);
ka:=0;
hitungnode(pohon^.kanan,ka);
writeln('banyak Simpul sebelah kanan=',ka);
writeln('Jumlah simpul = ',ki+ka+1);
readln;
end.
55
Output :
56
45
Insert 30
30 56
45
Insert 50
30 56
50
Delete 45 50
30 56
56
Ket : pada operasi di atas, delete dilakukan pada Node dengan dua child, maka
untuk menggantikannya diambil node paling kiri dari right subtree yaitu 50.
Programnya :
Program treedinamis;
uses crt;
Type pohon=^node;
node=record
data:integer;
kiri,kanan:pohon;
end;
var T:pohon;
info:integer;
{--------------------------------------------------------------------}
Procedure Buat_BST(info :integer;var T:pohon);
var
b:pohon;
begin
if T=nil then
begin
new(b);b^.data:=info;b^.kiri:=nil;b^.kanan:=nil;
T:=b;
end
else
begin
if T^.data<info then
Buat_Bst(info,T^.kanan);
if T^.data>info then
Buat_Bst(info,T^.kiri);
end;
end;
{--------------------------------------------------------------------}
Procedure Baca_BST_pre(b:pohon);
begin
if (b<>nil) then
begin
write(b^.data);
Baca_BST_pre(b^.kiri);
Baca_BST_pre(b^.kanan);
end;
end;
{--------------------------------------------------------------------}
Procedure Baca_BST_in(b:pohon);
57
begin
if (b<>nil) then
begin
Baca_BST_in(b^.kiri);
write(b^.data);
Baca_BST_in(b^.kanan);
end;
end;
{--------------------------------------------------------------------}
Procedure Baca_BST_post(b:pohon);
begin
if (b<>nil) then
begin
Baca_BST_post(b^.kiri);
Baca_BST_post(b^.kanan);
write(b^.data);
end;
end;
{--------------------------------------------------------------------}
begin
clrscr;
new(T);T^.kiri:=nil;T^.kanan:=nil;
writeln('Memasukkan data ke dalam tree');
repeat
write('Nilai data : ');readln(info);
if info<>0 then Buat_BST(info,T);
until info=0;
writeln;
readln;
writeln('Pembacaan secara Pre order');
baca_BST_pre(T);
writeln;
readln;
writeln('Pembacaan secara In order');
baca_BST_in(T);
writeln;
readln;
writeln('Pembacaan secara Post order');
baca_BST_post(T);
writeln;
readln;
end.
58
Output
AVL TREE
Merupakan binary search tree yang memiliki perbedaan tinggi/level antara sub
tree kiri dan subtree kanan maksimal adalah 1. AVL Tree muncul untuk
menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk
tree dapat dipersingkat dan disederhanakan.
Selain AVL Tree terdapat pula Height Balanced n Tree, yakni Binary Search
Tree yang memiliki perbedaan level antara subtree kiri dan subtree kanan maksimal
adalah n. Sehingga AVL Tree adalah Height Balanced 1 Tree.
Untuk mempermudah menyeimbangkan tree, maka digunakan simbol-simbol
bantu :
- (tanda minus) : digunakan apabila subtree kiri lebih panjang dari subtree kanan.
+ (tanda positif) : digunakan apabila subtree kanan lebih panjang dari subtree kiri.
0 (nol) : digunakan apabila subtree kiri dan subtree kanan mempunyai
height yang sama.
59
9. GRAPH
A B
C
E D
A D
B C
60
Contoh :
A B
D C
D C
A B
C
E D
D C
2
Bila simpul asal (Vx) = A
dan simpul tujuan (Vy) = C
tentukan jalur terpanjang dan terpendek !
1. A-B-C = 7
2. A-C = 4 Criticial path : 9
3. A-D-C = 7 Minimum spanning tree : 4
4. A-B-D-C = 9
61
Representasi Graph
1. Adjacency Matrices / Matriks Tetangga
Graph yang dinyatakan dalam matriks n x n dimana n adalah jumlah simpul matriks.
Matriks ini sering disebut dengan istilah matriks bit / matriks boolean.
Kelebihan :
Mudah disimpan, dapat digunakan untuk operasi-operasi aljabar matriks /
menentukan suatu lintasan / suatu siklus.
Kelmahan :
Sulit menyimpan informasi tambahan, dan jumlah simpul harus sudah ditentukan
sebelumnya.
2. Adjacency List
Graph yang dinyatakan dengan linked list / senarai berantai.
Programnya :
program menampilkan_grafik;
uses crt;
type tahun=array[1..6] of byte;
procedure input(var thn:tahun);
var i:byte;
begin
clrscr;
gotoxy(5,1);write('Data Jutaan');
for i:=1 to 6 do
begin
repeat
gotoxy(5,2+i);write('tahun',i,':');
gotoxy(17,2+i);clreol;
gotoxy(17,2+i);readln(thn[i]);
until (thn[i]>0) and (thn[i]<16);
end;
end;
procedure gambar(thn:tahun);
var i,j:byte;
begin
for i:=0 to 14 do
begin
gotoxy(35,2+i);write(15-i:2,'|');
62
end;
gotoxy(36,17);write(0,' ');
for i:=1 to 35 do write('-');
gotoxy(39,18);write('1995 1996 1997 1998 1999 2000');
gotoxy(41,21);write('Jumlah penduduk Jakarta');
for i:=1 to 6 do
for j:=1 to thn[i] do
begin
gotoxy(33+i*6,17-j);write('###');
end;
readkey;
end;
var data:tahun;
begin
input(data);
gambar(data);
end.
Output :
63
10. SORTING
Sort adalah pengurutan data yang sebelumnya disusun secara acak sehingga
menjadi tersusun secara teratur menurut suatu aturan tertentu.
Pada umumnya terdapat dua jenis pengurutan :
1. Ascending (Naik)
2. Descending (Turun)
Beberapa Metoda Sorting :
a. Bubble/Exchange Sort
Membandingkan elemen yang sekarang dengan elemen yang berikutnya, jika
elemen sekarang > elemen berikutnya, maka tukar.
- Procedure Tukar
Procedure Tukar_Data (Var a, b : Word);
Var c :Word;
Begin
c := a;
a := b;
b := c;
End;
64
Var i,j : Integer
Begin
For I := 2 to JmlData do
For J := JmlData down to I do
If data[j] >data[j-1] then
TukarData (data[j], data[j-1]);
End;
Programnya :
Program Sorting_Bubble;
Uses Crt;
Const
Max = 5;
Type
Arr = Array[1..max] Of Byte;
Var
Data : Arr;
i : Byte;
Procedure Input;
Begin
Clrscr;
Writeln('Masukkan 5 Data ');
Writeln('=================');
For I:=1 To Max Do
Begin
Write('Data Ke :',I,'=');Readln(Data[i]);
End;
Clrscr;
For i:=1 to Max Do
Write(Data[i],' ');
Writeln;
Writeln('=========================');
Writeln('Data Yang telah Diurutkan');
Writeln;
{ Readln;}
End;
Procedure Change (Var a,b :Byte);
Var c:Byte;
Begin
C:=a;a:=b;b:=c;
End;
Procedure Asc_Bubble;
Var
P,Q : Byte;
Flag: Boolean;
65
Begin
Flag:=False;
P:=2;
While (P<Max) And (Not Flag) Do
Begin
Flag:=True;
For Q:=Max Downto P Do
If Data[Q]<Data[Q-1] Then
Begin
Change(Data[Q],data[Q-1]);
Flag:=False;
End;
Inc(i);
End;
Write(' Ascending ');
End;
Procedure Desc_Bubble;
Var
P,Q : Byte;
Flag: Boolean;
Begin
Flag:=False;
P:=2;
While (P<Max) And (Not Flag) Do
Begin
Flag:=True;
For Q:=Max Downto P Do
If Data[Q]>Data[Q-1] Then
Begin
Change(Data[Q],data[Q-1]);
Flag:=False;
End;
Inc(i);
End;
Write('Descending ');
End;
Procedure Output;
Begin
For I:=1 To Max Do
Write(Data[I],' ');
Writeln;
End;
Begin
Input;
Asc_Bubble; Output;
Desc_Bubble; OutPut;
Writeln;
Write('Tekan Enter Untuk Lanjut');
Readln;
66
End.
Output :
b. Selection Sort
Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai
dengan elemen yang terakhir. Jika ditemukan elemen yang lebih kecil dari elemen
yang sekarang maka dicatat posisinya dan kemudian ditukar.
- Procedure Selection Sort Ascending
Procedure Asc_Selection;
Var Min, Pos : Byte
Begin
For I := 1 to max-1 do
Begin
Pos := I;
For J := i+1 to max do
If data[j] < data[pos] then Pos := j;
If I < > Pos then TukarData (data[i], data[pos]);
End;
End;
67
Procedure Des_Selection;
Var Min, Pos : Byte
Begin
For I := 1 to max-1 do
Begin
Pos := I;
For J := i+1 to max do
If data[j] < data[pos] then Pos := j;
If I < > Pos then TukarData (data[i], data[pos]);
End;
End;
Contoh program selection sort dengan interface grafik-bar horisonral :
c. Insertion Sort
Pengurutan dilakukan dengan cara membandingkan data ke-I (dimana I dimulai dari
data ke-2 sampai dengan data yang terakhir. Jika ditemukan data yang lebih kecil
maka data tersebut disisipkan ke depan sesuai dengan posisi yang seharusnya.
- Procedure Insertion Sort Ascending
Procedure Asc_Insert;
Var i,j, temp : Byte;
Begin
For I := 2 to max do
Begin
Temp := data[i];
J := i-1;
While (data[j]>temp) and (j>0) do
Begin
Data[j+1] := data[j];
Dec(j);
End;
Data[j+1] := temp;
68
End;
End;
d. Quick Sort
Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain dan
menyusun sedemikian rupa sehingga elemen-elemen lain yang kecil daripada pivot
tersebut terletak di sebelah kirinya dan elemen-elemen lain yang lebih besar
daripada tersebut terletak pada sebelah kanannya. Sehingga dengan demikian telah
terbentuk dua sublist kiri dan kanan yang kita anggap sebuah list baru dan kita
kerjakan proses yang sama sebelumnya. Demikian seterusnya sampai tidak terdapat
sublist lagi. Sehingga di dalamnya telah terjadi proses rekursif.
- Procedure Quick Sort dengan nilai paling kiri sebagai pembanding (pivot)
Procedure Asc_Quick (L, R : Integer);
69
Var I,J : Integer;
Begin
If L<R then
Begin
I := L; J := R+1;
Repeat
Repeat inc(i) until data[i] >= data[1];
Repeat dec(j) until data[j] <= data[1];
If I < J then TukarData (data[i], data[j]);
Untuk I > j;
TukarData (data[1], data[j]);
Asc_Quick (L, j-1);
Ascc_Quick (j+1, R);
End;
End;
70
End;
71
End;
Until I > j;
If L < J then Asc_Quick (L,J);
If L < R then Asc_Quick (I,R);
End;
Programnya :
program progquicksort;
uses crt;
type
tipelarik=string;
larikurut=array[1..100] of tipelarik;
procedure quicksort(var x:larikurut;
bawah,atas:word);
var
i,j:word;
sementara:tipelarik;
begin
while atas>bawah do
begin
i:=bawah;
j:=atas;
sementara:=x[bawah];
{memecah larik menjadi dua bagian}
while i<j do begin
while x[j]>sementara do j:=j-1;
x[i]:=x[j];
while (i<j) and (x[i]<=sementara) do i:=i+1;
x[j]:=x[i];
end;
x[i]:=sementara;
{urutkan rekursi}
quicksort(x, bawah, i-1);
bawah:=i+1;
end;
end;
var
data:larikurut;
n,i:word;
begin
clrscr;
write('Jumlah data yang akan diurutkan?');readln(n);
writeln;
72
writeln('Masukkan data:');
for i:=1 to n do begin
write('Data ke',i,'?');readln(data[i]);
end;
{urutkan dengan prosedure quicksort}
quicksort(data,1,n);
{tampilkan data yang telah urut}
writeln;
writeln('Data yang telah urut:');
writeln('---------------------');
for i:=1 to n do
writeln(data[i]);
readln;
end.
Output :
73
11. SEARCHING
Dalam searching akan dibahas metoda pencarian data dalam suatu array, baik
pada array yang sudah terurut maupun yang belum terurut. Metode pencarian yang akan
digunakan adalah :
1. Sequential Search
Metode ini sering disebut pencarian beruntun dapat digunakan untuk melakukan
pencarian data baik pada array yang sudah terurut maupun yang belum terurut.
Proses yang terjadi pada metode pencarian ini adalah sebagai berikut :
1) Membaca array data.
2) Menentukan array yang dicari.
3) Mulai dari data yang pertama sampai dengan data yang terakhir, data yang dicari
dibandingkan dengan masing-masing data di dalam array.
a. Jika data yang dicari tidak ditemukan maka semua data atau elemen array
dibandingkan sampai selesai.
b. Jika data yang dicari ditemukan maka perbandingan akan dihentikan.
Programnya :
program sequential_searh2_boolean;
uses crt;
const nmax=100;
type tabinteger=array[1..nmax] of integer;
var
tabint:tabinteger;
jml_data,data,indeks:integer;
found:boolean;
cari:char;
procedure inputdata(n:integer; var t:tabinteger);
var
i:integer;
begin
for i:=1 to n do
begin
write ('nilai ke - ',i,' : ');
readln(t[i]);
end;
end;
procedure seqsearch(t :tabinteger; n,x :integer;var idx:integer);
var i:integer;
begin
i:=1;
74
found :=false;
while (i<=n) and (not found) do
begin
if t[i]=x then
found:=true
else
i:=i+1;
end;
if found then
idx:=i
else
idx:=0;
end;
begin
clrscr;
write('banyaknya integer : ');readln(jml_data);
inputdata(jml_data,tabint);
repeat
write('data yang akan dicari : ');readln(data);
seqsearch(tabint, jml_data,data,indeks);
if indeks=0 then
writeln('data tidak ditemukan')
else
writeln('data ditenukan pada posisi ke-',indeks);
write('cari data lagi (y/t) ? ');readln(cari);
until(cari='t')or (cari='T');
readln;
end.
Output :
75
2. Binary Search
Metoda ini sering juga disebut pencarian biner, hanya digunakan untuk pencarian
data pada array yang sudah teurut. Proses yang terjadi pada pencarian dengan
metoda ini adalah sebagai berikut :
1. Membaca array data.
2. Apabila array belum terurut, maka diurutkan terlebih dahulu.
3. Menentukan data yang akan dicari.
4. Menentukan elemen tengah dari array.
5. Jika nilai elemen tengah sama dengan data yang dicari maka pencarian selesai.
6. Jika nilai elemen tengah tidak sama dengan data yang dicari maka :
a. Jika nilai elemen tengah lebih besar daripada data yang dicari maka
pencarian dilakukan pada setengah array pertama.
b. Jika nilai elemen tengah lebih kecil daripada data yang dicari maka
pencarian dilakukan pada setengah array berikutnya.
Programnya :
program progcaribiner;
uses crt;
type
tipelarik=word;
larik=array[1..8] of tipelarik;
procedure caribiner( x :larik;
cari:tipelarik;
bawah,atas:word;
var urutketemu:word);
var
tengah:word;
begin
if bawah>atas then
urutketemu:=0
else
begin
tengah:=(bawah+atas)div 2;
if cari=x[tengah] then
urutketemu:=tengah
else
if cari<x[tengah] then
caribiner(x,cari,bawah,tengah-1,urutketemu)
else
caribiner(x,cari,tengah+1,atas,urutketemu)
end;
end;
76
type
stringnama=string[20];
const
nomermhs:larik=(1,2,3,4,5,6,7,8);
namamhs:array[1..8] of stringnama=('Arief','Hadi','Dewi','Cakil','Joni','eni','Badu','Amir');
var
cari:word;
ketemu:word;
lagi:char;
begin
lagi:='Y';
while upcase(lagi)='Y' do
begin
clrscr;
write('Nomer mahasiswa yang dicari?');readln(cari);
writeln;
caribiner(nomermhs,cari,1,8,ketemu);
if ketemu=0 then
writeln('Tidak ada nomer mahasiswa ini!!!')
else
begin
writeln('Nomer mahasiswa:',nomermhs[ketemu]);
writeln('Nama mahasiswa:',namamhs[ketemu]);
end;
writeln;
write('Cari yang lain lagi (y/t)?');readln(lagi);
end;
end.
Output :
77
78
DAFTAR ISI
79
Bab 11 Searching .................................................................................................... 96
11.1 Metoda Sequential Search ................................................................. 96
11.2 Metoda Binery Search ....................................................................... 97
80
Struktur
Data
Menggunakan Turbo Pascal
Disusun oleh :
81
82