Halaman. 1
BAB I PENGENALAN STRUKTUR DATA
DAN ALGORITMA
Tujuan :
1. Mahasiswa memahami apakah yang dimaksud dengan struktur data 2. Mahasiswa memahami apakah yang dimaksud dengan algoritma
3. Mengingat kembali tipe data, procedure, function dalam bahasa Pascal
1.1 Pengenalan Struktur Data
Struktur data adalah sebuah skema organisasi, seperti record dan array, yang diterapkan pada data sehingga data dapat diinterprestasikan dan sehingga operasi-
operasi spesifik dapat dilaksanakan pada data tersebut
1.2 Pengenalan Algoritma
Algoritma adalah barisan langkah-langkah perhitungan dasar yang mengubah masukan dari beberapa fungsi matematika menjadi keluaran.
Contoh : Perkalian
Input : integer positif a, b
Output : a X b
Algoritma perkalian :
Contoh kasus : a = 365, b = 24 Metode 1 : 365 24 = 365 + 365 23
= 730 + 365 22 …..
= 8760 + 365 0 = 8760
Metode 2 : 3 6 5
24 1 4 6 0
7 3 0 8 7 6 0
Manakah algoritma yang lebih baik ?
Halaman. 2
Tipe Data
Tipe data yang digunakan dalam Turbo Pascal :
Tipe Sederhana
Tipe sederhana merupakan sebuah perubah hanya dimungkinkan untuk menyimpan sebuah nilai data.
Tipe sederhana terdapat 2 tipe : 1. Tipe Ordinal ; tipe data bernilai bulat, dibagi :
- Tipe integer : tipe data yang tidak mempunyai titik desimal. Tipe integer mempunyai 5 tipe, yaitu:
Tipe Data Jangkauan
Memori
Shortint -128 sd 127
1 Byte Byte
0 sd 255 1 Byte
Integer -32768 sd 32767
2 Byte Word
0 sd 65535 2 Byte
Longint -2147483638 sd 2147483647
4 Byte - Tipe boolean : tipe data yang mempunyai dua nilai, yaitu True dan False.
Operator yang digunakan : and, or atau not. - Tipe char : digunakan untuk mendefinisikan tipe data yang nilainya merupakan
himpunan karakter yang dikenal komputer seperti yang tersaji dalam tabel ASCII. Contoh : ‘A’ ‘B’ ‘C’ ‘1’ ‘ 2’ ‘3’
- Tipe terbilang enumerated : karena semua nilainya disebut satu persatu Contoh : Type Hari = minggu, senin, selasa, rabu, kamis, jumat, sabtu
Bulan = januari, febuari, maret, april, mei, juni, juli - Tipe subjangkauan sub range
Bentuk umum Type pengenal = konstanta1konstanta2
Pengenal = nama type yang akan dideklarasikan Konstanta1 = batas bawah nilai data
Konstanta2 = batas atas nilai data Contoh : Type nilai = 0..100
Tipe Data
Tipe Terstruktur
Tipe Sedarhana
Tipe String Tipe
Terstruktur
Tipe Ordinal Tipe Real
Integer, shortint, longint, boolean,
char, byte, word, subjangkauan,
terbilang Larik, Rekaman,
Himpunan, Berkas
Halaman. 3 Kemarau = april..oktober
2. Tipe Real ; tipe data bernilai pecahan Dalam Pascal terdapat 5 tipe :
Tipe Data Jangkauan
Digit Signifikan Memori
Real 2.9e-39 sd 1.7e38
11-12 6 Byte
Singla 1.5e-45 sd 3.4e38
7-8 4 Byte
Double 5.0e-324 sd 1.7e308
15-16 8 Byte
Extended 3.4e-4932 sd 1.1e4932
19-20 10 Byte
Comp -9.2e18 sd 9.2e18
19-20 8 Byte
Karakteristik tipe data ordinal : 1. Nilai dari tipe ordinal mempunyai nilai yang berurutan. Masing-masing nilai selain nilai
yang pertama mempunyai predecessor dan masing-masing nilai selain nilai yang terakhir mempunyai urutan berikutnya.
2. Fungsi standart ord dapat diterapkan pada sembarang tipe ordinal. 3. Fungsi standart pred digunakan untuk menghasilkan predecessor dari nilai datanya.
4. Fungsi standart succ digunakan untuk menghasilkan successor dari nilai datanya.
Tipe String
Data yang bertipe string adalah tipe data yang berisi sederetan karakter yang banyaknya karakter bisa berubah-ubah sesuai kebutuhan yaitu dari 1 sampai 255 karakter.
Bentuk umum : Type pengenal = string[panjang]
Contoh : Type Nama = string [25] Jurusan = string[40]
Tipe Terstruktur
Setiap perubah dapat menyimpan lebih dari sebuah data. Ada 4 buah tipe terstruktur, yaitu: 1. Tipe larik Array
Larik : tipe terstruktur yang mempunyai komponen dalam jumlah yang tetap dan setiap komponen mempunyai tipe data yang sama, posisi masing-masing komponen dalam
larik dinyatakan sebagai nomor index. Bentuk umum ;
Type Pengenal = array[tipe index] of type Contoh : Var
Nilai = array[1..10] of byte; Gaji = array[1...500] of integer;
2. Tipe rekaman
record Record : tipe data unutk menyimpan data berdasarkan objek.
Dalam record, dapat dikumpulkan item data yang masingmasing dapat mempunyai tipe data berbeda-beda. Masing-masing item data disebut dengan field. Dalam komputer
dikenal sebagai file berkas. Contoh : Type Langganan = Record
Kode :
integer;
Halaman. 4 Nama
: string[25];
Alamat :
string[30]; Kredit
: real;
End; Siswa = record
Nama :
string[25]; Alamat
: string[30];
Kelamin :
L,P; Kelas : 1..6;
Var Pelanggan : langganan;
Mahasiswa :
siswa; Type status = T,P,J;
uang = Record Nama_pegawai : string [25];
Nip :
string[10]; Bagian
: string[5];
Case status_peg : status of T
: gaji : integer; P
: gaji_per_jam,
jumlah_jam_lembur, Max_Jam_Minggu, Lembur : integer;
J : Upah_per_jam, Jumlah_jam_kerja, Jam_lembur
: integer; End;
Var gaji : uang; Jika akan membaca nama_pegawai dan NIP, maka statement yang kita gunakan adalah
: Readlngaji.nama_pegawai;
Readlngaji.NIP; Atau menggunakan statemen with
Bentuk umum : with nama_rekaman do Contoh : With gaji do
Begin Readlnnama_pegawai;
ReadlnNIP; Readln
Bagian; End;
3. Type himpunan set Meripakan suatu kumpulan dari objek yang mempunayi tipe datayang sama dan urutan
penulisannya tidak diperhatikan. Tipe-tipe obyek di dalam set disebut sebagi anggota atau elemen himpunan.
Bentuk umum: Type pengenal = set of tipe_data;
Contoh : Type Digit = set of 1..9;
Hurufbesar = set of ‘A’..’Z’ Sakit = pusing,mual,letih;
Penyakit = set of sakit; Var
Nilai : digit; Huruf = set of ‘A’..’Z’;
Halaman. 5 4. Tipe Berkas file
File: kumpulan sejumlah komponen yang bertipe data sama yang jjumlahnya tidak tertentu dan biasanya disimpan dalam suatu media penyimpanan luar.
Bentuk umum : Type Pengenal = file of pengenal1;
Pengenal : pengenal yang kan dinyatakan sebgai bertipe data berkas. Pengenal1 : tipe data komponen berkas
Contoh : Const jumlah = 5
Type nilai = record Namamhs
: string[25];
Nim :
integer; Nilaiujian
: array[1..jumlah] of integer; Rata_rata
: real;
End; Daf_nilai
= file of nilai; Var
Daftar_nilai = Daf_nilai;
Tipe Pointer mengacu alamat di memori.
Bentuk Umum Type Pengenal = simpul
Simpul = tipe Contoh : Type point = data
Data = record Nama_peg
: string[30];
Alamat :
string [30];
Pekerjaan : string [30]; End;
Var titik : point; Latihan A
Tentukan tipe data yang tepat untuk variable berikut 1. Buatlah variable dan tentukan typenya untuk varioabel yang menyatakan :
a. suhu ruangan b. nialai mahasiswa dalam bilangan bulat
c. nilai indeks mahasiswa d. nama mahasiswa
e. nim mahasiswa f. apakah seseorang memakai kacamata atau tidak
2. Buatlah larik yang menyimpan 100 nama mahasiswa 3. Buatlah larik yang menyimpan 100 nilai integer
4. Buatlah larik yang menyimpan 100 nilai index mahasiswa
Halaman. 6 5. Butalah record untuk menyimpan data mahasiswa berkaitan dengan nama, sesester, cuti,
nilai, indeks. 6. Buatlah larik yang berisi 50 data bertipe pada no. 5 diatas
7. Buatlah type data baru yang menyimpan 50 larik data bertipe myfriend dan variable n yang menyatakan jumlah larik yang terisi.
Procedure
Procedure merupakan sekumpulan aksi untuk tujuan tertentu. Contoh nilai a=2, niali b=5. Kita akan melakukan suatu prosedur yang mengakibatkan nilai keduanya saling dirtukar.
Procedure tukar var a : integer; var b : integer; {Keadaan awal : nilai a dan b telah diisi suatu bilangan}
{Keadaan akhir : nilai a dan b keduanya saling tertukar} Variable
temp : integer; Begin
temp := a; a := b;
b := temp; End;
Prosedur berikut ini untuk menampilkan niali dalam larik berdimensi 1 sebanyak 50 elemen.
Procedure tampil x : array [1..50] of integer; {Keadaan awal : nilai a dan b telah diisi suatu bilangan}
{Keadaan akhir : nilai a dan b keduanya saling tertukar} Variable
i : integer; {variable looping} Begin
For i := 1 to 50 do output x[i];
End;
Fungsi
Fungsi merupakan bagian program yang menerima masukan dan mengembalikan suatu nilai keluaran.
Ketika di SMA ada fungsi Fx = 2x + 3, sehingga F1 = 5. Disini x adalah parameter masukan, 1 merupakan nilai parameter masukan. Hasil dari fungsi iniadalah 5.
Function kuadrat x : integer : integer; {Fungsi yang menerima bilangan integer dan mengembalikan nilai integer yang merupakan
bilangan kuadrat dari nilai masukan } Variable
Begin Kuadrat := hasil; {return value}
End;
Function equal a : integer; b : integer : boolean; {Fungsi yang menerima 2 bilangan integer a dan b dan mengembalikan nilai true jika
keduanya sama, false juka tidak } Variable
Begin
Halaman. 7 equal := a=b; {return value}
End;
Latihan B 1. Nyatakan fungsi Fx =2x + 3 dengan notasi algoritmik.
2. Nyatakan fungsi Fa,b = 2a + b dengan notasi algoritmik, dengan a dan b adalah integer. 3. Buatlah function suhu yang menerima suatu suhu dan mengmebalikan kata “panas” jika
suhu datas 35 dan kata “dingin” jika suhu 35 atau kurang. 4. Buatlah function index yang menerima nilai ujian mahasiswa dan mengembalikan nilai
indeksnya yaitu A jika 80..100, B jika 60..79, C jika 40..59, D jika 20..39, E jika 0..19. 5. Buat prosedur menampilkan bilangan bulat genap antara 1 sd 200.
Kesimpulan
Struktur data adalah sebuah skema organisasi yang diterapkan pada data sehingga data dapat diinterprestasikan dan sehingga operasi-operasi spesifik dapat dilaksanakan
pada data tersebut
Latihan C
1. Masalah aritmatika polinom adalah membuat sekumpulan subrutin manipulasi terhadap polinom simbolis symbolic Polynomial. Terdapat empat operasi aritmatika polinom
dasar antara lain: a. Penambahan
b. Pengurangan c. Perkalian
d. Turunan Representasikan bilangan polinom dengan array dan buatlah subprogram yang melakukan
kelima operasi aritmatika di atas. 2. Bilangan kompleks berbentuk a + bi, dimana a dan b adalah bilangan nyata dan
i
2
= -1. Terdapat empat operasi aritmatika dasar untuk bilangan kompleks, yaitu: Penambahan : a+bi + c+di = a+c + b+di
Pengurangan : a+bi - c+di = a-c + b-di Perkalian : a+bi c+di = ac-bd + ad+bci
Pembagian : a+bi c+di = [ac+bd a
2
+b
2
] + [bc-adc
2
+d
2
]i Tulis program yang membaca dua bilangan kompleks dan simbol operasi yang perlu
dilakukan, kemudian lakukan operasi yang diminta. Gunakan record untuk merepresentasikan bilangan kompleks dan gunakan
prosedur untuk implementasi tiap operasi.
Halaman. 1
BAB II STACK TUMPUKAN
Stack merupakan metode dalam menyimpan atau mengambil data ke dan dari memori. Stack dapat dibratkan sebuah tumpukan barang dalam sebuah tempat yang hanya memiliki
satu pintu diatsnya memasukan dan mengambil barang hanya dapat dilakukan melalui pintu itu. Ukuran barang tersebut pas dengan pintunya, sehingga barang yang akan dikeluarkan
pertama kali adalah barang yang terkhir kali dumasukan. Contoh dalam kehidupan sehari-hari adalah tumpukan piring di sebuah restoran yang tumpukannya dapat ditambah pada bagian
paling atas dan jika mengambilnya pun dari bagian paling atas pula. Lihat gambar 1. Dengan demikian, kaidah stack adalah First In Last Out FILO atau Last In First Out LIFO.
Tumpukan uang koin Tumpukan kotak
Tumpukan Buku
Gambar 1. Macam-macam tumpukan
Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu : 1. Operasi
push yaitu operasi menambahkan elemen pada urutan terakhir paling atas. 2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan
menghapus elemen tersebut dari stack. Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6, maka data tersebut dapat
tersimpan dalam bentuk sebagai berikut : N
N-1 6
5 3 2
1 1 1
1 3 2
5 6
N-1 N
1 3 5 6 1 2 N-1
N
Gambar 2. Asumsi-asumsi penyimpanan stack
Top Top
Top
Halaman. 2 Contoh lain adalah ada sekumpulan perintah stack yaitu push5, push7, pop,
push3, pop. Jika dijalankan, maka yang akan terjadi adalah :
Top=0 Kosong
Top 5 Top 7
5 Top
5 Top
3 5
Top 5
Top=0 Kosong
Push5 Push7
Pop Push3
Pop Pop
Gambar 3. Proses operasi stack
Selain operasi dasar stack push dan stack, ada lagi operasi lain yang dapat terjadi dalam stack yaitu :
1. Proses deklarasi yaitu proses pendeklarasian stack. 2. Proses isempty yaitu proses pemeriksaan apakah stack dalam keadaan kosong.
3. Proses isfull yaitu proses pemeriksaan apakah stack telah penuh. 4. Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan pemberian
nilai untuk top. Representasi stack dalam pemrograman, dapat dilakukan dengan 2 cara yaitu :
1. Representasi stack dengan array 2. Representasi stack dengan single linked list
Sebagai contoh representasi kedua cara tersebut dengan operasi yang dilakukan adalah push1, push2, pop, push5, push8, pos. Untuk lebih detail, perhatikan gambar di
bawah ini : Representasi stack dengan menggunakan array dengan maksimal data 5 adalah
? ?
? ?
?
Top=0 Maks=5
? ?
? ?
Top 1 Top=1
Maks=5 ?
? ?
Top 2 1
Top=2 Maks=5
? ?
? 2
Top 1 Top=3
Maks=5 ?
? ?
Top 5 1
Top=2 Maks=5
? ?
Top 8 5
1 Top=3
Maks=5 ?
? 8
Top 5 1
Top=2 Maks=5
Kondisi awal
Push1 Push2 Pop Push5 Push8 Pop
Elemen berisi ? berarti nilai elemen tidak diketahui.
Gambar 4. Representasi stack dengan menggunakan array
Operasi-operasi stack secara lengkap adalah sebagai berikut :
1. Pendeklarasian stack
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Karena stack dapat direpresentasikan dalam 2 cara, maka pendeklarasian stack pun ada
2 yaitu pendeklarasian stack menggunakan array dan single linked list, hanya pada bagain ini hanya dibahas stack menggunakan array :
Halaman. 3
Pendeklarasian stack yang menggunakan array.
Suatu stack memiliki beberapa bagian yaitu
top yang menunjuk posisi data terakhir top elemen yang berisi data yang ada dalam stack. Bagian ini lah yang berbentuk
array.
maks_elemen yaitu variable yang menunjuk maksimal banyaknya elemen dalam
stack. Dalam bahasa Pascal, pendeklarasiannya adalah :
Const max = 100; Type tstack = record
Top:integer; maks_elemen:integer;
elemen:array[1..max]of elemen; var stack: tstack;
2. Inisialisasi
Inisialisasi stack adalah proses pembuatan suatu stack kosong. Adapun langkah-langkah proses tersebut berdasarkan jenis penyimpanannya adalah :
Inisialisasi stack yang menggunakan array.
Proses inisialisasi untuk stack yang menggunakan array adalah dengan mengisi nilai field top dengan 0 nol jika elemen pertama diawali dengan nomor 1.
Implementasinya dalam bahasa Pascal adalah :
procedure inisialisasivar stack :tstack; begin
stack.top:=0; stack.maks_elemen:=max;
end;
3. Operasi IsEmpty
Operasi ini digunakan untuk memeriksa apakah stack dalam keadaan kosong. Operasi ini penting dilakukan dalam proses pop. Ketika suatu stack dalam keadaan kosong, maka
proses pop tidak bisa dilakukan. Adapun langkah-langkah operasi ini adalah :
Operasi IsEmpty pada stack yang menggunakan array.
Operasi ini dilakukan hanya dengan memeriksa field top. Jika top bernilai 0 untuk elemen yang dimulai dengan index 1, maka berarti stack dalam keadaan empty
kosong yang akan me-return-kan true 1 dan jika tidak berarti stack mempunyai isi dan me-return-kan nilai false 0
Implementasi dalam bahasa Pascal adalah :
function isemptystack : tstack: boolean; begin
if stack.top=0 then isempty:= true
else isempty:= false;
end;
Halaman. 4 Cara penggunaannya adalah :
{Penggunaan isempty dalam statement if} if isemptystack ...
4. Operasi IsFull
Operasi ini berguna untuk memeriksa keadaan stack apakah sudah penuh atau belum. Operasi ini akan menghasilkan nilai true 1 jika stack telah penuh dan akan menghasilkan
nilai false 0 jika stack masih bisa ditambah. Langkah-langkah untuk operasi ini adalah :
Operasi IsFull pada stack yang menggunakan array.
Operasi ini akan memberikan nilai true 1 jika field top sama dengan field maks_elemen untuk array yang elemennya dimulai dari posisi 1.
Implementasinya dalam bahasa Pascal adalah :
function isfullstack : tstack ; begin
if stack.top=stack.maks_elemen then isfull:=true
else
isfull:=false; end;
Cara pemanggilannya adalah :
{penggunaan isfull dalam statement if} if isfullstack … { jika stack tidak penuh}
5. Operasi Push Operasi push adalah operasi dasar dari stack. Operasi ini berguna untuk menambah
suatu elemen data baru pada stack dan disimpan pada posisi top yang akan mengakibatkan posisi top akan berubah. Langkah operasi ini adalah :
a. Operasi push pada stack yang menggunakan array. Langkah operasi push dalam array adalah dengan :
Periksa apakah stack penuh isfull. Jika bernilai false0 tidak penuh maka proses push dilaksanakan dan jika pemeriksaan ini bernilai true1 stack penuh, maka
proses push digagalkan. Proses push-nya sendiri adalah dengan menambah field top dengan 1, kemudian
elemen pada posisi top diisi dengan elemen data baru. Untuk lebih jelas, perhatikan lagi gambar 4 mengenai representasi stack dengan array..
Implementasinya dalam bahasa Pascal adalah :
Procedure pushvar stack: tstack; baru:integer; begin
if isfullstack then begin
stack.top:= stack.top +1; stack.elemen[stack.top]:=baru;
end else
writeln‘Stack Full. Push Gagal.’; end;
Halaman. 5 Cara penggunaannya adalah :
pushstack,5; {push 5 ke dalam stack} 6. Operasi
Pop
Operasi pop adalah salah satu operasi paling dasar dari stack. Operasi ini berguna untuk mengambil elemen terakhir top dan kemudian menghapus elemen tersebut sehingga
posisi top akan berpindah. Operasi ini biasanya dibuat dalam bentuk function yang me- return-kan nilai sesuai data yang ada di top.
Operasi pop pada stack yang menggunakan array.
Langkah operasi pop pada stack yang menggunakan array adalah terlebih dahulu memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka data
diambil pada posisi yang ditunjuk oleh posisi top, kemudian simpan dalam variable
baru dengan nama data, kemudian posisi top0. Untuk lebih jelas perhatikan kembali
gambar 4 . Implementasi operasi ini dalam bahasa Pascal adalah :
fuction popvar stack: tstack: integer; begin
ifisemptystack then begin
pop:=stack.elemen[stack.top]; stack.top:= stack.top -1;
end else
pop:= 0; end;
Cara pemanggilannya adalah :
Var data:integer; begin
data=popstack; end.
4. Aplikasi Stack 1. Konversi Bilangan Desimal ke Bilangan Biner
Contoh nyata implementasi stack adalah proses pengkonversian dari bilangan decimal basis 10 ke bilangan biner basis 2.
Algoritmanya adalah :
1. Ambil sisa pembagian variable bilangan dengan angka 2, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack.
2. Bagi variable bilangan dengan angka 2. 3. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0
maka lanjutkan ke langkah 4, 4. Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi tidak
kosong.
5. ambil pop nilai yang ada di stack simpan di variable data.
6. Tulis isi variable data ke layar .
Halaman. 6 7. Selesai.
Untuk lebih jelasnya perhatikan operasi konversi dari decimal ke biner dengan variable bilangan yang akan dikonversi adalah 25.
Operasi Representasi Array
Kondisi Awal Operasi Stack :
inisialisasistack ?
10 ?
9 ?
… ?
… ?
4 ?
3 ?
2 ?
1 Top=0 Maks_Elemen=10
Bilangan = 25. Pembagian : 25 2
Sisa = 1 Bilangan = 12
Opeasi Stack : Pushstack,1
? 10
? 9
? …
? …
? 4
? 3
? 2
Top 1 1
Top=1 Maks_Elemen=10 Bilangan = 12.
Pembagian : 12 2 Sisa = 0
Bilangan = 6 Operasi Stack :
Pushstack,0 ?
10 ?
9 ?
… ?
… ?
4 ?
3 Top 0
2 1
1 Top=2 Maks_Elemen=10
Bilangan = 6 Pembagian : 6 2
Sisa : 0 Bilangan : 3
Opeasi Stack : Pushstack,0
? 10
? 9
? …
? …
? 4
Top 0 3
2 1
1 Top=3 Maks_Elemen=10
Bilangan = 3 Pembagian : 3 2
Sisa : 1 Bilangan : 1
Operasi Stack : Pushstack,1
? 10
? 9
? …
? …
Top 1 4
3 2
Halaman. 7 1
1 Top=4 Maks_Elemen=10
Bilangan = 1 Pembagian : 1 2
Sisa : 1 Bilangan : 0
Operasi Stack : Pushstack,1
? 10
? 9
? …
Top 1 … 1
4 3
2 1
1 Top=5
Maks_Elemen=10
Operasi pembagian variable bilangan dengan angka 2 berakhir di posisi ini karena nilai variable bilangan sudah mencapai 0. Langkah selanjutnya adalah proses menampilkan data biner dari
stack, sampai stack habis. Periksa :
Stack Kosong ? Tidak Opeasi Stack :
Data=popstack; Menghasilkan Data=1
Tampilkan variable Data di layar
Di layar : 1
? 10
? 9
? …
1 …
Top 1 4
3 2
1 1
Top=4 Maks_Elemen=10 Periksa :
Stack Kosong ? Tidak Opeasi Stack :
Data=popstack; Menghasilkan Data=1
Tampilkan variable Data di layar
Di layar : 1 1 ?
10 ?
9 ?
… 1
… 1
4 Top 0
3 2
1 1
Top=3 Maks_Elemen=10 Periksa :
Stack Kosong ? Tidak Opeasi Stack :
Data=popstack; Menghasilkan Data=0
Tampilkan variable Data di layar
Di layar : 1 1 0 ?
10 ?
9 ?
… 1
… 1
4 3
Top 0 2
1 1
Top=2 Maks_Elemen=10 Periksa :
Stack Kosong ? Tidak Opeasi Stack :
Data=popstack; ?
10 ?
9 ?
… 1
… 1
4
Halaman. 8
Menghasilkan Data=0 Tampilkan variable Data di
layar Di layar : 1 1 0 0
3 2
Top 1 1
Top=1 Maks_Elemen=10
Periksa : Stack Kosong ? Tidak
Opeasi Stack : Data=popstack;
Menghasilkan Data=1 Tampilkan variable Data di
layar Di layar : 1 1 0 0 1
? 10
? 9
? …
1 …
1 4
3 2
1 1
Top=0 Maks_Elemen=10 Periksa :
Stack Kosong ? Ya Proses pop stack selesai karena stack telah kosong. Itu berarti
semua bilangan biner yang disimpan dalam stack telah ditampilkan ke layar.
Pembuktian : 1 2
4
+ 1 2
3
+ 0 2
2
+ 0 2
1
+ 1 2 = 16 + 8 + 1 = 25.
2. Notasi Polish Polish Notation
Dalam operasi aritmatika, dikenal 3 jenis notasi, yaitu : 1. Notasi Infix menempatkan operator di antara 2 operand
Contoh : A+B atau C-D atau E F atau G H 2. Notasi Prefix menempatkan operator di depan sebelum ke-2 operandnya
Contoh : +AB atau –CD atau EF atau GH 3. Notasi Postfix menempatkan operator di belakangsetelah operandnya
Contoh : AB+ atau CD- atau EF atau GH Komputer umumnya hanya mengenal ekspresi matematika yang ditulis dalam notasi
postfix. Ekspresi matematika yang ditulis dalam notasi infix agar dikenal oleh computer harus diubah dengan memperhatikan :
1. Mengubah notasi infix menjadi postfix, kemudian menghitungnya 2. Menggunakan stack sebagai penampung sementara operator dan operandnya.
Algoritma Infix ke Postfix
Dimisalkan Q adalah ekspresi matematika yang ditulis dalam notasi infix dan P adalah penampung ekspresi matematika dalam notasi postfix, maka algoritmanya adalah :
a. Push tanda
““ ke stack dan tambahkan tanda “” di sentinel di Q.
b. Scan Q dari kiri ke kanan, kemudian ulangi langkah c s.d f untuk setiap elemen Q sampai
stack Q kosong.
c. Jika yang discan adalah operand, maka tambahkan ke P
d. Jika yang discan adalah ““ maka push ke stack e. Jika yang discan adalah “” maka pop isi stack sampai ditemukan tanda ““, kemudian
tambahkan ke P sedangkan tanda ““ tidak disertakanke P.
f. Jika yang discan adalah operator, maka :
Halaman. 9
Jika elemen paling atas dari stack adalah operator yang mempunyai tingatan sama atau
lebih tinggi dari operator yang discan, maka pop operator tersebut dan tambahkan ke P.
Push operator tersebut ke stack. g. Keluar
Contoh kasus : Q : A + B C - D E F G H
Tambahkan “” ke stack dan tambahkan tanda “” ke sentinel Q sehingga Q menjadi
Q : A + B C - D E F G H Dari Q, terdapat 20 simbol yaitu :
Q : A + B C - D E F G H
No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Urutan operasinya adalah :
No Simbol Stack
Ekspresi P
1 A
A
2 + +
A
3 +
A
4 B +
AB
5 +
AB
6 C +
ABC
7 - +-
ABC
8 +-
ABC
9 D +-
ABCD
10 +-
ABCD
11 E +-
ABCDE
12 +-
ABCDE
13 F +-
ABCDEF
14 +-
ABCDEF
15 +-
ABCDEF
16 G +-
ABCDEFG
17 +
ABCDEFG-
18 +
ABCDEFG-
19 H +
ABCDEFG-H
20 ABCDEFG-H+
Dari proses di atas didapatkan bahwa postfixnya adalah ABCDEFG-H+
Menghitung Ekspresi Matematika yang disusun dalam Notasi Postfix
Diasumsikan P adalah ekspresi matematika yang ditulis dalam notasi postfix dan variable
value sebagai penampung hasil akhir.
Algoritmanya adalah : a. Tambahkan tanda “” pada sentinel di P
b. Scan P dari kiri ke kanan, ulangi langkah c dan d untuk setiap elemen P sampai
ditemukan sentinel. c. Jika yang discan adalah operand, maka push ke stack.
d. Jika yang discan adalah operator sebut opr1, maka Pop 1 buah elemen teratas dari stack, simpan dalam variable var1.
Pop 1 buah elemen teratas dari stack, simpan dalam variable var2.
Hitung variable
var2 opr1 var1, simpan hasil di variable hitung.
Push variable
hitung ke stack. e. Pop isi stack dan simpan di variable value.
Halaman. 10 f. Keluar.
Contoh : P : 5, 2, 6, +, , 12, 4, , - Tambahkan tanda “”pada sentinel P sehingga
P : 5, 2, 6, +, , 12, 4, , -,
Dari P, didapatkan 10 simbol yaitu :
P : 5 2 6 + 12 4
-
No 1 2 3 4 5 6 7 8
9 10
Urutan operasinya adalah :
No Simbol Stack
Operasi Perhitungan
1 5 5
2 2 5,
2
3 6
5, 2, 6
4 +
5, 8 var1=6,var2=2,hitung=2 + 6 =8
5 40
var1=8,var2=5,hitung=5 8 =40
6 12 40,
12
7 4
40, 12, 4
8 40, 3
var1=4,var2=12,hitung=12 4 = 3
9 - 37
Var1=3,var2=40,hitung=40 – 3 = 37
10 Perulangan selesai karena telah mencapai sentinel dan data dalam stack
adalah 37 hasil akhir.
Jadi hasil operasi tersebut adalah : 37
Halaman. 1
BAB III QUEUE ANTRIAN
3.1 Pengertian Antrian
Antrian Queue merupakan kumpulan data yang mana penambahan elemen hanya bias dilakukan pada suatu ujung yaitu rear tail belakang, dan pengha[usan dilakukan melalui
ujung yang lainnya yaitu front head depan. Antrian disebut FIFO First In First Out yaitu elemen yang lebih dulu disisipkan merupakan elemen yang akan lebih dulu diambil.
Operasi-operasi dasar dari sebuah queue adalah : 1. Enqueue : proses penambahan elemen di posisi belakang
2. Dequeue : proses pengambilan elemen di posisi depan Selain operasi dasar di atas, ada pula operasi-operasi lain yang dapat dilakukan terhadap
sebuah queue yaitu : 1. Operasi pemeriksaan queue kosong fungsi kosong
2. Operasi pemeriksaan queue penuh fungsi penuh. 3. Operasi inisialisasi queue fungsi inisialisasi
3.2 Karakteristik Antrian
Karakteristik antrian sebagai berikut : 1. Elemen antrian yaitu item-item data yang terdapat di elemen antrian
2. Front elemen terdepan dari antrian 3. Tail elemen terakhir dari antrian
4. Count jumlah elemen pada antrian 5. Status antrian apakah penuh atau kosong.
- Penuh, jika elemen pada antrian mencapai kapasitas maximum antrian. Pada
kondisi ini, tidak mungkin dilakukan panambahan ke antrian. -
Kosong, jika tidak ada elemen pada antrian. Pada kondisi ini, tidak mungkin dilakukan pengambilan elemen dari antrian.
3.3 Implementasi Antrian 3.3.1 Dengan menggunakan Array Statis
Keluar A B
C D
E F
Masuk
a Jika ada elemen baru yang akan masuk pada gambar a, maka ia akan diletakkan disebelah
kanan F gambar b. Jika ada elemen yang akan dihapus, maka A akan dihapus lebih dulu gambar c.
Depan Belakang
Halaman. 2
Keluar A B
C D
E F
G H
Masuk
b
Keluar C
D E
F G
H Masuk
c Contoh deklarasi antrian :
Const max = 5 Var antrian : array [1..max] of char;
Belakang, depan : integer; x : char;
Dengan menggunakan array, maka overflow dapat terjadi jika antrian telah penuh , sementara masih ingin menambah elemen ke dalam antrina. Dengan mengabaikan adanya
overflow, maka penambahan elemen baru yang dinyatakan oleh var x dapat diimplementasikan dengan statemen :
belakang := belakang + 1; antrian [belakang] := x;
Operasi penghapusan bias diimplementasikan dengan ;
x := antrian [depan]; depan := depan + 1;
5 5
5 5
E 4
4 D 4 D 4 D 3
3 C 3 C 3 C 2
2 B
2 2
1 1
A 1
1 a
b c d Pada gambar a posisi depan = 1 dan belakang = 0. Pada gambar b keadaan setelah
penambahan empat buah elemen dimana posisi depan = 1 dan belakang = 4. Pada gambar c keadaan setelah penghapusan dua buah elemen dimana posisi depan = 3 dan belakang =
4. Pada gambar d keadaan setelah penambahan dua buah elemen diamana posisi depan = 3 dan belakang = 5.
Jika akan ditambah elemen baru, maka nilai belakang harus ditambah satu menjadi 6. Sedangkan larik antrian tersebut hanya terdiri dari 6 elemen sehingga tidak bias ditambah
lagi meskipun sebenarnya larik tersebut masih kosong di dua tempat. Oleh karena itu dilakukan dengan metoda penggeseran dimana jika ada elemen yang dihapus, maka semua
elemen lain digeser sehingga antrian selalu dimulai dari depan = 1.
Depan Belakang
Depan Belakang
Halaman. 3
x := antrian [1]; for i := 1 to belakang-1 do
begin antrian [ i] := antrian [i +1];
end;
5 5
5 5
4 4
D 4
4 F
3 3
C 3
3 E
2 2 B 2 D 2 D
1 1 A 1 C 1 C
a b c d
Pada gambar a posisi depan = 1 dan belakang = 0. Pada gambar b keadaan setelah penambahan empat buah elemen dimana posisi depan = 1 dan belakang = 4. Pada gambar
c keadaan setelah penghapusan dua buah elemen dimana posisi depan = 1 dan belakang = 2. Pada gambar d keadaan setelah penambahan dua buah elemen dimana posisi depan =
1 dan belakang = 4. Cara penggeseran elemen tidak efisien untuk larik berukuran besar. Oleh karena itu
dilakukan dengan larik yang menyimpan elemen antrian sebagai larik memutar circular.
Queue Dengan Circular Array
Jika menggunakan array untuk queue seperti di atas, maka ketika ada proses pengambilan dequeue ada proses pergeseran data. Proses pergeseran data ini pasti memerlukan waktu
apalagi jika elemen queue-nya banyak. Oleh karena itu solusi agar proses pergeseran dihilangkan adalah dengan metode circular array.
Queue dengan circular array dapat dibayangkan sebagai berikut : Depan=1
Belakang=4 5 6 7 9
Atau agar lebih jelas, array di atas dapat dibayangkan ke dalam bentuk seperti lingkaran di bawah ini.
7 9
5 6
depan = 1 belakang = 4
1
2 3
4 5
Aturan-aturan dalam queue yang menggunakan circular array adalah : 1. Proses penghapusan dilakukan dengan cara nilai depan front ditambah 1 :
depan=depan + 1.
Halaman. 4 2. Proses penambahan elemen sama dengan linear array yaitu nilai belakang ditambah 1 :
belakang=belakang + 1. 3. Jika depan = maks dan ada elemen yang akan dihapus, maka nilai depan = 1.
4. Jika belakang = maks dan depan tidak 1 maka jika ada elemen yang akan ditambahkan, nilai belakang=1
5. Jika hanya tinggal 1 elemen di queue depan = belakang, dan akan dihapus maka depan diisi 0 dan belakang diisi dengan 0 queue kosong.
Front dan Tail akan bergerak maju, jika ; 1. Untuk
penambahan. 2. Tail sudah mencapai elemen terakhir array akan memakai elemen pertama array
yang telah dihapus. 3. Untuk
pngahapusan. 4. Front telah mencapai elemen terakhir array, maka akan menuju elemen pertama jika
antrian masih berisi elemen. Keunggulan representasi circular adalah seluruh kapasitas antrian bisa terpakai seleruhnya.
Berdasarkan ilustrasi sebelumnya dapat disusun prosedur untuk menambah dan menghapus elemen antrian sebagai berikut ini :
Const max_elemen = 5; Type antri = array [1..max_elemen] of char;
Var antrian : antri; depan, belakang : integer;
Nilai awal untuk depan dan belakang masing-masing 0.
Depan := 0; Belakang := 0;
Proses enqueue data hanya bisa dilakukan jika queue tidak kosong. Ada beberapa hal yang harus diperhatikan ketika akan melakukan enqueue pada circular array, diantaranya adalah :
- Kondisi ketika queue masih kosong. Jika ini terjadi, maka posisi depan dan belakang bernilai 0.
- Ketika ketika nilai belakang sama dengan maks_queue, maka posisi belakang adalah 0. Ini terjadi ketika posisi depan lebih besar dari 0 pernah ada dequeue.
- Ketika nilai belakang masih lebih kecil dari maks_queue maka posisi belakang ditambah 1 : belakang=belakang+1;
Dari ketentuan-ketentuan di atas dapat diimplementasikan operasi Enqueue-nya dalam bahasa Pascal adalah sebagai berikut :
procedure Enqueue var q : antri; x : char; begin
if belakang = max_elemen then belakang := 1 else belakang := belakang + 1;
if depan = belakang then
Halaman. 5
begin write ‘ antrian sudah penuh’;
belakang := belakang – 1; if belakang = 0 then
belakang :=max_elemen; end
else q[belakang] := x; end;
Sedangkan proses dequeue hanya bisa dilakukan jika queue dalam keadaan tidak kosong. Ada beberapa kondisi yang harus diperhatikan ketika dequeue elemen queue yaitu :
- Kondisi ketika posisi depan sama dengan posisi belakang queue hanya memiliki 1 elemen maka nilai depan dan belakang diisi dengan 0 queue kosong.
- Jika posisi depan sama dengan posisi maks_queue maka posisi depan berpindah ke 1. - Selain itu, posisi depan ditambah dengan 1 : depan=depan+1
Impelementasinya dalam bahasa Pascal adalah :
function dequeue var q : antri : char; begin
if depan=0 and 9belakang=0 then then write ‘ antrian kososng’;
else begin
dequeue := q [depan]; if depan = max_elemen then
depan := 1 else
depan := depan + 1; end;
end;
Halaman. 1
BAB IV POHON
Definisi Pohon “Struktur pohon merupakan kumpulan elemen yang salah satu elemennya disebut akar
dan sisa elemennya terpecah menjadi sejumlah himpunan yang saling tidak berhubungan satu sama lainnya yang disebut cabang “.
- Simpul node vertex adalah elemen pohon yang berisi informasidata dan penunjuk
percabangan. Pada gambar 1 pohon dengan 15 simpul. -
Tingkat level suatu simpul ditentukan dengan pertama kali menentukan akar sebagai
bertingkat 1. Jika suatu simpul dinyatakan sebagai tingkat N, maka simpul-simpul yang merupakan anaknya dikatakan berada dalam tingkat N + 1. Ada pula yang menyatakan
bahwa akar berada pada tingkat 0 dan simpul-simpul lainnya dinyatakan bertingkat 1 lebih tinggi .
-
Derajat degree suatu simpul dinyatakan sebagai banyaknya generasi atau turunan
dari simpul tersebut. Pada gambar 1 simpul A mempunyai derajad 2, B mempunyai
derajad 2, C mempunyai derajad 3. Simpul berderajat 0 disebut dengan daun leaf.
Simpul-simpul F, H, I, J, K, L, N, O berderajad 0, disebut dengan daun. Daun juga sering disebut dengan simpul luar external node , sehingga simpul lain kecuali akar juga sering
disebut dengan simpul dalam internal node.
- Tinggi height atau kedalaman depth dari suatu pohon adalah tingkat maksimum dari
simpul dalam pohon tersebut dikurangi dengan 1. Pohon gambar 1 mempunyai tinggi atau kedalaman 4.
-
Ancestor suatu simpul adalah semua simpul yang terletak dalam satu jalur dengan
dengan simpul tersebut dari akar sampai simpul yang ditinjau. Contoh ancestor dari simpul L adalah A, C, G.
A B
C
F H
G L
M
N O
E
J K
D
I Tingkat 1
Tingkat 2
Tingkat 3 Tingkat 4
Tingkat 5
Gambar 1
Halaman. 2 - Predecessor adalah simpul yang berada di atas simpul yang ditinjau. Contoh :
Predecessor D adalah B. - Successor adalah simpul yang berada di bawah simpul yang ditinjau. Contoh : Successor
D adalah I. - Descendant adalah seluruh simpul yang terletak sesudah simpul tertentu dan terletak
pada jalur yang sama. Contoh : Descendant E adalah J dan K. - Sibling adalah simpul-simpul yang memiliki parent yang sama dengan simpul yang
ditinjau. Contoh : Sibling J adalah K - Parent adalah simpul yang berada satu level di atas simpul yang ditinjau. Contoh : Parent
J adalah E -
Hutan forest adalah kumpulan sejumlah pohon yang tidak saling berhubungan. Pada gambar 1 jika simpul A dihapus maka akan diperoleh sebuah hutan.
Struktur data pada bentuk struktur pohon dalam hubungan logiknya atau relasi antara simpul satu dengan simpul lainnya dianalogikan dengan relasi dalam sebuah keluarga atau
dalam sebuah garis keturunan.
B,C dan D bersaudara. E,F dan G bersaudara. H dan I bersaudara. A merupakan orang tua parent dari B,C dan D. B merupakan orang tua dari E,F dan G. D merupakan orang tua dari
H dan I. Pohon Biner
Pohon biner binary tree bisa didefinisikan sebagai suatu kumpulan simpul yang mungkin kosong atau mempunyai akar dan subpohon yang saling terpisah yang disebut
dengan subpohon kiri left subtree dan sub pohon kanan right tree Karakteristik pohon biner yaitu,
- Setiap simpul paling banyak hanya mempunyai dua buah anak. - Derajat tertinggi dari simpul dalam pohon biner adalah dua.
- Banyaknya simpul maksimum pada tingkat N = 2
n-1
. Pohonn biner lengkap tingkat 4 mempunyai daun = 8 dan banyaknya simpul yan buakan daun termasuk akar =7.
- Dalam pohon biner dimungkinkan tidak mempunyai simpul. Pohon biner lengkap complete binary tree bertingkat N, adalah sembarang pohon
biner yang semua daunnya terdapat pada tingkat N dan semua simpul yang bertingkat lebih kecil dari N selalu mempunyai cabang kiri dan kanan. Gambar dibawah ini merupakan pohon
biner tingkat 4 tetapi bukan pohon biner lengkap tingkat 5. A
B E
G F
D I
H C
Halaman. 3 Sebuah pohon yang bukan pohon biner bisa diubah menjadi sebuah pohon biner , caranya :
- Setiap simpul pohon biner mengandung field-field informasi, pada cabang kiri dan kanan. - Cabang kiri merupakan anak paling kiri dari simpul pada pohon yang bukan biner.
- Sedangkan cabang kanannya merupakan saudara dari simpul pada pohon yang bukan biner.
Membuat Pohon Biner
Algoritma : Simpul yang berisi informasi yang nilainya “lebih besar” dari simpul parent akan diletakkan sebagai cabang kanan, jika “lebih kecil” akan ditempatkan sebagai
cabang kiri. KIRI KANAN. Contoh : Simpan data H A K C BJ L
Karakter pertama ‘H’ dilatakkan sebagai akar. Karakter ’K’ karena lebih besar dari ‘H’ akan menempati cabang kanan. Karakter ’A’ karena lebih kecil dari ‘H’ akan
menempati cabang kiri dari ‘H’. Kemudian, karena karakter ‘C’ lebih kecil dari ‘H’ dan labih besar dari ‘A’, maka ia diletakkan sebagai cabang kanan dari ‘A’. Proses
ini berlangsung sama sampai semua masukan diproses. Tingkat 4
A B
C F
H E
L M
D Tingkat 1
Tingkat 2 Tingkat 3
Tingkat 5 P
Q N
O J
K
R S
T U
H A
K J
L C
B
Halaman. 4
Simpan data D B F A C E G
Traversal Pohon Biner
Traversal pohon biner adalah : Proses mendatangi setiap simpul dari pohon secara sistematik masing-masing satu kali,
dimana pada setiap simpul yang dikunjungi dilakukan suatu proses pengolahan data Ada 3 cara traversal :
a. Traversal postorder
LRS Proses pertama kali bergerak kearah subpohon bagian kiri, selanjutnya subpohon
sebelah kanan dan terakhir simpul simpul root b. Traversal
inorder LSR
Proses dimulai dari subpohon sebelah kiri selanjutnya simpul root dan selanjutnya subpohon sebelah kanan.
c. Traversal preorder SLR
Proses dimulai dari simpul root kearah subpohon kiri, selanjutnya bergerak ke subpohon kanan SLR.
S = proses mengunjungi simpul. L = bergerak kearah subpohon bagian kiri.
R = bergerak kearah subpohon bagian kanan. Traversal lain traversal level order
Kunjungan simpul dimulai dari simpul bertingkat satu, hingga simpul bertingkat n. Contoh :
D B
F E
G C
A
A B
C
F E
D J
I
K
Halaman. 5 Preorder
: A B D E C F I K J Postorder
: D E B K I J F C A Inorder
: D B E A K I F J C Level order
: A B C D E F I J K Perbedaan proses
Preorder : proses dilakukan sebelum penelusuran dua bagian pohon. Inorder : proses dilakukan diantara penelusuran dua bagian pohon.
Postorder : proses dilakukan setelah penelusuran dua bagian pohon.
Expression Tree
- Simpul daun : operand. - Simpul cabang : operator.
Pandang ekspresi matematik berikut : A B + C D E
Pohon biner untuk ungkapan aritmetik :
Preorder atau notasi prefix : + A B C D E
Postorder atau notasi postfix : A B C + D E
Inorder atau notasi infix : A B + C D E
Level order : + C D E A B
+
B A
C E
D
Halaman. 1
BAB V SORTING PENGURUTAN
INTERNAL
Sorting Internal : Proses pengurutan sekelompok data yang berada didalam memori utama komputer.
Sorting External : Proses pengurutan sekelompok data yang sebagian saja berada didalam memori
yang ada atau yang dialokasikan untuk proses tidak dapat menampung semua data sekligus.
Sorting Tabel Alamat Address Table Sorting : Pengurutan tidak dilakukan secara fisik akan tetapi
dengan cara membuat tabel alamat. Sebagai conoth hasil proses :
Kunci Informasi
satelit Tabel
alamat 1 71
... 2 23
... 3 5
... 4 47
...
Untuk mempercepat prose, seringkali data kunci diletakkan juga pada tabel alamat, sedangkan informasi satelit tetap terpisah. Proses pengurutannya disebut Sorting Kunci Key Sorting.
Sorting List List Sorting : Pengurutan tidak dilakuakn secra fisik, akan tetapi dengan mengubah isi
pointer. Sebagai conoth hasil proses :
6.1 Bubble Sort Pengurutan Gelembung
Pada bubble sort setiap iterasi diperiksa dua data yang bersebelahan. Bila urutan tidak dipenuhi ke dua data tersebut saling bertukar tempat. Pada akhir tiap iterasi maka data terkecil yang ada pada
sisa tabel telah bergeser ke bagian sebelah kiri bagian atas dari tabel. Untuk mendapatkan larik yang terurut menaik, algoritma pengurutan gelembung dapat ditulis
sacara global sbb: Untuk setiap langkah pass ke-I=1,2,…,N-1, lakukan :
Metode 1 untuk pengurutan ascending :
Mulai dari elemen J=N,N-1,…,I+1,lakukan : 1. Bandingkan L[J] dengan L[J-1].
2. Tukarkan L[J] dengan L[J-1] jika L[J] L[J-1] Rincian setip pass adalah sbb:
Pass 1 : Mulai dari elemen J=N,N-1,…,2, bandingkan L[J] dengan L[J-1]. Jika L[J] L[J-1],
tukarkan L[J] dengan L[J-1]. Pada akhir langkah 1, elemen L[1] berisi harga minimum
pertama. Kunci
Informasi satelit
Pointer Head
1 71 ...
2 23 ...
3 5 ...
4 47 ...
Halaman. 2
Pass 2 : Mulai dari elemen J=N,N-1,…,3, bandingkan L[J] dengan L[J-1]. Jika L[J] L[J-1],
tukarkan L[J] dengan L[J-1]. Pada akhir langkah 2, elemen L[2] berisi harga minimum
kedua dan larik L[1..2] terurut, sedangkan L[3..N] belum terurut. Pass 3 : Mulai dari elemen J=N,N-1,…,4, bandingkan L[J] dengan L[J-1]. Jika L[J] L[J-1],
tukarkan L[J] dengan L[J-1]. ]. Pada akhir langkah 3, elemen L[3] berisi harga minimum
ketiga dan larik L[1..3] terurut, sedangkan L[4..N] belum terurut. Pass N-1 : Mulai dari elemen K=N, bandingkan L[J] dengan L[J-1]. Jika L[J] L[J-1], tukarkan
L[J] dengan L[J-1]. Pada akhir langkah N-1, elemen L[N-1] berisi nilai minimum ke N-1 danlarik L[1..N-1] terurut
menaikelemen yang tersisa adalah L[N] tidak perlu diurut karena hanya satu-satunya.
Contoh : 44 55 12 42 94 18 06 67
Pass 1 06 44 55 12
42 94
18 67
1 2 3 4 5 6 7 8
Pass 2 06 12 44 55 18 42 94 67
1 2 3 4 5 6 7 8
Pass 3 06 12 18 44
55 42
67 94
1 2 3 4 5 6 7 8
Pass 4 06 12 18 42 44 55 67 94
1 2 3 4 5 6 7 8
Pass 5 06 12 18 42 44 55 67 94
1 2 3 4 5 6 7 8
Pass 6 06 12 18 42
44 55
67 94
1 2 3 4 5 6 7 8
Pass 7 06 12 18 42 44 55 67 94
1 2 3 4 5 6 7 8
Procedure urutgelembung1_ascendingvar L:larik;N:integer; Var I
: integer; {pencacah untuk jumlah langkah} J
: integer; {pencacah untuk pengapungan pada setiap langkah} Temp : integer; {peubah bantu pertukaran}
Begin For I := 1 to n-1 do
For J := n downto I+1 do
If L[J] L[J-1] then {pertukaran L[J] dengan L[J-1];
Temp := L[J]; L[J] := L[J-1];
L[J-1] := Temp; End;
Halaman. 3
Metode 2 untuk pengurutan ascending :
Mulai dari elemen J=1,1,…,N-1,lakukan :
1. Bandingkan L[J] dengan L[J+1]. 2. Tukarkan L[J] dengan L[J+1] jika L[J] L[J+1]
Contoh : 44 55 12 42 94 18 06 67
Pass 1 44 12 42 55 18 06 67 94
1 2 3 4 5 6 7 8
Pass 2 12 42 44 18 06 55 67 94
1 2 3 4 5
6 7
8
Pass 3 12 42 18 06 44 55 67 94
1 2 3 4 5 6 7 8
Pass 4 12 18 06 42 44 55 67 94
1 2 3 4 5 6 7 8
Pass 5 12 06 18 42 44 55 67 94
1 2 3 4 5 6 7 8
Pass 6 06 12 18 42 44 55 67 94
1 2 3 4 5 6 7 8
Pass 7 06 12 18 42 44 55 67 94
1 2 3 4 5 6 7 8
Procedure urutgelembung1_descendingvar L:larik;N:integer; Var I
: integer; {pencacah untuk jumlah langkah} J
: integer; {pencacah untuk pengapungan pada setiap langkah} Temp : integer; {peubah bantu pertukaran}
Begin For I := 1 to n-1 do
For J := n downto I+1 do
If L[J] L[J-1] then {pertukaran L[J] dengan L[J-1];
Temp := L[J]; L[J] := L[J-1];
L[J-1] := Temp; End;
Procedure urutgelembung2_ascendingvar L:larik;N:integer; Var I
: integer; {pencacah untuk jumlah langkah} J
: integer; {pencacah untuk pengapungan pada setiap langkah} Temp : integer; {peubah bantu pertukaran}
Begin For I := 1 to n-1 do
For J := 1 to n-1 do
If L[J] L[J+1] then {pertukaran L[J] dengan L[J+1];
Temp := L[J]; L[J] := L[J+1];
L[J-1] := Temp; End;
Halaman. 4
6.2 Selection Sort Pengurutan Pilih