Anda di halaman 1dari 56

Struktur Data

MATERI 1
PENGANTAR STRUKTUR DATA
Tujuan :

Mengetahui dan memahami tentang Struktur Data


Memahami mengenai tipe data standard

LATAR BELAKANG
Untuk menyelesaikan suatu permasalahan dengan program komputer, banyak
tahapan yang harus dilalui. Tahapan dimulai dari penentuan dan spesifikasi
masalah, perancangan solusi, implementasi, testing, dokumentasi dan evaluasi.
Umtuk melakukan perancangan solusi yang baik, perancang harus melakukan :
- Perancangan Struktur Data
- Perancangan Algoritma
Kedua perancangan di atas akan memudahkan pelaksanaan tahapan-tahapan
selanjutnya pada penyelesaian masalah dengan komputer tersebut.
Struktur data menjadi dasar dalam langkah awal perancangan program
Algoritma + Struktur Data = Program
MANFAAT
Pemakaian struktur data yang tepat di dalam proses pemrograman akan
menghasilkan :
Algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara
keseluruhan lebih efisien dan sederhana.
Membuat program lebih ringkas, lebih bersih, lebih elegan, lebih mudah dan
lebih mampu berkinerja tinggi (karena efisien dalam penggunaan memori
dan waktu)
Program berjalan membutuhkan waktu beberapa detik, di mana struktur
yang lain mungkin akan membutuhkan ribuan detik.
PENGERTIAN
Struktur data adalah cara menyimpan atau merepresentasikan data di
dalam komputer agar bisa dipakai secara efisien
Data adalah representasi dari fakta dunia nyata
Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau
direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol

TIPE DATA STANDAR


Tipe data standar merupakan tipe data yang tersedia pada kebanyakan
komputer sebagai built-in features.
Tipe data standar yaitu :
- Integer
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 1 of 56

Struktur Data

- Real
- Boolean
- Char
BAHASAN STRUKTUR DATA
Struktur Data, meliputi :
a. Struktur data dasar/sederhana, yaitu array, record/struct dan himpunan
b. Struktur data lanjut/majemuk, yang terdiri dari :
- Linier : Stack, Queue, serta List dan Multilist
- Non Linier : Pohon Biner dan Graph
RECORD
Record adalah kumpulan data, Record terdiri dari elemen yang memiliki tipe data
yang berbeda dengan yang lain.
Bentuk umum deklarasi record adalah:
Type pengenal_variabel = record
Elemen1 : tipedata1
Elemen2 : tipedata2
.
.
.
Elemenn : tipedatan
Contoh pada data mahasiswa dapat dijabarkan elemen-elemennya sebagai berikut:
1. Nim bertipe integer
2. Nama bertipe string
3. Umur bertipe integer
Jika dituliskan dalam notasi algoritmik maka, akan menjadi:
type Mahasiswa : <nim : integer,
nama : string,
umur : integer>
Operasi dalam menggunakan tipe data bentukan memiliki perilaku yang sama
dengan operasi pada tipe data dasar, hanya perbedaannya adalah pada cara
mengaksesnya. Tipe data bentukan memiliki beberapa variabel/elemen yang
berada di dalamnya, oleh karena itu cara mengaksesnya menggunakan tanda
dot/titik .
Contoh:
Jika akan mendefinisikan nama variabel Mhs dengan tipe data Mahasiswa maka
pendeklarasiannya adalah:
Kamus data
Mhs : Mahasiswa
Jika akan mengisi elemen nim pada variabel Mhs maka:
Mhs.nim 30107001
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 2 of 56

Struktur Data

Atau dengan perintah masukan sebagai berikut:


read(Mhs.nim)
Jika akan menampilkan isi dari elemen nim pada variabel Mhs maka:
write(Mhs.nim)
Berikut adalah contoh penggunaan tipe data bentukan secara lengkap:
1.ALGORITMA
2. /*contoh algoritma penggunaan tipe data bentukan
sederhana*/
3.KAMUS DATA
4. type Mahasiswa : <nim : integer,
5.
nama: string,
6.
umur: integer>
7. /*Menggunakan tipe data Mahasiswa pada variabel Mhs*/

8. Mhs : Mahasiswa
9. Algoritma
10. /*mengisi elemen-elemen dalam variabel Mhs*/
11. read(Mhs.nim)
12. read(Mhs.nama)
13. read(Mhs.umur)
14. /*menampilkan isi elemen-elemen dalam Mhs*/
15. write(Mhs.nim)
16. write(Mhs.nama)
17. write(Mhs.umur)

STRING
Salah satu tipe data yang merupakan representasi array 1 dimensi adalah
String.
Jumlah karakter yang dapat ditampung oleh data bertipe string adalah antara 1
sampai dengan 255.
Pendeklarasian string :
Type
Teks =string [20];
Var
Kalimat : Teks;
Operasi String :
Operator operator yang digunakan dalam operasi string adalah :
- Operator + , operator ini bertuuan untuk penggabungan suatu string
dengan string lain sehingga membentuk suatu string baru.
- Operator =, <>, <, >, <=, >= , operator operator ini bertujuan untuk
membandingkan suatu string dengan string lainnya. Hasil pembandingan
berupa nilai boolean True atau false.
Prosedur untuk operasi string :
1. Delete
Bentuk deklarasi : Delete (Var st : string; n : integer; jum : integer)
Tujuan : untuk menghapus karakter yang ada pada string st, dimulai dari posisi
ke
n, sebanyak jum karakter.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 3 of 56

Struktur Data

2. Insert
Bentuk deklarasi : Insert (obyek : string; Var Target : string; n : integer);
Tujuan : untuk menyisipkan string obyek ke string Target. Posisi penyisipan
yaitu pada indeks ke- n dari string Target.
3. Str
Bentuk deklarasi : STR (x [ : m [ : n ] ]; Var st : string)
Tujuan : prosedur ini digunakan untuk mengkonversi nilai x (bertipe real atau
integer) menjadi string. String hasil diletakkan pada st.
Fungsi untuk operasi string :
1. Copy
Bentuk deklarasi : Copy (st : string; n : integer; jum : integer) : string.
Tujuan : hasilnya berupa deretan karakter sebanyak jum, mulai karakter ke n
dari string st.
2. Concat
Bentuk deklarasi : Concat ( s1[ , s2, s3, , sn] ) : string.
Tujuan : fungsi ini menghasilkan keluaran berupa string yang merupakan
gabungan dari semua string argumennya.
3. Length
Bentuk deklarasi : Length ( st : string ) : integer.
Tujuan : fungsi ini menghasilkan panjang dari string st.
4. UpCase
Bentuk deklarasi : Upcase (ch : char ) : char;
Tujuan : fungsi ini menghasilkan huruf kapital dari ch.

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 4 of 56

Struktur Data

MATERI 2
ARRAY
Tujuan:
Mengetahui dan memahami struktur data statis
Memahami operasi-operasi array
Array adalah sekumpulan memori untuk suatu nama yang memiliki elemenelemen data yang sejenis. Sifat-sifat array adalah sebagai berikut :
- Mengacu sekumpulan elemen melalui indeks.
- Elemen bertipe sama.
- Disimpan secara berurutan di memori.
- Ukuran tetap, harus dipesan terlebih dahulu.
Representasi array dibagi menjadi dua, yaitu :
1. Representasi array 1 dimensi, contoh : string.
A[1]

A[2]

A[N]

2. Representasi array 2 dimensi, contoh : matriks.


A[1,1] A[1,2]

A[1,N]

A[1,1]
A[2,1]

A[1,N]
A[2,N]

A[N,1]

A[N,N]

Pendeklarasian array di Pascal :


- Untuk array 1 dimensi :
Const
IdxAwal = 1;
IdxAkhir = 100;
{Pendeklarasian pada bagian type}
Type
TipeInfo = ;
TabInfo = Array [IdxAwal .. IdxAkhir] of TipeInfo;
{Pendeklarasian pada bagian variabel}
Var
<identifikasi_variabel> : TabInfo;
Kategori operasi-operasi dasar terhadap tabel array :
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 5 of 56

Struktur Data

1. Traversal
2. Searching
3. Sorting
Operasi Traversal terhadap tabel array :
Tabel integer didefinisikan seperti dibawah ini :
Const
IdxMin = 1;
{batas bawah}
IdxMax = 10;
{batas atas}
Type
TipeElm = Integer;
{type terdefinisi,misal integer}
TabInt = Array [IdxMin .. IdxMax] of TipeElm;
Var
TInt = TabInt;
{tabel integer}
Skema traversal :
Pemrosesan traversal yaitu mengolah seluruh elemen tabel secara
sistematik.
Skema :
Procedure ProsesTraversal (Var TI:TabInt);
Var
i:integer;
Begin
Inisialisasi;
{prosedur persiapan sebelum pemrosesan}
For i:=IdxMin to IdxMax do
Begin
Proses ( TI [ i ] );
{proses terhadap elemen saat itu}
End;
Terminasi;
{prosedur aksi setelah pemrosesan selesai}
End;
Contoh penggunaan skema :
- Prosedur memasukkan nilai seluruh elemen tabel.
Procedure InputTabInt (Var TI : TabInt);
Var
i : Integer;
Begin
For i := IdxMin to IdxMax do
Begin
Write (Elemen ke-,i);
Readln ( TI[ i ] );
End;
End;
- Prosedur menuliskan seluruh nilai elemen tabel ke layar.
Procedure OutputTabInt ( TI : TabInt);
Var
i: Integer;
Begin
For i := IdxMin to IdxMax do
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 6 of 56

