• Mendefinisikan tipe dari record (jumlah field, jenis tipe data yang dipakai),
• Mendefinisikan variabel untuk dilakukan operasi.
Notasi Penulisan (sintaks):
type
nama_record = record
identifier_1 : tipe_data_1;
identifier_n : tipe_data_n;
end;
var
variabel : nama_record;
Contoh:
type
Data_mahasiswa = record
Nama : string;
Usia : integer;
Kota : String;
Kodepos : integer;
end;
Var
x: Data_mahasiswa;
Pengaksesan Elemen Record
Cara mengacu pada tiap field pada record untuk contoh sebelumnya adalah
sebagai berikut:
x.Nama
x.Usia
x.Kota
x.Kodepos
a. Deklarasi Record
1
KETERANGAN :
“Nmahasiswa” adalahnamavariabeluntuk record pada program.
“NIM: integer”,
“NilMahasiswa”: string,
“MatKul: string”, adalah contoh isi dari record yang tipe datanya disesuaikan
dengan data yang akan diisi.
c. Contoh Record
Program contoh_rekaman;
uses crt;
type mhs = record
nim: string[8];
nama: string[30];
usia: byte;
jml_saudara: 0..20;
2
end;
var siswa : array[1..20] of mhs;
i, n : integer;
begin
clrscr;
write(‘Banyak data yang akan dimasukkan : ‘); readln(n);
{penampilan data}
clrscr;
writeln(‘DATA YANG ANDA MASUKKAN ‘);
writeln;
for i:= 1 to n do
begin
write(siswa[i].nim:11);
write(siswa[i].nama:23);
write(siswa[i].usia:5);
write(siswa[i].jml_saudara:5);
writeln;
end;
readln;
end.
3
Bentuk pernyataan with...do adalah sebagai berikut :
WITH Nama_record DO
Statemen;
Program Data_Mahasiswa;
Uses crt;
Type mhs = record
NPM : String[15];
Nama : String[20];
End;
Var data :mhs;
Begin
With data do
Begin
Write('NIM : ');Readln(NIM);
Write('Nama : ');Readln(Nama);
End;
Writeln('NPM : ',data.NPM);
Writeln('Nama : ',data.Nama);
Readln;
end.
C. Array
a. Pengertian Array
Suatu larik (array) adalah tipe terstruktur yang terdiri dari sejumlah
komponen-komponen yang mempunyai tipe sama. Suatu larik mempunyai
jumlah komponen yang banyaknya tetap. Banyaknya komponen dalam suatu
larik ditunjukkan oleh suatu indeks yang disebut tipe indeks. Tipe indeks ini
4
berbentuk ungkapan tipe ordinal (tipe data yang berurutan). Tiap-Tiap komponen
pada larik dapat diakses dengan menunjukkan nilai indeksnya. Array merupakan
struktur data yang statis, yaitu jumlah elemen yang ada harus ditentukan terlebih
dahulu dan tak bisa di ubah saat program berjalan. Untuk menyatakan array
dalam PASCAL kita harus terlebih dahulu:
Mendefinisikan jumlah elemen array,
Mendefinisikan tipe data dari elemen array
b. Deklarasi Array
Pendefinisian array secara umum adalah sebagai berikut: jika kita ingin
membuat beberapa array dengan tipe/jenis yang sama, kita lebih baik jika
mendeklarasikan dengan type selanjutnya dengan deklarasi var.
type
nama_array = ARRAY[bawah..atas] of tipe_data;
var
variabel_array : nama_array; atau dengan menggunakan statement var :
var
variabel_array : ARRAY[bawah..atas] of tipe_data;
Penjelasan: Bawah dan Atas menyatakan batas untuk array. tipe_data
adalah
merupakan tipe variabel yang dipunyai array (mis. Integer, char,real, dsb)
Contoh:
Var
x: array[1..100] of integer;
Larik x telah dideklarasikam sebagai larik tipe integer dengan jumlah elemen
maksimum sebanyak 100 elemen. Nilai-nilai elemen larik ini harus berisi nilai-
nilai integer. Misalnya elemen-elemen (anggota) dari larik x adalah:
X[1]:=25;
X[2]:=55;
X[3]:=65;
X[4]:=75;
X[5]:=95;
c. Operasi Array (Input/Output)
5
d. Contoh Kode Program Array
Pada contoh diatas, saya membuat variabel ‘nilai’ sebagai array yang berisi
10 element integer. Di dalam variabel ‘nilai’ ini, index array dimulai dari 0
hingga 9, karena saya menulisnya dengan array[0..9] of integer. Jika anda ingin
membuat 100 element array, bisa menulisnya sebagai array[0..99] of integer.
Selain itu, kita juga tidak harus mengisinya secara berurutan. Kita bisa mengisi
element-element array ini secara acak, selama masih dalam batas yang
ditetapkan. Berikut
contohnya:
6
1. Stack
a. Pengertian Stack
Stack atau Tumpukan adalah suatu struktur data yang terbentuk dari barisan
hingga yang terurut dari satuan data. Pada Stack, penambahan dan penghapusan
elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir stack.
Posisi ini disebut Puncak atau Top dari stack. Tumpukan merupakan kumpulan
data yang sifat dinamis artinya kita bisa menambah dan mengambil data darinya.
Contoh:
Kasusnya, saya mempunyai buku-buku pelajaran yang terdiri dari buku
Matematika, Fisika, Biologi, Kimia dan Bahasa Indonesia. Untuk menghemat
ruang, kemudian saya menyimpan buku-buku tersebut ke dalam kotak yang saya
miliki. Saya memasukkan buku dengan urutan sebagai berikut:
Fisika 2. Kimia 3. Matematika 4. Bahasa Indonesia 5. Biologi.
Karena besok jadwalnya Matematika dan saya harus belajar, maka untuk
mengambil buku
Matematika saya harus mengeluarkan dulu buku Biologi dan Bahasa Indonesia.
Sehingga buku Matematika dapat saya ambil dan yang tersisa pada kotak saat ini
adalah buku Fisika dan Kimia.
7
OPERASI STACK
Pengertian
Operasi-operasi yang biasanya tredapat pada Stack yaitu:
1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
3. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
4. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
DEKLARASI STACK:
Const Nmax = 100;
Type Stack = record
isi: array[1..Nmax] of integer;
top: integer;
End;
8
Var
a,b,c,x,i : integer;
S: Stack;
OPERASI ISEMPTY:
Function IsEmpty(S : Stack) : boolean;
{mengecek stack kosong}
Var
empty : boolean;
Begin
If S.top = 0 then
empty := true
else
empty := false;
IsEmpty:=empty
end.;
OPERASI ISFULL:
Function IsFull(S : Stack) : boolean;
{mengecek stack penuh}
Var
full : boolean;
Begin
if S.top = Nmax then
full := true
Else
full := false;
IsFull := full;
End;
OPERASI PUSH:
Procedure PUSH (var S : Stack; X :
integer); {fungsi push untuk
memasukan}
Begin
if IsFull(S) = false then
Begin
9
S.top := S.Top + 1;
S.isi[S.Top] := X;
End;
End;
OPERASI POP:
Procedure POP (var S : Stack; var X :
integer); {fungsi pop untuk
mengambil/dilayani}
Begin
if IsEmpty(S) = false then
Begin
X := S.isi[S.top];
S.top := S.top – 1;
End;
writeln(‘Hasil POP ‘,X);
End;
2. Pointer
a. Pengertian Tipe Data Pointer
Tipe data pointer adalah tipe data yang berisi alamat memory dari sebuah
variabel. Pointer sering disebut juga dengan istilah link atau referensi adalah
suatu variabel yang berisi alamat dari suatu variabel yang lain.
10
b. Variabel Statis dan Dinamis
11
d. Cara Alokasi Tempat / Memori (Membuat Simpul Baru)
Secara Umum ada dua operasi dasar yang bisa kita lakukan menggunakan
operasi bertipe pointer, yaitu:
1) Operasi mengkopi pointer, sehingga sebuah simpul akan ditunjuk oleh
lebih dari sebuah pointer. Bentuk umum : P2 := P1
2) Operasi mengkopi isi simpul, sehingga dua atau lebih simpul yang
ditunjuk oleh pointer yang berbeda mempunyai isi yang sama. Bentuk
umum : P2^ := P1^
Syarat yang harus dipenuhi untuk kedua operasi ini adalah bahwa pointer-pointer
yang dioperasikan harus mempunyai deklarasi yang sama.
f. Menghapus Pointer
12
Pada praktiknya sebuah struktur data memiliki elemen yang digunakan untuk
saling menyimpan rujukan antara satu dengan lainnya sehingga membentuk sebuah
senarai abstrak, tiap-tiap elemen yang terdapat pada senarai abstrak ini seringkali
disebut sebagai node. karena mekanisme rujukan yang saling terkait inilah disebut
sebagai senarai berantai.
Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur
data yang terdiri dari urutan record data dimana setiap record memiliki field yang
menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data
yang dihubungkan dengan link pada Linked List disebut Node.
Biasanya didalam suatu linked list, terdapat istilah head dan tail.
Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list
A. Deklarasi Variabel
13
baru := SIMPUL_BARU;
if awal=nil then
akhir:= baru
else
baru^.berikut := awal;
awal := baru;
end;
procedure TAMBAH_TENGAH;
var baru,bantu : simpul;
posisi,i : integer;
begin
writeln ('MENAMBAH SIMPUL BARU DI TENGAH SENARAI
BERANTAI');
writeln(garis); writeln;
writeln('SENARAI BERANTAI BERISI:',cacah:2,' SIMPUL');
repeat
write(' ');
write('SIMPUL BARU AKAN DITEMPATKAN SEBAGAI SIMPUL
NOMOR: ');
readln(posisi)
until posisi in [1..cacah+1];
if posisi=1 then
TAMBAH_AWAL(0)
else if
posisi=cacah+1 then TAMBAH_AKHIR(0)
else
begin
writeln;
baru := SIMPUL_BARU;
bantu:= awal;
for i:=1 to posisi-2 do
bantu := bantu^.berikut;
baru^.berikut := bantu^.berikut;
bantu^.berikut := baru;
14
end;
end;
procedure HAPUS_PERTAMA;
begin
if awal <> nil then
begin
awal := awal^.berikut;
writeln('SIMPUL PERTAMA TELAH TERHAPUS');
end
else
writeln(pesan);
15
writeln; writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU
UTAMA');
repeat until keypressed
end;
procedure HAPUS_TENGAH;
var posisi,i : integer;
bantu,bantu1 : simpul;
begin
if cacah=0 then
begin
writeln(pesan); writeln;
writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');
repeat until keypressed
end;
else
begin
writeln('MENGHAPUS SIMPUL YANG ADA DI TENGAH');
writeln;
writeln('SENARAI BERANTAI SEKARANG BERISI :',cacah:2,' SIMPUL');
repeat
gotoxy(37,5);
gotoxy(1,5); write('Akan menghapus simpul nomor berapa: ');
readln(posisi);
until posisi in [1..cacah];
if posisi=1 then HAPUS_PERTAMA
else if posisi=cacah then HAPUS_TERAKHIR
else
begin
bantu := awal;
for i:=1 to posisi-2 do
bantu:= bantu^.berikut;
bantu1 := bantu^.berikut;
bantu^.berikut := bantu1^.berikut;
bantu1^.berikut := nil;
16
dispose(bantu1);
end;
end;
end
procedure HAPUS_TERAKHIR;
var bantu : simpul;
H: integer;
begin
if awal=nil then
begin
writeln(pesan);
H := 0;
end
else if awal=akhir then
begin
awal := nil;
akhir:= nil;
H := 1;
end
else
begin
bantu := awal;
while bantu^.berikut <> akhir do
bantu := bantu^.berikut;
akhir := bantu;
akhir^.berikut := nil;
H := 1;
end;
if H=1 then
writeln('SIMPUL TERAKHIR TELAH TERHAPUS'); writeln;
writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');
repeat until keypressed
end;
17
D. Prosedur Tampil Data
procedure MENAMPILKAN_SENARAI;
var bantu : simpul; i : integer;
begin
i := 1;
writeln('MENAMPILKAN ISI SENARAI BERANTAI');
writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');
writeln;
bantu := awal;
if bantu=nil then
writeln(pesan)
else
while bantu <> nil do
begin
writeln('Simpul: ',i:2,'---> Nama : ',bantu^.nama);
writeln('':15,'Alamat: ',bantu^.alamat);
bantu := bantu^.berikut;
inc(i); //increment//
end;
repeat until keypressed
end;
procedure CARI_DATA;
var bantu : simpul;
i : integer;
begin
i := 1;
writeln('MENCARI DATA TERTENTU');
bantu:=awal;
if bantu^.nmbuku=bantu^.nmbuku then
begin
writeln('Nama : ', bantu^.nama:5);
writeln('Alamat : ', bantu^.alamat);
end else
18
writeln('Data Dengan No ',bantu^.:5,'tidak ada');
end;
Suatu saat kita perlu meletakkan sebuah simpul sebagai simpul pertama dari
sebuah senarai berantai. Simpul ini tidak berisi informasi seperti halnya simpul-
simpul lain, tetapi keberadaannya sangat diperlukan untuk lebih mempercepat
proses eksekusi. Simpul yang demikian disebut dengan simpul kepala (headed
node), sehingga senarai berantai disebut senarai berantai berkepala (headed-
linked-list).
Proses penghapusan simpul sering mengalami masalah terutama penghapusan
simpul akhir yang mana penghapusan hanya boleh dilakukan jika jumlah simpul
dalam senarai lebih dari satu, hal ini tidak efisien jika harus dilakukan
penghapusan semua simpul dengan penghapusan dimulai dari simpul yang paling
akhir dimana ketika senarai hanya memiliki satu simpul harus mengganti metode
penghapusan.
Untuk mengatasi hal tersebut dapat dibuat senarai berantai berkepala yaitu
menambahkan sebuah simpul yang biasaya tidak memiliki informasi atau nilai,
namun demikian tidak tertutup kemungkinan digunakan untuk kepentingan lain
misalnya mencatatkan jumlah simpul yang ada dalam senarai ataupun informasi
lain, tapi secara pasti tidak menyimpan informasi yang sama dengan informasi
yang ada pada simpul lainnya
Deklarasinya
Simpul = ^data
Data = record
info : tipedata
next : Simpul
end
Membentuk simpul
Kepala
New(Kepala)
19
Kepala^.next = nil
Program Pascalnya
New(baru)
Baru^.info = x
If kepala^.next = nil
Then
Baru^.next = nil
kepala^.next = baru
Else
Baru^.next = kepala^.next
Kepala^.next = baru
21
function ADA_DATA (Elemen : char; Kepala : Simpul) : boolean;
Var Ketemu : boolean;
Bantu : Simpul;
Begin
Bantu := Kepala;
Ketemu := false;
repeat
If Bantu^.Info = Elemen then
Ketemu := true
Else
Bantu := Bantu^.Berikut
Until Ketemu Or (Bantu = Nil);
ADA_DATA := Ketemu;
End;
Fungsi untuk mencari (terurut)
function ADA_DATA (Elemen : char; Kepala : Simpul) : boolean;
Var Ketemu : boolean;
Bantu : Simpul;
Begin
Bantu := Kepala;
Ketemu := false;
repeat
If Bantu^.Info = Elemen then
Ketemu := true
Else
if Bantu^.Info < Elemen then
Bantu := Bantu^.Berikut
Else Bantu := Nil;
Until Ketemu Or (Bantu = Nil);
ADA_DATA := Ketemu;
End;
22
Merupakan satu dari berbagai varian sebuah “Linked list”, sebuah Senarai
berkepala (Header Linked List) memiliki sebuah node khusus yang hadir diawal yang
digunakan untuk menyimpan jumlah node yang ada pada senarai berantai.
B. PENGERTIAN STACK
Stack (tumpukan) sebenarnya secara mudah dapat diartikan sebagai list (urutan)
dimana penambahan dan pengambilan elemen hanya dilakukan pada satu sisi yang
disebut top (puncak) dari stack.Dengan melihat definisi tersebut maka jelas bahwa
pada stack berlaku aturan LIFO (Last In First Out), yaitu elemen yang terakhir masuk
akan pertama kali diambil atau dilayani. Salah satu analogi yang dapat dikemukakan
di sini adalah tumpukan piring atau barang lain.
23
2. Senarai berantai berkepala sebagai stack menggunakan array
Array merupakan variabel yang terdiri dari sekumpulan data yang mempunyai
tipe data yang sama dan disimpan pada alamat memori yang berbeda-beda dan
hanya bisa diakses melalui nilai indeks sesuai urutan.
D. Operasi Stack
24
E. Deklarasi Stack Menggunakan Senarai Berkepala
25
Perbedaan implementasi antara senarai berantai sebagai stack menggunakan array
dan yang menggunakan pointer.
Implementasi stack menggunakan array memiliki kapasitas penyimpanan elemen
data yang terbatas (diberikan Batasan oleh tipe data array) dan hanya bisa diakses
melalui indeks. Sedangkan menggunakan pointer kita tidak memiliki batas
penyimpanan data, atau dengan kata lain dapat menyimpan elemen data hingga tak
terhingga.
26
6. Senarai Berntai Berputar Berkepala
A B C D
27
Prosedur menambah simpul didepan
Procedure TambahAwal(var kepala:simpul;elemen: char);
Var baru,bantu: simpul;
Begin
new(Baru)
baru^.info = elemen;
if kepala^.berikut = kepala then
begin
baru^.berikut := kepala;
kepala^.berikut := baru;
end
else
begin
baru^.berikut := kepala^.berikut;
kepala^.berikut := baru;
end;
End;
28
Bantu:=Bantu^.Berikut;
if Bantu^.Berikut<>Kepala Then
Baru^.Berikut:=Bantu^.Berikut
else
Baru^.Berikut:=Kepala;
Bantu^.Berikut:=Baru;
end;
end;
A B C D E
A B C D E
A B C D E
29
while bantu^.berikut <> kepala do
bantu:= bantu^.kepala;
baru^.berikut:= kepala;
bantu^.berikut:= baru;
end;
End;
A B C D E
A B C D E
A B C D
30
end
else
begin
Kosong:=False;
Ada:=False;
Bantu:=Kepala^.Berikut;
While (Bantu^.Berikut^.Info <> Elemen) and (Bantu<>Kepala) Do
Bantu:=Bantu^.Berikut;
Hapus:=Bantu^.Berikut;
If Bantu<>Kepala Then
begin
Ada:=True;
Bantu^.Berikut:=Hapus^.Berikut;
dispose(Hapus);
end;
end;
HapusSimpul:=Ada;
end;
31
Function mencari data (Tidak Terurut)
Function CariData (Elemen: char; kepala: simpul):boolean;
Var ketemu:boolean;
bantu: simpul;
Begin
bantu:= kepala^.berikut;
Ketemu:= false;
repeat
if bantu^.info = elemen then
ketemu:= true
else
bantu:= bantu^.berikut;
until Ketemu Or (Bantu = kepala);
CariData:= ketemu;
End;
32
7. Senarai Berantai Ganda Berkepala
33
2) Penambahan pada bagian Tengah
Baru^.kanan := Bantu^.kanan;
Baru^.Kiri := Bantu;
Bantu^.kanan^.kiri := baru;
Bantu^.kanan := baru;
Prosedur untuk menambahkan simpul baru pada senarai berantai ganda adalah
sebagai berikut :
Procedure Tambah_Simpul ( var kepala : simpul; elemen : char);
Var Baru , bantu : simpul;
Begin
New(baru);
With baru^ do
Begin
Info := elemen;
Kiri := nil;
Kanan := nil;
End;
Bantu := kepala;
While bantu^.kanan^.info < elemen do
Bantu := bantu^.kanan
If bantu^.kanan <> nil then
Begin
Baru^.kanan := bantu^.kanan;
Bantu^.kanan^.kiri := baru
End;
Bantu^.kanan := baru;
Baru^.kiri := bantu;
End;
34
Var bantu : simpul;
Begin
If kepala^.kanan = nil then
Writeln(‘Senarai kosong’)
Else
Begin
Bantu := kepala;
Repeat
Bantu := bantu^.kanan;
Until (bantu^.info = elemen) or (bantu = nil);
If bantu^.info = elemen then
Begin
Bantu^.kiri^.kanan := bantu^.kanan;
Bantu^.kanan^.kiri := bantu^.kiri;
Dispose(bantu);
Bantu := kepala;
End;
Else writeln(‘ data tidak ada ’);
End;
End;
35
Lihat Mundur Simpul Pada Senarai Berantai Ganda
Procedure lihat_data ( kepala : simpul; elemen : char);
Var bantu : simpul;
Begin
If kepala^.kanan = nil then
Writeln(‘Senarai kosong, tambahkan data terlebih dahulu’);
Else
Begin
Bantu := kepala;
Repeat
Bantu := bantu^.kanan;
Until ( bantu^.kanan = nil );
Repeat
Write(bantu^.info:3);
Bantu := bantu^.kiri;
Until ( bantu^.kiri = nil );
End;
End;
36
End;
Else writeln(‘ Data tidak ada ’);
End;
End;
A. Pengertian
Pada senarai bernatai ganda,pointer kiri dari sampul pertama dan pointer
kanan dari simpul terakhir masi bernilai nil, bila pointer kiri kita arahkan ke
ismpul akhir dan pointer kanan dari simpul terakhir kita arahkan ke simpul kepala,
senarai yang demikian dinamakan senarai berantai ganda berputar. Dan berkepala.
Begin
New(Kepala);
With Kepala^ do
begin
Kiri := Kepala;
Kanan := Kepala
end
End;
Prosedur Untuk Penambahan Simpul Pada Senarai Berantai Ganda
Berputar Berkepala Sebagai Berikut:
Procedure TAMBAH_SIMPUL (var Kepala : Simpul;Elemen : char);
Var Baru, Bantu : Simpul;
Begin
New(Baru);
Baru^.Info := Elemen;
If Elemen > Kepala^.Kiri^.Info then
Begin
Baru^.Kiri := Kepala^.Kiri;
Baru^.Kanan := Kepala;
Kepala^.Kiri^.Kanan := Baru;
37
Kepala^.Kiri := Baru
End;
Else
begin
Bantu := Kepala;
While Bantu^.Kanan^.Info < Elemen do
Bantu := Bantu^.Kanan;
Baru^.Kanan := Bantu^.Kanan;
Bantu^.Kanan^.Kiri := Baru;
Bantu^.Kanan := Baru;
Baru^.Kiri := Bantu
end
End;
Prosedur Untuk Menghapus Simpul Pada Senarai Berantai Ganda Berputar
Berkepala Sebagai Berikut:
Procedure HAPUS_SIMPUL (var Kepala : Simpul;
Elemen : char);
Var Bantu : Simpul;
Begin
If Kepala^.Kanan = Kepala then
Writeln(‘Senarai kosong’)
else
Begin
Bantu := Kepala;
repeat
Bantu := Bantu^.Kanan;
Until (Bantu^.Info = Elemen) or (Bantu = Kepala);
If Bantu^.Info = Elemen then
begin
Bantu^.Kiri^.Kanan := Bantu^.Kanan;
Bantu^.Kanan^.Kiri := Bantu^.Kiri;
Dispose(Bantu);
Bantu := Kepala
End
Else
Writeln(‘Karakter di atas tidak ada’)
38
end
End;
Gambar 2.1
39
Gambar 2.2
Gambar 2.3
40
Depan;
Belakang : integer;
Pada saat permulaan, belakang dibuat sama dengan 0 dan depan dibuat
sama dengan 1, dan antrian dikatakan kosong jika belakang < depan. Banyaknya
elemen yang ada dalam antrian dinyatakan sebagai belakang – depan + 1.
41
Gambar c) menunjukkan antrian setelah dua elemen dihapus (Depan = 3
dan Belakang = 4). Gambar d) menunjukkan antrian setelah dua elemen baru
ditambahkan (Depan = 3 dan Belakang = 6). Dalam hal ini banyaknya elemen
dalam antrian adalah 6 – 3 + 1 = 4 elemen. Karena larik terdiri dari 6 elemen,
maka sebenarnya kita masih bisa menambahkan elemen lagi. Tetapi, jika kita
ingin menambahkan elemen baru maka nilai Belakang harus ditambah satu,
menjadi 7.
Salah satu penyelesaiannya adalah dengan mengubah prosedur untuk
menghapus elemen, sedemikian rupa sehingga jika ada elemen yang dihapus,
maka semua elemen lain digeser sehingga antrian selalu dimulai dari Depan = 1,
Dengan cara ini, maka sebenarnya perubah Depan ini tidak diperlukan lagi hanya
perubah Belakang saja yang diperlukan, karena nilai Depan selalu sama dengan
1. Berikut adalah rutin penggeserannya (dengan mengabaikan kemungkinan
adanya underflow).
X := Antrian[1];
For I := 1 to Belakang - 1 do
Antrian [1] := Antrian[I+1];
Belakang := Belakang - 1;
Dalam hal ini antrian kosong dinyatakan sebagai nilai Belakang = 0.
Program Pascal Queue/Antrian Menggunakan Array, Sebagai Berikut:
a. Untuk Menambah Data
procedure inisialisasi;
begin
depan:=0;
42
belakang:=0;
n:=0;
end;
43
b. Untuk Menghapus Data
procedure hapus_data(var antrian:antri);
begin
clrscr;
writeln('HAPUS DATA');
writeln('==========');
writeln;
if n=0 then
write('Antrian Kosong!!!')
else
begin
if depan=maks then
depan:=1
else
depan:=depan+1;
writeln('Antrian telah terhapus');
n:=n-1;
end;
readkey;
end;
44
if i=maks then
i:=1
else
i:=i+1;
until i=belakang;
if i=belakang then
write(antrian[i]:3);
end;
readkey;
end;
45
if i=belakang then
if antrian[i]=x then
begin
ketemu:=true;
idx:=i;
end;
if not ketemu then
writeln('Data Tidak Ditemukan!')
else
writeln('Data ',x,' ditemukan pada indeks ke',idx);
end;
readkey;
end;
10.Pohon Biner
a. Pengertian Binary Tree
Pohon biner merupakan jenis pohon m-er (m-ary tree) yang simpul cabangnya
memiliki maksimal dua anak. Karena anak dari suatu cabang maksimalnya hanya
dua, maka anak cabang ini namakan vabang kiri atau cabang kanan.
46
Proses traversing dari sebuah binary tree artinya melakukan kunjungan pada
setiap simpul pada suatu pohon biner tepat satu kali. Dengan melakukan kunjungan
secara lengkap, kita akan memperoleh informasi secara linear yang tersimpan
dalam pohon biner. Secara linear dimaksudkan secara garis lurus atau searah.
Dalam melakukan kunjungan pada sebuah pohon biner, kita akan memperlakukan
hal yang sama pada setiap simpul pada cabang-cabangnya.
• Simpul daun (leaf) simpul-simpul pada pohon yang tidak lagi memiliki simpul
anak (child)
• Anak dari simpul x akar-akar (root) dari subpohon–subpohon dari simpul x adalah
anak dari x
47
b. Mendeklarasikan Pohon Biner
simpul = record
info : char;
end;
Begin
new(akar)
48
akar^.info := Hrf ;
akar^.kanan:= nil;
akar^.kiri := nil;
BARU := akar
End;
Begin
pohon := BARU(Hrf)
else
sisip_rekursif(akar^.kiri,hrf);
else
sisip_rekursif(akar^.kanan,hrf);
else
End
Menampilkan simpul pohon ada tiga jenis, yakni secara inorder, preorder dan postorder.
Menampilkan secara PreOrder (Depth First Order)
Mempunyai urutan :
49
a) Cetak isi simpul yang dikunjungi (simpul akar)
b) Kunjungi cabang kiri
Jika kiri bukan kosong (tidak Null) mulai lagi dari langkah pertama,terapkan untuk kiri
tersebut. Jika kiri kosong (Null), lanjutkan ke langkah ke tiga.
c) Kunjungi cabang kanan
Jika kanan bukan kosong (tidak Null) mulai lagi dari langkah pertama,terapkan untuk
kanan tersebut. Jika kanan kosong (Null), proses untuk node ini selesai,tuntaskan proses
yang sama untuk node yang dikunjungi sebelumnya.
begin
write(akar^.info : 4);
preorder(akar^.kiri);
preorder(akar^.kanan);
end;
End;
begin
50
inorder(akar^.kiri);
write(akar^.info : 4);
inorder(akar^.kanan);
end;
End;
begin
postorder(akar^.kiri);
postorder(akar^.kanan);
51
write(akar^.info : 4);
end;
End;
Pada ketiga cara kunjungan diatas, kunjungan kecabang kiri dilakukan terlebih dahulu, baru
kemudian kunjungan kecabang kanan. Dengan orientasi semacam ini ketiga kunjungan diatas
disebut dengan left to right oriented atau LRO. Jika kunjungan ke cabang kanan dilakukan lebih
dahulu baru kemudian kunjungan kecabang kiri, maka orientasi semacam ini disebut right to left
oriented atau RLO.
52
53