Struktur Data

Begin
Write (Elemen ke-,i, = );
Writeln ( TI [ i ] );
End;
End;
MATRIKS
Merupakan array 2 dimensi, setiap elemen Matriks diidentifikasi oleh nama, indeks
baris dan indeks kolom.
1
2

N1
1

N2

Pendeklarasian Matriks (array 2 dimensi) :


Const
Idxawal = 1;
Idxakhir = 100;
Type
TipeInfo = ;
TabInfo = Array [ Idxawal .. Idxakhir, Idxawal .. Idxakhir] of TipeInfo;
Var
<identifikasi_variabel> : TabInfo;
Proses proses/operasi terhadap Matriks :
1. Pengisian elemen matriks dari fil
2. Pengisian elemen matriks khusus dengan assignment
3. Penulisan elemen matriks
4. Penjumlahan matriks
5. Perkalian matriks
Algoritma-algoritma Operasi Matriks :
1. Pengisian elemen matriks dari fil
Read N1, N2 {N1 : jumlah baris, N2 : jumlah kolom}
I1
While I <= N1 do
J1
While J <= N2 do
Read M [I,J]
J J+1
EndWhile
I I+1
EndWhile
2. Pengisian elemen matriks khusus dengan assignment
a. Matriks N1 x N2 yang semua elemennya 1 :
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 7 of 56

Struktur Data

I1
While I <= N1 do
J1
While J <= N2 do
M [I,J] 1
J J+1
EndWhile
I I+1
EndWhile
b. Matriks identitas ordo N
Read N
I1
While I <= N do
J1
While J <= N do
If I = J then
M[I,J] 1
Else
M[I,J] 0
Endif
J J+1
EndWhile
I I+1
EndWhile
3. Penulisan elemen matriks
I1
While I <= N1 do
J1
While J <= N2 do
Write M[I,J]
J J+1
EndWhile
I I+1
EndWhile
4. Penjumlahan matriks
I1
While I <= N1 do
J1
While J <= N2 do
C[I,J] A[I,J] + B[I,J]
J J+1
EndWhile
I I+1
EndWhile
5. Perkalian matriks
I1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 8 of 56

Struktur Data

While I <= N1 do
{N1 = baris Matriks A}
J1
While J <= N2 do
{N2 = baris Matriks B}
C[I,J] 0
K1
While K <= N do
{N = kolom matriks A = baris matriks B}
C[I,J] C[(I,J] + A[I,K] * B[K,J]
K K+1
EndWhile
J J+1
EndWhile
II+1
EndWhile

2. Kombinasi Tipe Bentukan dan Array


2.1 Tipe Data Bentukan di dalam array
Permasalahan yang berikutnya adalah bagaimana caranya memasukkan data
mahasiswa dengan jumlah yang banyak? Di sini dapat digunakan array sebagai
sarana untuk menyimpan data mahasiswa dalam satu variabel.
Cara mendeklarasikannya adalah sebagai berikut:
KAMUS DATA
type Mahasiswa : <nim : integer,
nama : string,
umur : integer
>
Mhs : array [0..49] of Mahasiswa

Jika direpresentasikan dalam bentuk gambar maka, akan tampak sebagai berikut:
30107002
Nisya
18

Mhs =
0

...
...

49

30107001
Najwa
18

Untuk mengimplementasikan penggambaran data di atas maka, cara pengisian


array Mhs adalah sebagai berikut:
...
Mhs[1].nim 30107001
Mhs[1].nama Luna Maya
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 9 of 56

Struktur Data

Mhs[1].umur 18
Mhs[2].nim 30107002
Mhs[2].nama Amingwati
Mhs[2].umur 18
...

Atau dengan perintah masukan sebagai berikut


read(Mhs[1].nim)
read(Mhs[1].nama)
read(Mhs[1].umur)
read(Mhs[2].nim)
read(Mhs[2].nama)
read(Mhs[2].umur)
.....

Dengan demikian data mahasiswa dapat disimpan dalam satu buah variabel bertipe
array dengan tipe Mahasiswa.
Contoh pseudocode lengkapnya
1.ALGORITMA
2. /*contoh algoritma penggunaan tipe data bentukan dalam array*/
3.KAMUS DATA
4. Type Mahasiswa : <nim : integer,
5.
nama : string,
6.
umur : integer >
7. /*Menggunakan tipe data Mahasiswa pada variabel Mhs*/
8. Mhs : array [1..3] of Mahasiswa
9. i : integer
10.Algoritma
11. /*mengisi elemen-elemen dalam variabel Mhs*/
12. for i:=1 to 3 do
13. write(Nim = ); read(Mhs[i].nim)
14. write(Nama = ); read(Mhs[i].nama)
15. write(Umur = ); read(Mhs[i].umur)
16. EndFor
17. /*menampilkan isi elemen-elemen dalam Mhs*/
18. for i:=1 to 3 do
19. write(Mhs[i].nim)
20. write(Mhs[i].nama)
21. write(Mhs[i].umur)
22. EndFor

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 10 of 56

Struktur Data

Output yang dihasilkan:

2.2 Array di dalam Tipe Data Bentukan


Pada contoh sebelumnya telah ditunjukkan bahwa di dalam sebuah elemen
array dapat diisi dengan suatu nilai yang memiliki tipe data bentukan. Jika kondisi
yang dihadapi oleh perancang program adalah kondisi yang sebaliknya, yaitu
memasukkan variabel bertipe array menjadi salah satu atau beberapa elemen di
dalam variabel yang memiliki tipe data bentukan, bagaimanakah cara
mendefinisikan dan mengoperasikan variabel tersebut?
Di dalam tipe data bentukan, satu atau beberapa elemennya diperbolehkan
untuk menggunakan tipe data array. Salah satu contoh kasusnya adalah bagaimana
mendefinisikan data mahasiswa yang mempunyai beberapa nilai. Jika digambarkan
akan tampak sebagai berikut:
Mahasiswa
100
Nindya
Nilai =

100
1

89
2

88
3

Dari gambar di atas dapat dilihat bahwa seorang mahasiswa memiliki beberapa
nilai, maka cara mendeklarasikan tipe datanya adalah:
type Mahasiswa : <nim : integer,
nama : string,
nilai: array [1..3] of integer
>
Kamus data
Mhs : Mahasiswa
Dalam hal ini yang memiliki tipe data array adalah elemen di dalam tipe data
bentukan, oleh karena itu cara mengakses elemen array yang terdapat di dalam
tipe Mahasiswa adalah sebagai berikut:
Mhs.nilai[1] 100
Mhs.nilai[2] 89
Mhs.nilai[3] 88
Atau dengan perintah masukan sebagai berikut:
read(Mhs.nilai[1])
read(Mhs.nilai[2])
read(Mhs.nilai[3])
Contoh pseudocode lengkapnya
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 11 of 56

Struktur Data

1.ALGORITMA
2. /*contoh algoritma penggunaan array dalam tipe data bentukan*/
3.KAMUS DATA
4. type Mahasiswa: <nim : integer,
5.
nama : string,
6.
nilai: array[1..3] of integer>
7./*Menggunakan tipe data Mahasiswa pada variabel Mhs*/
8. Mhs : Mahasiswa
9. i,a : integer
10.Begin
11./*mengisi elemen-elemen dalam variabel Mhs*/
12. write(Memasukkan nilai dalam array)
13. write(Nim = ); input(Mhs.nim)
14. write(Nama= ); input(Mhs.nama)
15. a=1;
16. for i:=1 to 2 do
17. write(Nilai ke ,a, = )
18. read(Mhs.nilai[i])
19. a=a+1
20. endfor
21./*menampilkan isi elemen-elemen dalam Mhs*/
22. write(Nim Anda : ,Mhs.nim, dan Nama
23.
Anda: ,Mhs.nama)
24. write(Nilai Anda adalah:)
25. for i=1 to 3 do
26. write(Mhs.nilai[i])
27. endFor
28.End.
Output yang dihasilkan:

2.3 Array dari Tipe Bentukan yang Mengandung Array


Pada kasus ini tujuannya adalah mendefinisikan tipe data untuk menyimpan
data dengan tipe data bentukan dan di dalam tipe data bentukan tersebut terdapat
elemen dengan tipe array.
Pada contoh kasus di sub bab 6.3.2 ditunjukkan seorang mahasiswa memiliki
nilai lebih dari satu. Pertanyaan berikutnya adalah bagaimana jika jumlah
mahasiswanya lebih dari satu?
Caranya adalah dengan membuat variabel bertipe array dimana array
tersebut memiliki tipe data bentukan yang di dalamnya terdapat array.
type Mahasiswa : <nim : integer,
nama : string,
nilai: array [0..2] of integer>
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 12 of 56

Struktur Data

Kamus data
Mhs : array [0..49] of Mahasiswa
Dapat dilihat bahwa dalam tipe data Mahasiswa terdapat elemen nilai yang
memiliki tipe array, kemudian pada bagian kamus data didefinisikan bahwa
variabel Mhs merupakan tipe array dengan tipe data Mahasiswa.
Jika digambarkan akan tampak sebagai berikut:
Mhs =
0

...
...

49

100
Nindya
Nilai =

100
0

89
1

88
2

Cara untuk mengisi satu elemen Nilai dalam variabel Mhs adalah sebagai berikut:
...
Mhs[0].Nilai[0] 100
Mhs[0].Nilai[1] 89
Mhs[0].Nilai[2] 88
...
Demikian pula untuk mengakses suatu nilai pada elemen Nilai di variabel Mhs
adalah:
...
{Menampilkan isi elemen nilai ke-0}
write(Mhs[0].Nilai[0])
...

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 13 of 56

Struktur Data

Contoh pseudocode lengkapnya


1. ALGORITMA
2. /*contoh algoritma penggunaan array dari tipe data bentukan
yang mengandung
3.
array*/
4. KAMUS DATA
5. type Mahasiswa : <nim : integer,
6.
nama : string,
7.
nilai: array[0..2] of integer>
8. /*Menggunakan tipe data Mahasiswa pada variabel array Mhs*/
9. Mhs : array of [1..3] of Mahasiswa
10. i,a,j,b : integer
11.Begin
12. /*mengisi elemen-elemen dalam variabel array Mhs*/
13. write(Memasukkan nilai dalam array)
14. a=1
15. for i:=1 to 3 do
16. write(Data mahasiswa ke-,a)
17. write(Nim = ); read(Mhs[i].nim)
18. write(Nama= ); read(Mhs[i].nama)
19. b=1
20
for j:=0 to 2 do
21.
write(Nilai ke ,b, = )
22.
read(Mhs[i].nilai[j])
23.
b=b+1
24. endfor /*akhir loop j*/
25. a=a+1
26. endfor /*akhir loop i*/
27. /*menampilkan isi elemen-elemen dalam Mhs*/
28. for i:=1 to 3 do
29. write(Mhs[i].nim, Mhs[i].nama)
30. for j:=1 to 3 do
31.
write(Mhs[i].nilai[j])
32. endfor
33. endFor
34.End.
Output yang dihasilkan:

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 14 of 56

Struktur Data

Latihan :
1. Buat Algoritma dengan menggunakan Struktur Data Array untuk Matrik
dalam pencarian elemen tertentu didalam matrik!
Algoritma Global:
- Misalkan elemen x yang akan dicari
- Bila x ditemukan, maka keluaran yang diinginkan adalah indeks baris dan
indeks kolomnya. Bila x tidak ditemukan di dalam matriks, maka indeks
baris dan indeks kolom yang dihasilkan masing-masing bernilai -1
2. Buat Algoritma dengan menggunakan Struktur Data Array untuk Matrik untuk
membuat Matrik Transpose!
3. Buat Algoritma dengan menggunakan Struktur Data Array untuk Matrik
dalam mencetak elemen diagonal matrik!

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 15 of 56

Struktur Data

MATERI 3
STRUKTUR DATA DINAMIS ( POINTER )
Tujuan:

Mengetahui dan memahami struktur data dinamis

Memahami operasi-operasi dasar dari Linked List


Pointer adalah variabel yang berisi alamat dari suatu lokasi struktur data.

Pointer digunakan untuk menyatakan secara eksplisit alamat tersebut pada waktu
dilakukan pengoperasiannya. Manipulasi dapat dilakukan pada alamat maupun
struktur data tersebut.
Pada implementasinya, pernyataan eksplisit ini diperlukan karena struktur
data itu belum tentu terletak pada segmen data yang sama dengan program yang
akan dieksekusi.
List Berkait / Linked list
List diawali dari Kepala, yang merupakan kepala dari list. Kepala berisi
alamat dari elemen pertama. Elemen list berisi 2 jenis field, yaitu Info dan Berikut.
Info adalah harga yang disimpan/dioperasikan, sedangkan Berikut adalah pointer
yang berisi alamat berikutnya.
List diakhiri dengan suatu elemen terakhir yang memiliki harga Berikut yang
tidak menunjuk kemanapun. Harga Berikut ini disebut Nil.
Jika Kepala = Nil, menunjukkan list dalam keadaan kosong.
Notasi :
Jika P adalah suatu variabel yang berjenis pointer :
P^. Info

: Mengakses data pada elemen yang beralamat di P

P^. Berikut

: Mengakses alamat elemen sesudah P

Pendefinisian dalam Pascal adalah sebagai berikut :


Type
Info_Type = Integer;
List = ^ElmList;
ElmList = Record
Info
: Info_Type;
Berikut : List;
End;

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 16 of 56

Struktur Data

NAME
or
START

Gambar 1
Contoh :
Pada bangsal sebuah rumah sakit terdapat 12 tempat tidur. Sembilan di antaranya
telah ditempati Pasien. Kita hendak membuat list nama para pasien tersebut secara
alfabetik.

START

Bed
Number
1
2
3
4
5
6
7
8
9
10
11
12

Patient
Kirk

Next
7

Dean
Maxwell
Adams

11
12
3

Lane
Green
Samuels

4
1
0

Fields
Nelson

8
9

Gambar 3.1
Operasi operasi Dasar Pada Linked List
Operasi-operasi dasar : Inisialisasi List, Penelusuran List (Explore), Pencarian
List (Searching), Penyisipan List (Insertion), Penghapusan List (Deletion). Pada
bagian ini diasumsikan List Berkait diimplementasikan pada jenis data dinamis.
Rutin-rutin yang digunakan :
NEW (P)

: Membuat node baru dari memori komputer lalu

menyimpan

alamat di P.
RELEASE (P) atau
DISPOSE (P)

: Membebaskan memori komputer dari suatu node yang alamatnya

ditunjuk oleh P.
Inisialisasi List
Inisialisasi adalah pemberian nilai awal terhadap variabel list (pointer).
Procedure Inisialisasi (Var Kepala : List);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 17 of 56

Struktur Data

Begin
Kepala := Nil; {tidak menunjuk kemanapun}
End;
Penelusuran List / Explore
Explorasi adalah penjelajahan untuk mengunjungi semua elemen.
Tujuan : Pencetakan, Pemeriksaan, pengubahan data, dll.
Procedure PenelusuranList (Var Kepala : List);
Var
P : List;
Begin
P := Kepala; {alamat elemen yang akan dikunjungi}
While P <> Nil Do
Begin
Proses (P);
{realisasinya : pemrosesan terhadap P}
P := P^. Berikut;
End;
{P = Nil, semua elemen sudah dikunjungi, atau list kosong }
End;
Pencarian List / Searching
Searching adalah pencarian suatu elemen pada list, dengan kriteria tertentu
a. Pencarian elemen list yang berharga Y
Function PencarianList (Var Kepala : List; Y : Info_Type) : Boolean;
Var
P : List;
Ketemu : Boolean;
Begin
P := Kepala;
Ketemu := False;
While (P <> Nil) And (Not Ketemu) Do
Begin
If P^. Info = Y Then
Ketemu := True
Else
P := P^. Berikut;
End;
PencarianList := Ketemu;
End;
{Jika tidak ketemu P = Nil dan PencarianList bernilai False}
b. Pencarian elemen terakhir
Procedure PencElemenAkhir (Var Kepala, P : List) ;
Begin
P := Head
If P <> Nil Then
Begin
While (P^. Berikut <> Nil) Do
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 18 of 56

Struktur Data

P := P^. Berikut;
End;
End;
Penyisipan List / Insertion
Insertion adalah penyisipan suatu elemen list pada Linked List.
a. Penyisipan sebagai elemen pertama
Procedure SisipAwal (Var Kepala : List; P :List)
Begin
P^. Berikut := Kepala;
Kepala := P;
End;
b. Penyisipan sebagai elemen terakhir
Procedure SisipAkhir (Var Kepala : List; P : List);
Var
Akhir : List;
Begin
New (P)
If Kepala = Nil Then SisipAwal (Kepala, P);
Else
Begin
Akhir := Kepala;
While (Akhir <> Nil) Do
Akhir := Akhir^. Berikut;
P^. Berikut := Nil;
Akhir^. Berikut := P;
End;
End;

{Bila masih kosong}

c. Penyisipan sesudah elemen P


Procedure SisipSesudah (Var Prec : List; P : List);
Begin
Prec^. Berikut := P^. Berikut;
P^. Berikut := Prec;
End;
Penghapusan List / Deletion
Deletion adalah proses penghapusan list yang dianggap tidak diperlukan
lagi.
Penghapusan dilakukan dengan tahapan :
-

Lepaskan elemen dari rantai Linked-List.

Bebaskan memori yang digunakan dengan DISPOSE atau RELEASE.

a. Penghapusan elemen pertama


Procedure HapusElemenPertama (Var Kepala : List);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 19 of 56

Struktur Data

Begin
If Kepala <> Nil Then
Begin
P := Kepala;
Kepala := Kepala^. Berikut;
Dispose (P);
End;

{Kepala maju untuk menuju


elemen berikutnya}

End;
b. Penghapusan elemen terakhir
Procedure HapusElemenAkhir (Var Kepala : List; P : List);
Var
Akhir, PreAkhir : List;
Begin
If Kepala <> Nil Then
Begin
Akhir := Kepala;
PrecAkhir := Nil;
While (Akhir ^. Berikut <> Nil) Do
Begin
PrecAkhir := Akhir;
Akhir := Akhir^. Berikut;
End;
P:= Akhir;
If PrecAkhir = Nil Then
{Elemen List hanya satu}
Kepala := Nil
Else
PrecAkhir^. Berikut := Nil;
If P <> Nil Then Dispose (P);
End;
End;
c. Penghapusan elemen sesudah P
Procedure HapusElemenSesudah (Var P : List);
{List Tidak Boleh Kosong !!}
Var
Prec : List;
Begin
If P^. Berikut <> Nil Then
Begin
Prec := P^. Berikut;
P^. Berikut := Prec^. Berikut; {Alamat P yangberikutnya}
Dispose (Prec);
End;
End;

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 20 of 56

Struktur Data

MATERI 4
OPERASI OPERASI DASAR II PADA LINKED LIST
Tujuan:

Memahami mengenai operasi khusus dari list berkait

Memahami algoritma dan operasi khusus list berkait


Operasi operasi dasar yang akan dibahas pada modul ini adalah operasi

penggabungan, operasi-operasi khusus pada varian Linked list.


Penggabungan List
Dua linked list yang terpisah dapat digabungkan menjadi list tunggal dengan
algoritma merging. Untuk penggabungan 2 list, dimana elemen pertama list II
adalah elemen berikutnya dari elemen terakhir list I, algoritmanya :
Kepala 1
List Pertama :

Kepala 2
List Kedua :
x

Hasil Gabungan :
Kepala 1
a

Procedure GabungListAkhir (var Kepala1, Kepala2 : List);


Begin
PencElemenAkhir (Kepala1, P);
If P <> Nil then
P^. Berikut := Kepala2
Else
Kepala1 := Kepala2;
End;

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 21 of 56

Struktur Data

Varian Linked List


Varian Linked List adalah Linked List yang tidak sesederhana representasi di
atas.
1. List Berkait dengan kepala dan ekor.
Kepala = Ekor = Nil untuk List Kosong
Kepala = Ekor <> Nil List beranggotakan 1 elemen

Kepala

Ekor

2. List Sirkuler.

3. List dengan pointer ganda (Double Linked List).

4. List beranak bertingkat (menggunakan field pointer tambahan untuk kepala ke


list anak).
Kepala

Anak-anak

Cucu
5. List kombinasi dari varian-varian tersebut.

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 22 of 56

Struktur Data

Operasi-operasi pada List Sirkuler


a. Kunjungan pada tiap elemen
Procedure PlrListSirkuler (var Kepala : List);
Begin
If (Kepala <> Nil) then
Begin
P:= Kepala;
Repeat
Proses (P);
P:= P^. Berikut;
Until P = Kepala;
End;
End;
b. Sisipkan elemen baru
Sebagai elemen pertama :
Procedure SisipPtmSirkuler (var Kepala : List);
Var
Q : List;
Begin
If (Kepala = Nil) then
Begin
Kepala := P;
P^. Berikut := Kepala ;
{menunjuk dirinya sendiri}
End
Else
Begin
Q := Kepala;
While (Q^. Berikut <> Kepala) Do
{menunjuk kepala / link
Q := Q^.Berikut;
sirkulernya}
P^. Berikut := Kepala;
Q^. Berikut := P;
Kepala := P;
End;
End;
Sebagai elemen terakhir :
Procedure SisipAkrSirkuler (var Kepala : List; P : List);
Var
Q : List;
Begin
If (Kepala = Nil) Then
Kepala := P
Else
Begin
Q := Kepala;
While (Q ^. Berikut <> Kepala) do
Q := Q^. Berikut;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

{menunjuk Kepala / Link


sirkulernya}
Page 23 of 56

Struktur Data

Q^. Berikut := P;
End;
P^. Berikut := Kepala;
End;
c. Penghapusan Elemen List Sirkuler
Penghapusan Elemen Pertama List Sirkuler :
Procedure HapusElmPertamaListSirkuler (Var Kepala : List);
Var
P : List;
Begin
If Kepala <> Nil Then
Begin
If Kepala^. Berikut = Kepala Then
Begin
Dispose (Kepala);
Kepala := Nil;
End
Else
{If Kepala^. Berikut <> Kepala Then}
Begin
P := Kepala;
Kepala := Kepala^. Berikut;
While Kepala^. Berikut <> P do
Kepala := Kepala^. Berikut;
End;
Kepala^. Berikut := P^. Berikut;
Dispose (P);
End;
End;
End;
Penghapusan Elemen Terakhir List Sirkuler :
Procedure HapusElmAkhirListSirkuler (Var Kepala : List);
Var
PreAkhir, P : List;
Begin
If Kepala <> Nil Then
Begin
If Kepala^. Berikut = Kepala Then
Begin
Dispose (Kepala);
Kepala := Nil;
End
Else
Begin
P := Kepala;
While P^. Berikut <> Kepala do
Begin
PreAkhir := P;
P:= P^. Berikut;
End;
PreAkhir^. Berikut := Kepala;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 24 of 56

Struktur Data

Dispose (P);
End;
End;
End;
Operasi operasi pada List berpointer Ganda
Pendeklarasian pada program pascal :
Type
Info_Type = integer;
List = ^ElmList;
ElmList = Record
Info : Info_Type;
Sebelum, Berikut : List;
End;
a. Kunjungan pada setiap elemen :
-

Pointer Sebelum tidak digunakan.

Algoritma sama dengan Linked List pointer tunggal

b. Penyisipan sebagai elemen pertama


Procedure SisipAwListGanda (var Kepala : List; P : List);
Begin
P^. Berikut := Kepala;
If Kepala <> Nil Then
Kepala^. Sebelum := P;
Kepala := P;
P^. Sebelum := Nil;
End;
c. Penyisipan sebagai elemen terakhir :
Procedure SisipAkListGanda (Var Kepala : List; P : List);
Begin
PencElemenAkhir (Kepala, Q); {Pemanggilan Prosedur PencElemen Akhir}
P^. Berikut := Nil;
P^. Sebelum := Q;
{Q : Alamat elemen terakhir atau Nil}
If (Q <> Nil) then
Q^. Berikut := P;
End;
d. Penyisipan sebagai suksesor dari Q
Procedure SisipSesudahListGanda (var P : List; Q : List);
Begin
P^. Berikut := Q^. Berikut;
P^. Sebelum := Q;
If (Q^. Berikut <> Nil) Then
Q^. Berikut^. Sebelum := P;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 25 of 56

Struktur Data

Q^. Berikut := P;
End;
e. Penghapusan elemen pertama
Procedure HapusElmPtmListGanda (var Kepala : List; P : List);
Begin
If (Kepala <> Nil) then
Begin
P:= Kepala;
Kepala := Kepala^. Berikut;
Dispose (P);
If (Kepala <> Nil) Then
{sisa tidak kosong}
Kepala^. Sebelum := Nil;
End;
End;
f. Penghapusan elemen terakhir
Procedure HapusElmAkhListGanda (var Kepala : List; P : List);
Ver
Q : List;
Begin
If (Kepala <> Nil) then
Begin
If (Kepala^. Berikut = Nil) then
Begin
Dispose (Kepala);
Kepala := Nil;
End
Else
Begin
PencElemenAkhir(Kepala, Q);
P := Q^. Sebelum;
Dispose (Q);
P^. Berikut := Nil;
End;
End;
End;

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 26 of 56

Struktur Data

MATERI 5
STACK DAN QUEUE

Tujuan:
- Dapat memahami stack dan queue
- Dapat mengetahui algoritma stack dan queue
- Dapat memahami operasi polish notation untuk stack
- Dapat mengimplementasikan algoritma stack dan queue kedalam bahasa
pemrograman.
1. Stack
Stack merupakan koleksi atau kumpulan data secara bertumpuk (seolah-olah
bertumpuk) dimana data yang akan disisipkan atau akan diambil(dihapus) dilakukan
pada ujung yang sama yang dikenal dengan sebutan top dari tumpukan (top of
stack).
Deskripsinya sebagai berikut:
T OP
F
E
D
C
B
A

BOTTOM

1.1 Representasi Stack


Representasi stack dapat dibuat dengan struktur data Array maupun List berkait.
Dalam modul ini akan direpresentasikan dengan menggunakan struktur data Array.
Deklarasi untuk stack:
const maxstack = 100;
type stack = record
item:array[1..maxstack] of char;
top:0...maxstack
end;
var

s:stack;

1.2
Operasi-operasi dalam stack
1.2.1 Operasi Penyisipan (PUSH)
Operasi ini dilakukan untuk menyisipkan data pada stack
dengan operasi PUSH. Berikut procedure untuk operasi stack:

yang dikenal

procedure push(var s:stack; x:integer);


begin
if s.top=maxstack then error(stack overflow)
else
begin
s.top:=s.top+1;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 27 of 56

Struktur Data

s.item[s.top]:=x;
end;
end;
1.2.2 Operasi POP
Operasi ini dilakukan untuk mengambil atau menghapus data pada stack yang
dikenal dengan operasi POP. Berikut procedure untuk operasi stack:
function pop(var s:stack):integer;
begin
if empty(s) then error(stack underflow)
else
begin
pop:=s.item[s.top];
s.top:=s.top-1;
end;
end;
empty(s) merupakan function untuk mengetahui kosong atau tidaknya
didalam stack. Berikut function untuk empty(s).
function empty(s:stack):boolean;
begin
if s.top=0 then
empty:=true {stack adalah kosong}
else
empty:=false; {stack adalah tidak kosong}
end;
1.2.3 Implementasi Stack.
Salahsatu pemanfaatan tumpukan adalah untuk menulis ungkapan
menggunakan notasi tertentu atau dikenal dengan penulisan ungkapan numeris.
Seperti dalam menggunakan tanda kurung untuk mengelompokan bagian mana yang
harus dikerjakan terlebih dahulu.
Infix
Posfix
A+B-C
AB+C(A+B)*(C-D)
AB+CD-*
A-B/(C*D^E)
ABCD^*/Notasi aritmatik biasa ditulis dalam notasi infix, missal A + B C. Notasi infix mudah
dimengerti oleh manusia, hanya dalam notasi infix ini perlu diperhatikan prioritas
pengerjaan karena berhubungan dengan hirarki operator pada computer. Prioritas
pengerjaannya adalah :
1. Tanda Kurung : ( )
2. Eksponensial atau pangkat : ^
3. Perkalian, Pembagian : *,/
4. Penjumlahan, Pengurangan : +,Contoh : (A - B) * (C + D)
Prioritas pengerjaan soal di atas adalah sebagai berikut:
a. Dalam kurung yang paling kiri : (A-B)
b. Dalam Kurung yang kedua : (C+D)
c. Perkalian hasil pengurangan dengan hasil penjumlahan
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 28 of 56

Struktur Data

Notasi infix untuk penulisan aritmatik, biasa diubah kedalam notasi prefix atau
postfix saat kompilasi. Notasi prefix maupun postfix akan lebih mudah dikerjakan
oleh komputer, karena tidak perlu mencari urutan pengerjaan seperti pada notasi
infix.
PREFIX adalah keadaan di mana simbol operator diletakkan sebelum dua operand.
POSTFIX adalah keadaan di mana symbol operator diletakkan sesudah dua
operand. Aturan notasi infix, prefix dan postfix :
1. Notasi Infix
: operand operator operand
A+B
2. Notasi Prefix
: operator operand operand
+A B
(disebut juga Polish Notation - PN)
3. Notasi Postfix
: operand operand operator
AB+
(disebut juga Reveser Polish Notation - RPN)
NOTASI POSTFIX
ALGORITMA
Amati barisan dari kiri ke kanan
1. Jika (, maka PUSH ke dalam stack.
2. Jika ), POP elemen dalam stack sampai simbol (. Semua di POP
merupakan output kecuali ( tadi.
3. Jika simbol operand, langsung merupakan output.
4. Jika simbol operator, maka :
Jika elemen TOP stack dengan level >= maka POP sebagai output teruskan
sampai (.
elemen TOP <, operator yang diamati di PUSH ke dalam stack.
5. Bila ; kita POP semua elemen dalam stack hingga hampa.
APLIKASI STACK
Notasi Postfix
Contoh :
Notasi Infix : ((A+B) * C/D+E^F)/G;
Simbol yang 1
diamati
(

10

11

12

13

14

15

16

17

18

^
/

TOP dari
STACK
(

OUTPUT

^+

Berikut ini procedure dan function untuk operasi polish notation.


function valensi(op:char):integer;
begin
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 29 of 56

Struktur Data

case op of
^:valensi:=3;{pangkat}
*,/:valensi:=2;{kali dan bagi}
+,-:valensi:=1;{tambah dan minus }
(:valensi:=0;{kurung buka}
end;
end;
procedure infix_posfix(infix:string);
var
i:integer;
operator:set of char;
temp, kar:char;
s:Stack;
Test:boolean
begin
{*himpunan operator yang diijinkan*}
operator:=[^]+[*]+[/]+[+]+[-];
{*melakukan konversi*}
for i:=1 to length(infix) do
begin
kar:=infix[i];
{*kurung buka. Push kedalam tumpukan*}
if kar=( then push(s,kar)
{*kurung tutup. Pop semua elem tumpukan*
*dan cetak, sampai elemen atas tumpukan*
*adalah kurung buka. Pop juga elemen ini *
*tetapi tidak perlu ditulis. *}
else
if kar=) then
begin
while s.item[s.top]<>( do
write(pop(s));
temp:=pop(s);
end
{*operator. Test valensinya terhadap valensi elemen atas tumpukan. jika*
valensinya lebih kecil, pop elemen atas tumpukan sampai valensi elemen
atas tumpukan lebih kecil. Push operator ini.}
else
if kar in operator then
begin
while (s.top<>0) and (valensi(kar) <=valensi(s.item[s.top])) do
write(pop(s))
push(s,kar)
end
else
if kar<> then write(kar)
end;
s.top<>0 then
{*tumpukan masih isi. Pop semua elemen*
*yang masih ada dalam tumpukan
*}
repeat
write(pop(s))
until s.top=0;
end;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 30 of 56

Struktur Data

2. QUEUE
Queue adalah suatu kumpulan data yang mana penambahan (insert) elemen
hanya bisa dilakukan pada satu ujung(disebut dengan sisi belakang atau rear), dan
penghapusan (pengambilan elemen) dilakukan lewat ujung lain(disebut dengan sisi
depan atau front). Berikut ilustrasi dari queue:
Front

Rear

2.1 Representasi Queue


Representasi Queue dapat menggunakan struktur data Array maupun list
berkait. Berikut deklarasi queue:
const Max_Elemen = 10;
type Antri = array[1..Max_Elemen] of char;
var
Queue
Front, Rear
Item

: Antri;
: integer;
: char;

2.2 Operasi-operasi queue


2.2.1 Operasi Insert
Operasi ini digunakan untuk menyisipkan elemen dalam queue, yang
dilakukan pada sisi belakang (rear). Berikut algoritma untuk operasi insert:
Suatu operator yang menyisipkan elemen ke dalam queue pada bagian belakang
(rear)
- REAR (INSERT(A,Q)) = A
- ISEMPTY (INSERT(A,Q)) = FALSE
Algoritma QINSERT
1. if FRONT = 1 and REAR = N , or If FRONT = REAR + 1, then
OVERFLOW, Return
2. if FRONT := NULL, then
set FRONT := 1 and REAR := 1
else
set REAR := REAR + 1
3. set QUEUE [REAR] := ITEM
4. Return
2.2.2 Operasi Remove
Operasi ini digunakan untuk mengambil atau melayani elemen yang ada
dalam antrian(queue). Berikut ini algoritma untuk remove queue:
Operator yang menghapus elemen bagian depan (FRONT)dari QUEUE
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 31 of 56

Struktur Data

Algoritma QDELETE
1. if FRONT := NULL , then UNDERFLOW , Return
2. set ITEM := QUEUE[FRONT]
3. [find new value of FRONT]
if FRONT = REAR , then
set FRONT := NULL and REAR := NULL
else
set FRONT := FRONT + 1
4. Return
Contoh :
Antrean dalam array queue dengan 5 lokasi memori
1. Pada awal antrean kosong
Queue
F=0
R=0
1
2. A, B dan C dimasukkan
F=1
R=3

Queue
A
1

3. Hapus 1 elemen : A dihapus


F=2
R=3

B
2

Queue

1
4. D dan E dimasukkan
F=2
R=5

Queue

1
5. Hapus 1 elemen : B dihapus
F=3
R=5

Queue
C
1

D
3

Untuk setiap pemasukan elemen, nilai Rear + 1penghapusan elemen, nilai Front + 1
Akibatnya, setelah pemasukan elemen ke-5 maka lokasi Queue (5) telah diduduki
mungkin saja tidak sebanyak 5 elemen ada dalam antrean, karena sudah dilakukan
beberapa penghapusan. Untuk pemasukan elemen berikutnya, yakni memasukkan
elemen ITEM, gunakan lokasi QUEUE (1), dan seterusnya.

Antrian Sirkular yaitu elemen Queue (1) datang sesudah Queue (N) di dalam array,
maka Rear = 1. Jika Front = N, dilakukan penghapusan maka Front = 1, bukan N + 1.
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 32 of 56

Struktur Data

Contoh :
Array Sirkular dengan 5 lokasi memori
1. Pada awal antrean hampa
F=0
R=0

Queue

1
2. A, B dan C dimasukkan
F=1
R=3

Queue
A

1
3. Hapus 1 elemen : A dihapus
F=2
R=3

2
Queue
B

1
4. D dan E dimasukkan
F=2
R=5

C
3

Queue
B

1
5. Hapus 1 elemen : B dihapus
F=3
R=5

E
5

Queue

1
6. G dimasukkan
F=3
R=1

Queue
G
1

Algoritma QINSERT
1. if FRONT = 1 and REAR = N , or If FRONT = REAR + 1, then
OVERFLOW, Return
2. if FRONT := NULL, then
set FRONT := 1 and REAR := 1
else if REAR = N , then
set REAR := 1
else
set REAR := REAR + 1
3. set QUEUE [REAR] := ITEM
4. Return

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 33 of 56

Struktur Data

Algoritma QDELETE
1. if FRONT := NULL , then UNDERFLOW , Return
2. set ITEM := QUEUE[FRONT]
3. [find new value of FRONT]
if FRONT = REAR , then
set FRONT := NULL and REAR := NULL
else if FRONT = N, then
set FRONT := 1
else
set FRONT := FRONT + 1
4. Return

ANTREAN BERPRIORITAS
Himpunan elemen, yang setiap elemennya telah diberikan sebuah prioritas, dan
urutan proses penghapusan elemen adalah berdasarkan aturan berikut :
1. Elemen yang prioritasnya lebih tinggi, diproses lebih dahulu dibandingkan
dengan elemen yang prioritasnya lebih rendah.
2. Dua elemen dengan prioritas yang sama, diproses sesuai dengan urutannya
sewaktu dimasukkan ke dalam antrean berprioritas.

PENYAJIAN ONE WAY LIST DARI ANTREAN BERPRIORITAS


Ketentuan :
1. Setiap simpul dalam list berisi 3 buah data/field yaitu :
(Info, Prn, Link)
2. Simpul X mendahului simpul Y di dalam list, bila :
a. X mempunyai prioritas lebih tinggi dari Y.
b. Mempunyai prioritas yang sama, tetapi X dimasukkan ke dalam queue
terlebih dahulu sebelum Y.
Ket : Simpul dengan Prn rendah, mendapat prioritas tertinggi.
Contoh : Gambar
di bawah memperlihatkan diagram skematik dari Antrean
Berprioritas dengan 7 elemen dan penyajian dalam memori.
Diagram tidak dapat menceritakan kepada kita apakah B dimasukkan ke dalam list
sebelum atau sesudah D. Di lain pihak, diagram dapat memperlihatkan kepada kita,
bahwa B dimasukkan sebelum C, karena B dan C mempunyai Nomor Prioritas yang
sama, dan B berada sebelum C di dalam list.

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 34 of 56

Struktur Data

START

Diagram Skematik
Penyajian Dalam Memori
START

AVAIL

2
1
2
3
4
5
6
7
8
9
10
11
12

INFO
B

PRN
2

D
E
A
C

4
4
1
2

G
F

5
4

LINK
6
7
4
9
1
3
10
0
8
11
12
0

Sifat utama dari penyajian One-way list dari sebuah Antrean Berprioritas adalah
bahwa elemen dalam Antrean yang seharusnya diproses pertama kali selalu muncul
pada bagian permulaan One-way list. Oleh karena itu, adalah sangat sederhana
untuk menghilangkan dan memproses sebuah elemen Antrean Prioritas tersebut.
Algoritmanya sebagai berikut :

ALGORITMA 1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 35 of 56

Struktur Data

Untuk menghapus dan memproses elemen pertama dalam sebuah Antrean


Berprioritas yang muncul dalam memori sebagai sebuah one-way list.
1. Pasang ITEM := INFO(START). {Langkah ini dimaksudkan untuk menyimpan data
dalam simpul pertama}.
2. Hapus simpul pertama dari list.
3. Proses ITEM
4. Exit
ALGORITMA 2
Untuk menambahkan sebuah ITEM dengan Nomor Prioritas N pada suatu Antrean
Berprioritas yang disimpan dalam memori sebagai sebuah one-way list.
1. Telusuri one-way list sampai ditemukan suatu simpul X yang nomor prioritasnya
melebihi N. Sisipkan ITEM di depan simpul X.
2. Jika tidak ditemukan simpul semacam itu, sisipkan ITEM sebagai elemen
terakhir list.
Kesulitan utama dalam Algoritma muncul dari kenyataan bahwa ITEM disisipkan
sebelum simpul X. Hal ini berarti bahwa ketika menelusuri List itu, harus tetap
memperhatikan alamat simpul yang mendahului simpul yang sedang diakses.

START

X
A

x
Diagram Skematik

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 36 of 56

Struktur Data

Penyajian Dalam Memori

START

AVAIL

7
1
2
3
4
5
6
7
8
9
10
11
12

INFO
B
X
D
E
A
C

PRN
2
2
4
4
1
2

G
F

5
4

LINK
6
3
4
9
1
2
10
0
8
11
12
0

PENYAJIAN ARRAY DARI ANTREAN BERPRIORITAS


Menggunakan suatu antrean terpisah untuk setiap tingkat prioritas (untuk setiap
nomor prioritas). Setiap antrean akan muncul dalam array sirkularnya sendiri dan
harus mempunyai sepasang penunjuk yaitu Front dan Rear.

1
2
3
4
5

FRONT
2
1
0
5
4

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

REAR
2
3
0
1
4

1
1
2
3
4
5

2
A
C

F
G

Page 37 of 56

Struktur Data

Latihan
1. Buatlah program untuk menghitung nilai dari notasi posfik yang sudah ada
sebelumnya (tinggal menambahkan algoritma untuk menghitung nilai postfix
tersebut ).
2. Buatlah program untuk mengimplementasikan prioritas queue ,dengan struktur
data sebagai berikut:
type antri =listantrian;
listantrian=record
info:char;
prioritas:integer;
next:antri;
end;
dalam hal ini berlaku dua ketentuan, yaitu:
1. Elemen-elemen yang mempunyai prioritas lebih tinggi akan diproses lebih
dulu.
2. Dua elemen yang mempunyai prioritas sama akan dikerjakan sesuai dengan
urutan ada saat kedua elemen ini masuk dalam antrian.

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 38 of 56

Struktur Data

MATERI 6
PENGURUTAN DATA
Tujuan:
Memahami algoritma Pengurutan Data
Dapat memahami metoda-metoda pengurutan Data
Salah satu pemanfaatan struktur data array terpenting adalah pengurutan data.
Pengurutan dibedakan 2 macam:
a. Pengurutan Internal, yaitu pengurutan terhadap sekumpulan data yang
disimpan dalam media internal komputer yang dapat diakses setiap
elemennya secara langsung maka dapat dikatakan sebagai pengurutan
tabel.
b. Pengurutan eksternal, yaitu pengurutan data yang disimpan dalam memori
sekunder, biasanya dapat bervolume besar sehingga tidak mampu untuk
dimuat semuanya dalam memori.
METODA PENGURUTAN DATA
1. Bubble/Exchange Sort
2. Insertion Sort
3. Selection Sort
BUBBLE/EXCHANGE SORT
Bubble/Exchange Sort merupakan metode pengurutan data secara langsung.
Algoritma Global
Untuk Setiap Pass i=1,2,...,N-1, lakukan
Mulai dari Elemen j=N,N-1,...,i+1 lakukan:
1.1.
Bandingkan A[J] dengan L[J-1]
1.2. Pertukarkan A[J] dengan A[J-1] Jika A[J] < A[J-1]
Algoritma Detail
{N:Banyaknya elemen Array}
I:=1
While J<N Do
J:=N
While J>I Do
If A[J] < A[J-1] then
Swap := A[J]
A[J] :=A[J-1]
A[J-1]:=Swap
endif
j:=j-1
Endwhile
i:=i+1
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 39 of 56

Struktur Data

endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Bubble Sort!
25
1

27
2

10
3

8
4

76
5

21
6

INSERTION SORT
Insertion Sort merupakan metoda pengurutan data secara menyisipkan
langsung.
Dasarnya : Ambil/tinjau sebuah nilai, lalu tempatkan/sisipkan dilokasi yang
sesuai/tepat (mirip dengan cara mengurutkan kartu)
Algoritma Global
Untuk setiap pass i=2,...,N lakukan:
1. X := A[i]
2. sisipkan y pada tempat yang sesuai antara A[1]...a[i]
Algoritma Detail
I:=2
while I N do
X:=A[i]
{sisipkan X diposisi yang tetap diantara A[1],,A[N]}
J:=i-1
While x A[j] Do
A[J+1]:=A[J]
J:=J-1
Endwhile
A[J+1]:=X
I:=I+1
Endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Insertion Sort!
25
1

27
2

10
3

8
4

76
5

21
6

SELECTION SORT
Selection Sort merupakan metoda pengurutan data secara pemilihan langsung.
Dasarnya : cari nilai paling tinggi/rendah lalu tempatkan dibagian ujung array

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 40 of 56

Struktur Data

Ada dua jenis algoritma pemgurutan seleksi ditinjau dari pemilihan elemen
maksimum/minimum, yaitu:
1. Algoritma pengurutan seleksi-maksimum, yaitu memilih elemen maksimum
sebagai basis pengurutan.
2. Algoritma pengurutan seleksi-minimum, yaitu memilih elemen minimum
sebagai basis pengurutan.
1. Pengurutan Seleksi-Maksimum
Algoritma Global
1. JumlahPass = n-1
2. Untuk setiap pass i=1,2,....,JumlahPass lakukan:
cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-n;
pertukarkan maks dengan elemen ke-n;
kurangi n satu (karena elemen ke-n sudah terurut).
Algoritma Detail
I:=N
while I 2 do
{cari elemen maksimum pada elemen A[1..N]}
imaks :=1 {elemen pertama diasumsikan elemen maks sementara}
J:=2
while J I do
if A[J] > A[imaks] then
imaks:=j
endif
J := J+1
endwhile
{pertukarkan A[imaks] dengan A[i]}
swap := A[i]
A[i] := A[imaks]
A[imaks] := swap
I:=I-1
Endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Selection Sort
maksimum!
25
1

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

27
2

10
3

8
4

76
5

21
6

Page 41 of 56

Struktur Data

2. Pengurutan Seleksi-Minimum
Algoritma Global
Untuk setiap pass i =1,2,..., n-1 lakukan:
1. Cari elemen terkecil (min) mulai dari elemen ke-1 sampai elemen ke-n;
2. pertukarkan min dengan elemen ke-i;
Algoritma Detail
I:=1
while I < N do
{cari elemen minimum pada elemen A[1..N]}
imin :=I {elemen pertama diasumsikan elemen min sementara}
J:=i+1
while J N do
if A[J] < A[imin] then
imin:=j
endif
J := J+1
endwhile
{pertukarkan A[imins] dengan A[i]}
swap := A[i]
A[i] := A[imin]
A[imin] := swap
I:=I+1
Endwhile
Latihan :
Diberikan array bertipe integer dengan N=6 buah elemen dibawah ini yang
belum terurut, lakukanlah pengurutan berdasarkan metode Selection Sort
minimum!
25
1

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

27
2

10
3

8
4

76
5

21
6

Page 42 of 56

Struktur Data

MATERI 7
PENCARIAN (SEARCHING)
DEFINISI
Pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan
nilai yang bertipe sama (tipe dasar atau bentukan).
Mengapa dibutuhkan?
Untuk mengubah atau menghapus nilai tertentu harus dicari apakah
ada nilai tersebut di dalam kumpulan tersebut
Penyisipan data ke dalam kumpulan juga kadang-kadang dimulai
dengan pencarian apakah data tersebut telah ada sehingga terhindar
dari duplikasi data
Algoritma Pencarian Mendasar adalah
Pencarian Beruntun (Sequential Search)
Pencarian Bagi dua (Binary Search)
PENCARIAN BERUNTUN (SEQUENTIAL SEARCH)
Adalah proses membandingkan setiap elemen larik (array) satu persatu secara
beruntun, mulai dari elemen pertama, sampai elemen yang dicari ditemukan, atau
seluruh elemen sudah diperiksa.
ALGORITMA
Procedure SeqSearch(input L:LarikInt, input N:Integer, input X:integer, output
ketemu : boolean)
{Mencari keberadaan nilai X didalam larik[1N]}
{K.Awal:X dan larik L[1..N] sudah terdefinisi nilainya}
{K.Akhir:ketemu bernilai true jika X ditemukan, ketemu bernilai false jika X tidak
ditemukan.}
DEKLARASI
k:integer {indeks larik}
ketemu
:boolean {flag apabila X ketemu}
DESKRIPSI
k0
while ((k<N) and (L[k]!=X)) Do
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 43 of 56

Struktur Data

Kk+1
endwhile
if (L[k]=x) then
ketemu true
else
ketemu false
endif
CONTOH PENCARIAN BERUNTUN
13

16

14

21

76

15

Misalkan nilai yang dicari adalah X=21


Elemen yang dibandingkan : 13,16,14,21 (ditemukan)
Indeks Array yang dikembalikan:IDX = 3

Misalkan nilai yang dicari adalah X =13;


Elemen yang dibandingkan:13 (ditemukan)
Indeks Array yang dikembalikan:IDX=0

Misalkan nilai yang dicari adalah X=17;


Elemen yang dibandingkan:13,16,14,21,76,15 (tidak ditemukan)
Indeks array yang dikembalikan : IDX = -1

PENCARIAN BAGI DUA (BINARY SEARCH)


Adalah proses mencari data dengan membagi data atas dua bagian secara terus
menerus sampai elemen yang dicari ditemukan, atau indeks kiri lebih besar dari
indeks kanan.
Metoda ini lebih efisien dari metoda pencarian beruntun apabila data telah terurut.
ALGORITMA
Function BinSearch(input L:LarikInt, input N:Integer, input X:integer)integer
{Mencari keberadaan nilai X didalam larik[1N]}
{K.Awal:X dan larik L[1..N] sudah terdefinisi nilainya}
{K.Akhir:ketemu bernilai true jika X ditemukan, ketemu bernilai false jika X tidak
ditemukan.}
DEKLARASI
i,j
:integer
k
:integer {indeks larik}
ketemu
:boolean {flag apabila X ketemu}
DESKRIPSI
i1
jN
ketemufalse
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 44 of 56

Struktur Data

while ((not ketemu) and (i<=j)) Do


k(i+j) div 2
if (L[k]=X) then
ketemutrue
else
if (L[k]<X) then
ik+1 {batas kiri diubah}
else
jk-1 {batas kanan diubah}
endif
endif
endwhile
if (ketemu) then
retunk
else
return-1
endif
CONTOH PENCARIAN BAGI DUA

10

13

16

18

21

76

81

Misalkan nilai yand dicari adalah X=21


i=1 j=8
k=(i+j) div 2=(1+8) div 2 = 4
L[4]=21? Tidak! Harus diputuskan apakah pencarian dilakukan di bagian kiri
atau bagian kanan
L[4] < 21? Ya! Lakukan pencarian di sebelah kanan
i=k+1 = 4+1=5
j=8
k=(i+j) div 2=(5+8) div 2=6
L[6]=21? Ya, Proses pencarian selesai.

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 45 of 56

Struktur Data

MATERI 8
STRUKTUR POHON
Tujuan:
- Dapat memahami struktur pohon
- Dapat mengetahui representasi struktur pohon
- Dapat memahami dan mengetahui operasi-operasi dasar pre-order, in-order,
post-order
- Dapat memahami dan mengimplementasi algoritma struktur pohon dalam
bentuk program
Secara sederhana struktur pohon bisa didefinisikan sebagai kumpulan elemen
yang salah satu elemennya disebut dengan akar(root), dan sisa elemen yang
lain(yang disebut simpul) terpecah menjadi sejumlah himpunan yang saling tidak
berhubungan satu sama lain, yang disebut dengan subpohon (subtree), atau disebut
dengan cabang.
Istilah dalam struktur pohon:
- Derajat(degree) adalah banyaknya anak atau turunan dari simpul tersebut.
- Daun(leaf) adalah semua simpul yang berderajad nol.
- Tinggi(height) atau kedalaman(depth) dari suatu pohon adalah tingkat
maksimum dari simpul dalam pohon tersebut dikurangi dengan 1.
- Hutan(forest) adalah kumpulan sejumlah pohon yang tidak saling berhubungan
Contoh struktur pohon

A
B

1. Pohon Biner
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 46 of 56

Struktur Data

Pohon biner(binary tree) bisa didefinisikan sebagai suatu kumpulan simpul yang
mungkin kosong atau mempunyai akar dan dua subpohon yang saling terpisah yang
disebut dengan subpohon kiri (left subtree), dan subpohon kanan (right subtree)

Contoh pohon biner


A
B

2. Deklarasi Pada Pohon Biner


Representasi pada pohon biner akan dideklarasikan dengan menggunakan struktur
data list berkait (linked-list)
Type nodeptr=nodetype
nodetype=record
info:integer;
left:nodeptr;
right:nodeptr;
father:nodeptr;
end;
Berikut ini akan diberikan fungsi
merepresentasikan pohon biner:

atau

procedure

yang

terlibat

untuk

{*fungsi ini digunakan untuk membuat/mengalokasikan node dan men-set dalam


root dalam single node binary tree*}
function maketree(x:integer):nodeptr;
var p:nodeptr;
begin{function maketree}
new(p);
p.info:=x;
p.left:=nil;
p.right:=nil;
p.father:=nil;
maketree:=p;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 47 of 56

Struktur Data

end;
procedure setleft(p:nodeptr;x:integer);
var q:nodeptr;
begin {procedure setleft}
if p=nil then error(void insertion)
else if p.left<>nil then error(invalid insertion)
else begin
q:=maketree(x);
p.left:=q;
q.father:=p;
end;{else begin}
end;
procedure setright(p:nodeptr;x:integer);
var q:nodeptr;
begin {procedure setright}
if p=nil then error(void insertion)
else if p.right<>nil then error(invalid insertion)
else begin
q:=maketree(x);
p.right:=q;
q.father:=p;
end;{else begin}
end;
procedure DuplicateNode(p:nodeptr;number:integer)
var tree, q:nodeptr;
begin
tree:=maketree(number);
p:=tree;
q:=tree;
while (number<>p.info) and (q<>nil) do
begin
p:=q;
if number<p.info then
q:=p.left
else
q:=p.right;
end;
if number=p.info then
writeln(number,is a duplicate)
else if number < p.info then
setleft(p,number)
else setright(p,number)
end;
operasi-operasi lain yang
penelusuran(traverse):
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

terlibat

dalam

pohon

biner

adalah

operasi

Page 48 of 56

Struktur Data

Kunjungan secara pre-order, yang juga sering disebut dengan depth first order,
menggunakan urutan:
- cetak isi simpul yang dikunjungi.
- Kunjungi cabang kiri.
- Kunjungi cabang kanan.
{*procedure yang digunakan menggunakan procedure secara recursive*}
procedure preorder(tree:nodeptr);
begin
if tree <>nil then
with tree do
begin
writeln(info);{kunjungi dan cetak info}
preorder(left);{kunjungi left subtree}
preorder(right);{kunjungi right subtree}
end;{with begin}
end;
Kunjungan secara in-order, juga
menggunakan urutan:
- kunjungi cabang kiri.
- Cetak isi simpul yang dikunjungi.
- Kunjungi cabang kanan.

sering

disebut

dengan

symetric-order,

{*procedure yang digunakan menggunakan procedure secara recursive*}


procedure inorder(tree:nodeptr);
begin
if tree <>nil then
with tree do
begin
inorder(left);{kunjungi left subtree}
writeln(info);{kunjungi dan cetak info}
inorder(right);{kunjungi right subtree}
end;{with begin}
end;
Kunjungan secara post-order menggunkan urutan:
- kunjungan cabang kiri
- kunjungi cabang kanan.
- Cetak isi simpul yang dikunjungi.
{*procedure yang digunakan menggunakan procedure secara recursive*}
procedure inorder(tree:nodeptr);
begin
if tree <>nil then
with tree do
begin
postorder(left);{kunjungi left subtree}
postorder(right);{kunjungi right subtree}
writeln(info);{kunjungi dan cetak info}
end;{with begin}
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 49 of 56

Struktur Data

end;
3. Binary Search Tree
Binary search tree merupakan algoritma yang digunakan untuk mencari suatu nilai
kunci(key) yang berada dalam suatu tree/subtree.
Berikut ini akan diberikan suatu function untuk binary search tree:
function searchtree(key:integer):nodeptr;
var found:boolean;
tree, p:nodeptr;
begin
found:=false
p:=tree;
while (p<>nil) and (not found) do
begin
if key=p.info then
found:=true
else
if key<p.info then
p:=p.left
else
p:=p.right;
end;
if found then
searchtree:=p
else
searchtree:=nil;
end;
Latihan:
Implementasikan procedure dan function untuk operasi pohon biner (binary tree)
kedalam bahasa pemrograman!
Inputan:
Menu
1. create pohon biner
2. operasi pre-order
3. operasi in-order
4. operasi post-order
5. selesai
Tugas:
Buatlah program untuk mengimplementasikan binary search tree meliputi operasi:
1. pencarian nilai di pohon biner (binary search tree)
2. penyisipan nilai baru di pohon biner.
3. Penghapusan nilai di pohon biner.

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 50 of 56

Struktur Data

MATERI 9
STRUKTUR GRAPH
Tujuan:
- Dapat memahami struktur graph
- Dapat memahami algoritma dari representasi graph
- Dapat meng-implementasikan algoritma struktur graph kedalam program
Graph merupakan kumpulan dari titik (node atau vertices) dan garis (arcs atau
edges). garis selalu diawali pada suatu titik dan diakhiri pada titik yang lain, maka
garis bisa dituliskan sebagai pasangan antara dua titik. Dalam notasi graph, garis
ditulis sebagai:
e=[u,v], yang berarti bahwa garis e berawal pada titik u dan berakhir pada titik v.

B
A

F
nodes={A,B,C,D,E,F,G,H}
edge = {(A,B),(A,C),(A,D),(C,D),(C,F),
(E,G),(A,A)}
Graph yang akan dibahas dimodul ini adalah graph berarah yang sudah dijelaskan
diatas.

1. Representasi Graph
Representasi graph dapat menggunakan Array atau linked-list. Representasi graph
misalnya untuk menentukan matrik tetangga (adjacent matrix).
{*representasi ini menggunakan array*}
const maxnodes = 50;
type nodeptr = 1..maxnodes;
adjmatrix=array[nodeptr,nodeptr] of boolean;
var
adj:adjmatrix;
procedure join(var adj:adjmatrix;node1,node2:nodeptr);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 51 of 56

Struktur Data

begin
adj[node1,node2]:=true;
end;

procedure remv(var adj:adjmatrix;node1,node2:nodeptr);


begin
adj[node1,node2]:=false;
end;
function adjacent(adj:adjmatrix;node1,node2:nodeptr):boolean
begin
if adj[node1,node2] then
adjacent:=true
else
adjacent:=false;
end;
contoh:

Adjacent sets

2
vertex

1
2
3
4

Set
{2,3}
{3,4}
0
{1,2,3}

Adjacent T able
1 2 3 4
1
2
3
4

0
0
0
1

1
0
0
1

1
1
0
1

0
1
0
0

2. Penelusuran Graph (Graph Traversal)


Penelusuran Graph dibagi menjadi 2 metoda:
Sebelumnya kita deklarasikan terlebih dahulu struktur datanya:
const maxvertex=50;
type
nodeptr=0maxvertex;
queue = record
front,rear:nodeptr;
entry:array[nodeptr] of nodeptr;
end;
2.1 Algoritma Depth-First
Teknik ini menggunakan rountine dftraverse(s) yang digunakan untuk
mengunjungi semua nodes yang dapat diraih oleh variabel s. Berikut algoritmaalgoritma penunjang untuk depth-first:
procedure DepthFirst(var s:nodeptr;procedure visit(var v:nodeptr));
var
nd:integer;
visited=array[nodeptr] of boolean;
begin
for nd:=0 to maxvertex do visited[nd]:=false;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 52 of 56

Struktur Data

s:=a;
while s <> 0{nil} do
begin
dftraverse(s);
s:=select;
end;
end;
procedure dftraverse(var s:nodeptr;procedure visit(s:nodeptr));
var yptr:nodeptr;
begin
visited[s]:=true;
visit(s);
first( s, yptr,nd);
while(yptr<>0){nil} do
begin
if not visited(nd) then
dftraverse(nd);
nextsucc(s,yptr,nd);
end;
end;
function select:nodeptr;
var
i,last : integer;
found:boolean;
begin
{diinisialisasikan last=0}
i:=last+1;
found:=false;
while (not found) and (i<=maxvertex) do
begin
if visited(i) then
i:=i+1
else
found:=true;
end;
last:=i;
if found then
select:=i
else
select:=0;
end;
procedure first(var x:nodeptr;var yptr:nodeptr;ynode:nodeptr);
begin
nextsucc(x,0,ynode);
yptr:=ynode;
end;
procedure nextsucc(var x:nodeptr;var yptr:nodeptr,ynode:nodeptr)
var
i:integer;
finished:boolean;
begin
i:=yptr;
finished:=false;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 53 of 56

Struktur Data

repeat
i:=i+1;
if i > maxvertex then
begin
finished:=true;
yptr:=0;
ynode:=0;
end
else
if adj(x,i) then
begin
finished:=true;
yptr:=i;
ynode:=I;
end;
until finished;
end;
function adj(p,q:nodeptr):boolean;
var
r:nodeptr;
found:boolean;
begin
r:=node[p].point;
found:=false;
while (r<>0) and (not found) do
begin
if node[r].point:=q then
found:=true
else
r:=node[r].next;
end;
adj:=found;
end;
2.2

Algoritma Breadth-First
Algoritma breath-first adalah algoritma yang melakukan proses penelusuran
terhadap semua suksesor dalam hal ini node yang akan dikunjungi sebelum
dikunjungi oleh suksesor-suksesor yang lain. Berikut procedure bftraverse(s).
Catatan
:
untuk
procedure
maupun
function
seperti
init(ndqueue),insert(ndqueue,s), dan remove(ndqueue,s) sudah dijelaskan di modul
3 STACK dan QUEUE
procedure bftraverse(var s:nodeptr;procedure visit(var v:nodeptr));
var ndqueue:entry;
begin
init(ndqueue);
while s <> 0 do
begin
visit(s);
insert(ndqueue,s);
while not empty(ndqueue) do
begin
x:=remove(ndqueue);
first(x,yptr,nd);
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 54 of 56

Struktur Data

while (nd<>0) do
begin
if not visited(nd) then
begin
visit(nd);
insert(ndqueue,nd);
end;
nextsucc(x,yptr,nd)
end;
end;
s:=select;
end;
end;
2.3

Algoritma Greedy untuk mencari lintasan terpendek(shortest Path)


Shortest path adalah mencari lintasan terpendek yang menghubungkan 2
buah node dalam graph. Berikut ini procedure untuk mencari shortest path:
const maxnodes=;
type nodeptr = 1..maxnodes;
weightmatrix=array[nodeptr,nodeptr] of integer;
nodeset=set of nodeptr;
nodearray=array[nodeptr] of nodeptr;
procedure shortpath(var weight:weightmatrix;s,t:nodeptr;
var d:integer;var precede:nodearray);
var
distance : array[nodeptr] of integer;
current, i,k:nodeptr;
perm:nodeset;
smalldist, newdist,dc,d:integer;
begin
{inisialisasi}
perm:=[s];
for i:=1 to maxnodes do distance[i]:=maxint;
distance[s]:=0;
current :=s;
while (current <>t) do
begin
smalldist:=maxint;
dc:=distance[current];
for i:=1 to maxnodes do
begin
if not (I in perm) then
begin
newdist:=dc+weight[current,i];
if newdist<distance[i] then
begin
distance[i]:=newdist;
precede[i]:=current;
end;
if distance[i]<smalldist then
begin
smalldist:=distance[i];
k:=i;
Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 55 of 56

Struktur Data

end;
end;
end;
current:=k;
perm:=perm+[current]
end;
d:=distance[t];
end;

Yuda Syahidin,S.T.,M.Kom
[email:yudasy@yahoo.com]

Page 56 of 56

Anda mungkin juga menyukai