1.1 Tinjauan Pentingnya Struktur Data
Kemajuan
teknologi memberikan kontribusi terhadap kompleksnya permasalahan yang di
hadapi setiap badan usaha, lembaga pemerintah dan lainnya. Penggunaan
teknologi informasi komputer
sebagai tools dalam menyelesaikan
permasalahan baik individu maupun organisasi berkaitan dengan pengembangan suatu program/aplikasi atau sistem tidak semua secara serta merta dapat digunakan. Hal ini
terjadi karena tidak semua permasalahan mempunyai jenis permasalahan dan data
yang sama. Oleh karena itu untuk dapat menggunakan komputer sebagai sarana penunjang
penyelesaian masalah diperlukan jembatan penghubung antara perangkat
keras komputer dengan data permasalahan yang ada dalam bentuk deklarasi data
(pemesanan tempat dimemori) agar data dapat dikenali, dibaca dan dieksekusi
oleh komputer.
Pengeksekusian program atau data dalam komputer sebenarnya terjadi karena
adanya informasi yang tersimpan di dalam memori. Karena jika tidak ada data
atau informasi di memori komputer tidak akan pernah melakukan proses apa apa
atau dengan kata lain komputer dalam kondisi standby atau ready.
Pemrosesan data menggunakan kompueter membutuhkan deklarasi data yang
hendak diproses dengan kesesuaian instruksi yang dapat di mengerti oleh
komputer. Oleh karena banyaknya jenis data yang berbeda dan software
(applikasi) yang berbeda, maka mempelajari struktur dan organisasi data menjadi
penting agar pemanfaatan komputer sebagai alat pendukung penyelesaian sebagian
dari masalah dalam kegiatan sehari-hari menjadi lebih tepat.
Penyelesaian
permasalahan dengan penggunaan komputer berhadapan dengan empat hal, yaitu:
- Pemahaman secara menyeluruh keterhubungan elemen-elemen data yang relevan terhadap solusi masalah.
- Pembuatan keputusan operasi-operasi yang dilakukan oleh elemen data.
- Desain metode representasi elemen-elemen data di dalam memori sehingga memenuhi criteria: (a). Memenuhi Keterkaitan logic antara elemen-elemen data; (b) operasi-operasi terhadap elemen data dapat dilakukan secara mudah dan efisien.
- Pengambilan keputusan mengenai bahasa pemrograman terbaik untuk menerjamahkan solusi masalah menjadi program atau sistem.
Keempat hal tersebut diatas sudah
semestinya menjadi perhatian setiap analis atau programmer sebelum membangun sistem demi efisiensi dan efektivitas dalam pengembangan aplikasi. Hal ini
dimaksudkan agar keterkaitan antara elemen-elemen data yang relevan terhadap
solusi dapat di eksplorasikan secara menyeluruh sehingga dapat ditentukan
operasi-operasi elemen tersebut dapat dirumuskan secara tepat. Selain itu hal
yang harus diperhatikan adalah rancangan keterwakilan elemen data dalam memori
agar memenuhi syarat keterkaitan logic dan kemudahan operasi, termasuk di
dalamnya dalam hal penentuan penggunaan bahasa pemrograman yang sesuai dengan
kebutuahan dan maksimum performance-nya suatu program/sistem.
1.2 Struktur Data
Istilah struktur data terdiri dari dua kata, yaitu struktur dan data.
Untuk dapat memahami arti dari struktur data, berikut diberikan definisi masing
masing kata tersebut, yaitu:
a. Definisi Data
Data merupakan
fakta (hal penting) yang tercatat mengenai suatu objek tertentu. Contoh : Data mahasiswa,jenis kelamin, IP, dan Jumlah jam belajar.
b. Definisi Struktur
Struktur
dapat diartikan suatu susunan, bentuk pola, atau bangunan
c. Definisi Struktur Data
Struktur data adalah suatu
koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta
operasi yang didefinisikan terhadapnya.
Jenis
Struktur dibedakan sebagai
berikut: Data sederhana : array dan record; Struktur Data Majemuk linier : stack, Queue, linked list, dan Struktur Data majemuk Nonlinier : Tree, graf
1.3 Tipe Data
Adalah macam atau isi data
dalam suatu variable dalam bahasa program. Atau jenis data yang ditangani bahasa
pemrogramman.Pada bahasa pascal, contohnya type data terdiri dari: Integer,
real, character, Boolean, pointer dan lain lain. Sementara Java mempunyai 11
macam tipe data yang terdiri atas tipe data sederhana dan referensi / komposit.
Tipe sederhana meliputi byte, short, int, long, char, float, double
dan boolean yang terbagi menjadi 3 tipe. Sedangkan tipe data referensi
meliputi class,array dan interface.
a.
Tipe Data Pascal
Integer : Adalah tipe data yang nilainya merupakan bilangan bulat. Tipe data integer
terbagi atas beberapa macam, yaitu sebagai berikut:
Type
|
Uk. Memori (byte)
|
Range Nilai
|
Shortin
|
1
|
-128 …..127
|
Integer
|
2
|
-32768 ……32767
|
Longint
|
4
|
-2147483648 …..2147483647
|
Byte
|
1
|
0..255
|
Word
|
2
|
0 ….65535
|
Contoh (1) : untuk
menyatakan nilai yang tidak lebih dari 255 dapat dideklarasikan sebagai berikut
:
Var
Nilai : byte;
Begin
Nilai := 255;
--------
--------
End.
Real : Tipe data
real biasa digunakan untuk merepresentasikan nilai pecahan. Tipe data ini juga
tersedia atas beberapa macam yang berbeda dalam range dan besar memori yang
disediakan. Jenis-jenis tipe real tersebut dirincikan pada table dibawah ini:
Type
|
Uk. Memori (byte)
|
Range Nilai
|
Real
|
6
|
± 2.9 x 10-39 …..1.7x1038
|
Single
|
4
|
± 1.5 x 10-45 …..3.4x1038
|
Double
|
8
|
± 5 x 10-324 …..1.7x10 908
|
Extended
|
10
|
± 3.4 x 10-4932 …..1.1x104932
|
Comp
|
8
|
± 9.2 x 10 18 …..9.2x10 18
|
Contoh (2) ; Nilai
konstanta numeric real :
Var Nilai1, Nilai2
: real ;
Begin
Nilai1 := 12345678901.2345;
Nilai2 := 12345;
Writeln (‘nilai1 = ‘, Nilai1);
Writeln (‘Nilai2 = ‘, Nilai2);
End.
Maka akan tercetak :
Nilai1 = 1.2345678901 E+10
Nilai2
= 1.2345000000 E+04
Character : Adalah tipe
data yang berupa sebuah karakter yang ditulis diantara tanda petik tunggal,
menempati 1 byte memori. Atau dapat dijelaskan bahwa tipe data character adalah
tipe data karaker yang hanya dapat menampung satu karakker saja dan
mengalokasikan satu byte memori.
Contoh (3) (Pascal).
Var <nama
variabell>:char;
Karakter : char;
Begin
Karakter := ‘ * ’ ;
-------
-------
End.
Maka variable karakter akan berisi nilai ASCII dari
‘ * ‘
Boolean : Adalah type
data yang mempunyai dua nilai, yaitu true dan false. Tipe data Boolean
biasa digunakan untuk merepresentasikan logika tipe data Boolean hanya dapat
bernilai true(1) dan bernilai false(0). Jenis jenis
tipe Boolean seperti dibawah ini:
Type
|
Uk. Memori (byte)
|
Range Nilai
|
Boolean
|
1(8 bit)
|
Byte-size
|
ByteBool
|
1(8 bit)
|
Byte-size
|
WordBool
|
2 (16 bit)
|
Word-size
|
LongBool
|
4 (32 bit)
|
LongInt-sized
|
Pada penerapannya tipe data
ByteBool, WordBool, dan LongBool biasa dipakai dalam pembuatan program untuk
windows. Sedangkan untuk tipe Boolean biasanya digunakan untuk pembuatan
program DOS pada umumnya.
Dalam suatu ekspresi,
operator-operator seperti =, <>, >,<, >=, <= akan banyak
dipakai untuk menentukan hasil dari suatu tipe data Boolean.
Contoh (4) : deklarasi
dengan tipe Boolean
Var <nama variabel>:Boolean;
Nilai : boolean;
Begin
Nilai := true ;
-------
-------
End.
Pointer : Adalah tipe
data yang merupakan variable yang berisi alamat (address) di memori (RAM)
dimana suatu data disimpan dan bukan berisi data itu sendiri. Atau dengan kata
lain pointer akan menunjukkan letak dari data di memori. Deklarasi data type
pointer dengan sebuah variable dan diberi tanda coret (^).
Contoh (5) :
Type
Tipestring = string[40];
Pointerstring = ^tipestring;
var
posisi : pointerstring;
begin
posisi^ := ‘ STMIK – XYZ ‘
---------
--------
End.
Variabel posisi adalah
variable pointer yang menunjukkan letak data di memori sebanyak 40 karakter.
Jadi variable posisi tidak berisi STMIK-XYZ, tetapi alamat data tersebut.
String
(Pascal) : Adalah merupakan gabungan (array)
dari karakter sebanyak 256(default).
Contoh
(6) Var <nama
variabel>: string;
Kalimat : string;
Nama : string[25];
Alamat : string[30];
Penerapan jenis data string ini sebaiknya
mengalokasikan banyaknya karakter untuk mencegah pemborosan memori. Seperti
contoh diatas penulisan Nama:string[25], Alamat: string[30], maka penggunaan
memori walaupun tersedia 256 karakter akan tetap terpakai sesuai dengan
kebutuhan yaitu 25 karakter untuk nama dan 30 karakter untuk penulisan alamat.
b. Tipe Data Java
1. Tipe Data Sederhana
Integer (Bilangan Bulat) : Tipe data
yang masuk menjadi bagian ini adalah byte, short, int dan long. Semua tipe data
ini bersifat Signed, yaitu bisa mempresentasikan nilai positif dan
negatif. Tidak seperti tipe data lainnya, Java tidak mendukung tipe data unsigned
yang hanya bisa mempresentasikan nilai postif. Untuk jelasnya akan dijelaskan
oleh tabel dan penjelasan di bawah ini :
Type
|
Uk. (bit)
|
Range Nilai
|
Byte
|
8
|
-128 s.d. 127
|
Short
|
16
|
-32768 s.d. 32767
|
Int
|
32
|
-2147483648 s.d. 2147483647
|
Long
|
64
|
-9223372036854775808 s.d. 9223372036854775807
|
Byte : Type byte umumnya
digunakan pada saat kita bekerja dengan sebuah data stream dari
suatu file maupun jaringan, yaitu untuk kepeluan proses membaca/menulis. Selain
itu, tipe ini juga digunakan saat bekerja dengan data biner yang tidak
kompatibel dengan tipe-tipe lain yang didefiniskan di dalam Java.
Contoh :
class ContohByte {public static void main(String [] args){byte a;a=127;
System.out.println(a);}}
Short : Pada umumnya
diaplikasikan pada komputer-komputer 16-bit, yang saat ini semakin jarang
keberadaanya.
Contoh :
class ContohShort {public static void main(String[]args){short
umurWafiy;short umurAdit; short selisih; umurWafiy=23; umurAdit=13;
selisih=umurWafiy-umurAdit; System.out.println(“Selisih umur mereka adalah “ +
selisih + ” tahun”);
Int : Tipe ini
merupakantipe yang paling banyak dipakai dalam merepresentasikan angka dalam
Java, dikarenakan dianggap paling efisien dibandingkan dengan tipe-tipe integer
lainnya. Tipe Int banyak digunakan untuk indeks dalam struktur
pengulangan maupun dalam konstruksi sebuah array.Selain itu, secara
teori setiap ekspresi yang melibatkan tipe integer byte, short, int,
long) semuanya akan dipromosikan ke int terlebih
dahulu sebelum dilakukan proses perhitungan.
Contoh :
class HitungGaji{public static void main(String[]args){int gaji;int
lamaKerja;int besarGajigaji=5000000; lamaKerja=4; besarGaji=gaji*lamaKerja;
System.out.println(besarGaji);}}
Long : Tipe ini
digunakan untuk kasus-kasus tertentu yang nilainya berada di luar rentang
tipe int, karna tipe ini punya range paling tinggi dibanding Integer
lainnya. Dengan kata lain, tipe long terpaksa digunakan jika
data memiliki range diluar range int.
Contoh:
public class MassaPlanet{public static void main (String[]args){long
volum=1864824217374668; long massaJenis=77886; long
massa=volum*massaJenis;System.out.println(massa);}}
2.
Floating-Point (Bilangan Pecahan)
Tipe floating-point digunakan
untuk merepresentasikan nilai-nilai yang mengandung pecahan atau angka decimal
di belakang koma, seperti 3.1416,5.25, dan sebagainya. Bilangan semacam ini
disebut sebagai bilangan riil. Dalam Java tipe ini dibedakan menjadi dua jenis,
yaitu float, dan double. Untuk jelasnya akan dijelaskan
oleh tabel dan penjelasan di bawah ini :
Tipe
|
Ukuran
|
Range
|
Presisi (jumlah digit)
|
|
bytes
|
Bit
|
|||
float
|
4
|
32
|
+/- 3.4 x 1038
|
6-7
|
double
|
8
|
64
|
+/- 1.8 x 10308
|
15
|
Float : Tipe ini
digunakan untuk menandakan nilai–nilai yang mengandung presisi atau ketelitan
tunggal (single-precision) yang menggunakan ruang penyimpanan 32-bit.
Presisi tunggal biasanya lebih cepat untuk processor-processor tertentu dan
memakan ruang penyimpanan setengah kali lebih sedikit dibandingkan presisi
ganda (double precision). Permasalahan yang timbul dari pemakaian
tipe float untuk nilai-nilai yang terlalu kecil atau justru
terlalu besar, karena nilai yang dihasilkan akan menjadi tidak akurat.
Contoh penggunaan variabel :
float suhu;
Double : Tipe ini
mengandung tingkat ketelitian ganda atau presisi ganda (double precision)
dan menggunakan ruang penyimpanan 64-bit untuk menyimpan nilai. Tipe double tentu
lebih cepat untuk melakukan perhitungan-perhitungan matematis daripad
tipe float. Untuk perhitungan yang bersifat bilangan riil dan
menghasilkan hasil yang lebih akurat, maka lebih baik menggunakan tipe double.
Contoh :
class KelilingLingkaran {public static void main (String[] args) {double pi
= 3.1416;double r = 2.12; double keliling;keliling = 2*pi*r;
System.out.println(“Keliling Lingkaran = ”+ keliling);}}
3. Char
Tipe data char merupakan tipe
untuk menyatakan sebuah karakter. Java menggunakan
karakter Unicode untuk merepresentasikan semua karakter yang
ada . Unicode ialah sekumpulan karakter yang terdapat
pada semua bahasa, seperti bahasa Latin, Arab, Yunani dan lain-lainnya. Karena
bahasa Java dirancang untuk dapat diterapkan di berbagai macam platform,
maka Java menggunakan karakter Unicode yang membutuhkan ukuran
16-bit. Untuk karakter-karakter yang tidak dapat diketikkan secara langsung
melalui keyboard, java menyediakan beberapa escape sequence (pasangan
karakter yang dianggap sebagai karakter tunggal). Escape sequence tidak
dianggap sebagai String, melainkan tetap sebagai tipe karakter khusus.
Di bawah ini akan dijelaskan beberapa contoh tentang escape sequence.
Escape Sequence
|
Keterangan
|
\ddd
|
Karakter octal (ddd)
|
\uxxxx
|
Karakter Unicode heksadecimal (xxxx)
|
\’
|
Petik tunggal
|
\’’
|
Petik ganda
|
\\
|
Backslash
|
\r
|
Carriage return
|
\n
|
Baris baru (line feed)
|
\f
|
Form feed
|
\t
|
Tab
|
\b
|
Backspace
|
Contoh :
class ContohKarakter {public static void main (String[] args) {char ch =
65;// 65 merupakan kode untuk karakter
A;System.out.println(“ch1=”+ch);ch++; //increment(penaikan
nilai sebesar 1) System.out.println(“ch2 = ”+ ch);}}
4. Boolean
Tipe boolean adalah
tipe data yang digunakan untuk menampung nilai logika, yaitu nilai yang hanya
memiliki dua buah kemungkinan (benar atau salah). Tipe ini ditandai dengan kata
kunci Boolean. Dalam bahasa Java, nilai benar dipresentasikan
dengan kata kunci true dan nilai salah dengan kata kunci false.
Contoh :
class ContohBolean {public static void main (String[] args) {boolean a =
true;if (a) {System.out.println(“Perintah dilaksanakan ”); }//negasi dari aIf
(!a) {System.out.println(“Perintah tidak dilaksanakan ”);}}}
B. Tipe Data Referensi
1. Class
Kelas dapat didefiniskan
sebagai cetak biru (blueprint) atau prototipe/kerangka yang
mendefiniskan variabel-variabel (data) dan method-method (perilaku) umum dari
sebuah objek. Dengan kata lain kelas adalah sebuah kesatuan yang terintegrasi
antara method dan data yang mengacu pada suatu objek.
Dalam dunia permrograman,
sebenarnya kelas tidak jauh berbeda dengan tipe data sederhana. Perbedaannya,
tipe data sederhana digunakan untuk mendeklarasikan variabel ‘normal’,
sedangkan kelas digunakan untuk mendeklarasikan sebuah variabel yang berupa
objek. Variabel yang berupa objek ini sering disebut dengan referensi objek (object
reference).
Pada saat kita membuat sebuah
kelas baru. Sekali didefiniskan, maka tipe data baru ini dapat digunakan untuk
membuat suatu objek dari tipe tersebut. Dengan kata lain, kelas adalah pola
(template) untuk pembuatan objek, dan objek adalah wujud nyata (instance) dari
sebuah kelas.
Contoh :
public Class Mahasiswa{public String nama;public int nrp;Mahasiswa(String
a, int b){nama =a;nrp= b;}public void cetak (){System.out.println(“Nama :
“+nama+” nrp : “+nrp);}}
Setelah kita membuat sebuah
kelas, untuk menggunakannya maka kita harus membuat sebuah instance dari kelas
tersebut. Berikut cara membuat objek dari kelas :
class Demo {public static void
main(String[]args){Mahasiswa mhs;mhs = new Mahasiswa(“ZAINUL”,5311100048)}}
2. Array
Tipe data ini memiliki
kemampuan untuk menggunakan satu variabel yang dapat menyimpan sebuah data list
dan kemudian memanipulasinya dengan lebih efektif.
Sebuah array akan menyimpan
beberapa item data yang memiliki tipe data sama didalam sebuah blok memori yang
berdekatan yang kemudian dibagai menjadi beberapa slot.
3. Interface
Interface merupakan sekumpulan
method yang hanya memuat deklarasi dan struktur method, tanpa detail
implementasinya. Sedangkan detail dari method tersebut berada pada class yang
mengimplementasikan interface tersebut. Interface digunakan bila Anda ingin
mengaplikasikan suatu method yang spesifik, yang tidak diperoleh dari
proses inheritance yang lebih terbatas. Tipe data yang boleh pada interface
hanya tipe data konstan.
c.
Tipe Data C++
Borland C++ memiliki 7
tipe data dasar diantaranya Char, Int, Short, Long, Float, Double dan Long
Double, dan berikut adalah tabel mengenai tipe data dasar C++
Tipe Data
|
Uk. Memory
|
Jangkauan Nilai
|
Jumlah Digit
|
Char
|
1 Byte
|
-128 s/d 127
|
|
Int
|
2 Byte
|
-32768 s/d 32767
|
|
Short
|
2 Byte
|
-32768 s/d32767
|
|
Long
|
4 Byte
|
-2147435648 s/d 2147435647
|
|
Float
|
4 Byte
|
3.4 X -38 s/d 3.4X
1038
|
5 - 7
|
Double
|
8 Byte
|
1.7X10-308 s/d
1.7X10308
|
15 - 16
|
Long Double
|
10 Byte
|
3.4X10-4932 s/d
1.1X104932
|
19
|
Selain tipe data dasar,
borland C++ juga memiliki tipe data tambahan yaitu unsigned yang
hanya digunakan bila data bernilai positif saja, berikut tabel data tambahan
C++:
Tipe Data
|
Jumlah Memory
|
Jangkauan Nilai
|
Unsigned Integer
|
2 byte
|
0-65535
|
Unsigned Character
|
1 byte
|
0-255
|
Unsigned Long Integer
|
4 byte
|
0-4294967295
|
1.4 Elemen data :
File
: Kumpulan record record sejenis
Record
: Kumpulan data untuk suatu objek tertentu.
Field
: Medan data bagian dari record yang menyatakan suatu medan data.
Char
: Suatu kode yang berisi sekumpulan bit untuk menyatakan huruf, angka dan tanda
tanda yang lain
Contoh :
File mahasiswa :
NIM
|
Name
|
Address
|
Date
|
10
|
AA
|
40
|
6
|
File diperlukan untuk support
suatu proses.
1.5 Algoritma dan Metode
Pemrograman
Adalah suatu
metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur
dan dituliskan secara sistematis yang akan dikerjakan untuk menyelesaiakan
suatu masalah dengan bantuan komputer. Atau dapat
didefinisikan himpunan langkah langkah instruksi untuk melaksanakan suatu
pekerjaan tertentu dengan beberapa criteria, seperti : input, output, jelas dan
tidak meragukan, ada effective dan terminate.
Fokusnya adalah bagaimana memecahkan suatu masalah dengan algoritma yang
tepat.
Dasar dasar algoritma terdiri :
- Statement elementer ( Assignment, comparison, aritmatic statement, operator Boolean dan instruksi I/O)
- Statement control ( Alternatife [if then else/Case – of], Pengulangan [Repeat-until, Do while, For do] dan percabangan [Go to Label)
Algoritma merupakan jantung kehidupan semua program tanpa kecuali meski
untuk aplikasi paling sederhana. Algoritma adalah metode presisi yang dapat
digunakan komputer untuk menyelesaikan masalah. Algoritma disusun dari
sekumpulan langkah berhingga, masing-masing langkah mungkin memerlukan satu
operasi atau lebih. Algoritma umumnya dirancang untuk menyelesaikan suatu
masalah spesifik dan dengan usaha yang paling minimal.
Ciri-ciri algoritma itu terdiri dari : masukan (input), keluaran (output),
jelas(definite), efektif (efective), dan berakhir (terminate).
QUIZ (1)
dikumpulkan:
1. Apa pendapat dan pemahaman
anda mengenai pengertian Algoritma?
2. Uraikan penjelasan anda
berkaitan dengan struktur data menurut pemahaman anda!
3. Menurut pendapat anda apa
kaitannya struktur data
dengan penyelesaian masalah dengan komputer?
4. Apa pandangan anda tentang
type data : integer, real, boolean? Jelaskan!
Diketahui data sebagai berikut: File :
Pegawai :
NIP
|
Nama
|
Tanggal Lahir
|
Alamat
|
Pendidikan
|
Status
|
5. Uraikan elemen data menurut
anda
6.Uraikan kesimpulan anda
setelah mempelajari Bab I
Bab 2 Array
(Larik)
1. Definisi
- Array Adalah kelompok peubah tunggal atau multidimensi. Larik juga dapat diartikan sebagai kumpulan sejumlah nilai-nilai bertipe sama yang bisa ditunjuk menggunakan nama peubah yang sama dan diikuti indeksnya.
- Array adalah suatu tipe data terstruktur yang terdapat dalam memori yang terdiri dari sejumlah elemen(tempat) yang mempunyai tipe data yang sama dan merupakan gabungan dari beberapa variabel sejenis serta memiliki jumlah komponen yang jumlahnya tetap.
- Array adalah barisan lokasi memori yang memiliki jenis serta memiliki jumlah kompone tetap.
- Adalah kumpulan data homogen yang ukurannya atau jumlah elemen maksimumnya telah di ketahui dari awal.
- Sementara Array didefinisikan juga merupakan tipe terstruktur yang terdiri dari sejumlah komponen komponen dengan type yang sama.
- Dan definisi lain menyebutkan array adalah sebagai suatu komponen hingga elemen, terurut dan homogen.
Kesimpulan penulis : Array adalah
kelompok peubah tunggal atau multidimensi yang homogen (mempunyai tipe yang
sama), jumlahnya tidak terbatas dapat diketahui dari awal dan tetap dalam
running serta merupakan data sequensial terstruktur.
Contoh:
10
|
44
|
2
|
76
|
0
|
56
|
70
|
8
|
Value
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
indeks
|
Gambar
2.1 Contoh Array
2. Pengaksesan Array
Akses Array
dilakukan dg cara menyebutkan nama larik diikuti bilangan indeksnya.
Bil =
Bilangan[5]; Artinya peubah Bil diset (diisi) dg variabel bilangan dg indeks
ke-5 dg demikian jika kita perhatian gambar di atas, maka Bil berisi nilai 56.
Selanjutnya
dengan cara yang ekivalen, kita juga dapat memberi nilai elemen pada larik
(juga dengan menyebutkan nama larik yang diikuti dengan indeksnya.
Misal kita
tuliskan :
Bilangan[3]
= 23; maka akan terlihat seperti gambar berikut:
45
|
30
|
34
|
23
|
22
|
0
|
1
|
2
|
3
|
4
|
Gambar 2.2 Contoh Pengesetan nilai
pada Array
Artinya
bahwa kita telah mengisi elemen berindeks [3] dengan nilai 23.
3. Pendeklarasian Array
Pendeklarasian
array dalam java diinisialisasikan dengan perintah new yang menciptakan instansiasi dari tipe data rujukan. Perhatikan
contoh berikut
Int[ ]
Bilangan= new int[10];
Dapat
dijelaskan bahwa Bilangan adalah nama dari larik(array), kemudian nilai 10
mendeklarasikan bahwa akan ada 10 elemen dalam larik yang bersankutan. Dan
ingat dalam bahasa java indeks selalu dimulai dari 0 dan berlanjut hingga
panjang larik dikurangi 1(N-1), dan semua elemen harus memiliki tipe data yang sama
4. Jenis-jenis Array
a. Array dimensi satu
Adalah array
yang merupakan kumpulan elemen-elemen yang identik yang tersusun dalam satu
baris.
Misal Array
diberi nama Nilai, maka dapat digambarkan sebagai berikut:
Nilai (0)
|
Nilai (1)
|
Nilai (2)
|
......
|
Nilai (N)
|
4
|
5
|
5
|
6
|
2
|
0
|
1
|
2
|
3
|
4
|
Gambar 2.3 ContohArray dimensi1
Implementasi pada Java
Static Int [
] larik = new int[25];
Pernyataan
ini bermaksud bahwa kita akan membuat larik 1 matra yang berukuran 25
elamen.(static maksudnya agar larik ini dapat dimanfaatkan seluruh program).
2
|
3
|
1
|
6
|
6
|
6
|
8
|
8
|
0
|
9
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
...
|
N-1
|
Gambar 2.4 Contoh ImplementasiArray pada java
b. Array dua dimensi
Adalah
kumpulan elemen-elemen yang identik, yang tersusun dalam beberapa baris dan
kolom yang bertipe data yang sama. Atau dapat di anggap bahwa array dua dimensi
sebagai array dalam dalam array. Pengambaran array dua dimensi secara logic
dapat dilihat pada gambar berikut:
[2]
|
[2]
|
[3]
|
[4]
|
|
[1]
|
2
|
3
|
4
|
5
|
[2]
|
4
|
5
|
6
|
7
|
[3]
|
4
|
5
|
6
|
7
|
Gambar: 2.5
logika Array dua dimensi
Berdasarkan
gambaran diatas, maka dapat dijelaskan bahwa array 2 dimensi dalam konteks ilmu
matematika disebut sebagai matriks.
Implementasi pada Java
Matrik
merupakan implementasi array 2 matra, pada java di deklarasikan sebagai
berikut:
Public class
Matrix{
Static int[
] [ ] Matrix1 = new int [10] [10];
Static int[
] [ ] Matrix2 = new int [10] [10];
Static int [
] [ ] MatrixHasil = new int [10] [10];
Static int
ukuran;
Public
static void main (String [ ] args) {
System.out.print
(“Masukan
ukuran matrix: “);
ukuran =
inputData();
bacaMatrix
();
tambahkanMatrix();
tulisHasil();
}
5. Representasi Array Di Memori
a. Array
dimensi satu
Nilai (0)
|
Nilai (1)
|
Nilai (2)
|
…
|
Nilai (N)
|
Gambar:
2.6 logika representasi Array satu dimensi
Jika
diketahui suatu array A dengan tipe data T dan sub skrip bergerak dari L ke U,
maka notasi Array dapat dituliskan sbb:
- A ( L:U ) = (A(i), i=L, L+1, L+2…U dan setiap elemen A(i) bertipe T.
- Jika diketahui batas atas = U dan batas bawah = L, maka banyaknya elemen Array A (L:U) dan U : N maka range Array A ( 0 : N ).
- Representasi di memori
@A(0)
|
A(0)
|
|
@A(1)
|
A(1)
|
|
@A(2)
|
A(2)
|
|
@A(3)
|
A(3)
|
|
@A(4)
|
A(4)
|
|
@A(i)
|
A(i)
|
|
@A(n-1)
|
A(n-1)
|
|
@A(n)
|
A(n)
|
Gambar : 2.7 representasi array 1
dimensi di memori
b. Representasi 2 Dimensi
Representasi
kolom perkolom ( coloumn major order )
@M ( i,,j )
= @M [ i,j ] + { [ j – 1 ] K + (i – 1) ] } â„“
i = Baris; â„“
= Panjang elemen; j = Kolom; K = Banyaknya elemen perkolom
Untuk M [
k,n]
M [ 1,1 ]
|
M [ 2,1 ]
|
…..
|
M [ K,1 ]
|
M [ 1,2 ]
|
M [ 2,2 ]
|
Gambar: 2.8
representasi array 2 dimensi di memori coloumn major order
Contoh :
Tunjukan lokasi M [2,3] dari matriks M [3,4] jika l = 1 dengan menggunakan
coloumn major order
Jawab : @ M
[ 2,3 ] = @ M [1,1] + ((3-1) . 3 + ( 2 – 1 )) . 1
= @ M [1,1] + 7
Representasi
Baris Per baris ( Row Major Order )
@ M
[I,J] = @ M [1,1] + (( i – 1) . n + (j – 1)) .1
Dimana
besaran lain sama dengan representasi kolom perkolom hanya n
= banyaknya
elemen per baris
M [1.1]
|
M [1,2]
|
…..
|
M [1,N]
|
M [2,1]
|
M [2,2]
|
Gambar: 2.9
representasi array 2 dimensi di memori dengan row major order
c. Representasi Multi Dimensi
Memori bisa
kita pandang sebagai 1 dimensional Array dengan alamat dari 1 s/d m. Untuk
menggambarkan n dimensional array dalam 1 dimensional array maka digunakan
pernyataan sebagai berikut :
Pernyataan
array : A (l1 : u1, I2 : u2,…….. ln : un)
Jumlah
elemen dalam array : (ui – li + 1)
Dimana : i1 = harga
permulaan dari 1 dimensi
U1 = harga akhir
dari 1 dimensi
Contoh : A(4:5, 2:4, 1:2, 3:4)
Jml-Elemen =
|
(5-4+1)
|
.
|
(4-2+1)
|
.
|
(2-1+1)
|
.
|
(4-3+1)
|
||
2
|
.
|
3
|
.
|
2
|
2
|
=
|
24
|
Dengan menggunakan
row mayor, elemen disimpan dalam bentuk
A(4,2,1,3),
A(4,2,1,4), A(4,2,2,3), A(4,2,2,4)
A(4,3,1,3),
A(4,3,1,4), A(4,3,2,3), A(4,3,2,4)
A(4,4,1,3),
A(4,4,1,4), A(4,4,2,3), A(4,4,2,4)
A(5,2,1,3), A(5,2,1,4), A(5,2,2,3), A(5,2,2,4)
A(5,3,1,3),
A(5,3,1,4), A(5,3,2,3), A(5,3,2,4)
A(5,4,1,3),
A(5,4,1,4), A(5,4,2,3), A(5,4,2,4)
Misal alamat
A(5,2,1,4)= A(4,2,1,3)+ (5-4) 3.2.2+(2-2)2.2+(1-1)2+(4-3).1
= A(4,2,1,3)+1.3.2.2+0.2.2+0.2+1
= A(4,2,1,3)+12+1
=
A(4,2,1,3)+13
STMIK MUHAMMADIYAH JAKARTA
SOAL LATIHAN STRUKTUR DATA
SOAL LATIHAN STRUKTUR DATA
1. Diketahui data arsip di
organisasikan berdasarkan nomor sebagai berikut 101,102,103,104 dan 105. Jika
data tersebut di simpan dengan konsep array 1 dimensi, coba gambarkan
representasi data tersebut dalam memori!
2. Diketahui
Array dalam bentuk dua dimensi (matrik) sebagai berikut :
a. Jika angka 1 mempunyai alamat A(i,j)=A(2,2), coba uraikan perkalian matrik AXB=C berdasarkan alamat index masing-masing elemen matrik, sesuai dengan hukum perkalian matrik pada matematika.
b. Jelaskan menurut pemahaman anda perbedaan array 1 dimensi, 2 dimensi dan 3 dimensi (10).
3. Diketahui
array A(3:5, 2:4, 1:3, 3 :4), tentukan jumlah elemen array dan coba
carikan alamat (5,2,1,4)
Jika diperhatikan gambar 3.1, maka NOEL(S)=5, dan TOP(S)=E
Bab 3 Stack (Tumpukan)
A. Definisi
- Stack adalah suatu tumpukan dari benda.
- Stack adalah bentuk khusus dari list linier.
- Adalah kasus khusus ordered list dengan penyisipan dan penghapusan dilakukan disalah satu ujung. Misalnya Stack S=(a1, a2, … an), maka elemen a1 adalah elemen terbawah dan elemen ai adalah diatas elemen ai-1 dimana 1<i≤n.
- Batasan-batasan terhadap stack ini berimplikasi jika elemen A, B, C, D, E ditambahkan/dimasukan ke Stack, urutan penghapusan/pengambilan seluruh elemen distack tersebut akan terjadi sebagai berikut E, D, C, B, A.
- Stack disebut juga LIFO (last in first out) yaitu elemen yang lebih akhir disisipkan menjadi yang paling awal untuk di ambil.
- Stack disebut juga sebagai pushdown.
- Pada stack penghapusan dan pemasukan elemen hanya dapat dilakukan pada satu posisi, yakni posisi akhir dari list (stack) disebut sebagai puncak atau Top dari stack. Elemen stack S pada posisi ini dinyatakan dengan Top(S).
- Bila stack S=[S1, S2, … ST], maka Top(S) adalah ST. Banyaknya eleman stack S pada suatu saat tertentu disebut NOEL(S). jadi untuk stack diatas NOEL(S)=T.
- Ilustrasi Stack :
Jika diperhatikan gambar 3.1, maka NOEL(S)=5, dan TOP(S)=E
·
Jika Stack belum diisi, berarti Stack (S)=[ ] hampa.
Dan NOEL(S)=0, dan
·
TOP(S)= tidak terdefinisi.
B. Karakteristik Stack (ADT
Stack)
1. Elemen stack yaitu item-item
data yang terdapat dielemen stack
2. Top (elemen puncak dari
stack)
3. Jumlah elemen pada stack
4. Status/kondisi stack. Kondisi
stack yang menjadi perhatian meliputi dua
kondisi, yaitu :
-
Penuh, yaitu bila elemen di stack mencapai kapasitas maksimum, sehingga
tidak memungkinkan adanya penambahan ke stack dan untuk menghindari overflow
jika dilakukan penambahan elemen dalam kondisi stack penuh.
-
Kosong, yaitu bila dalam stack tidak ada elemen, sehingga tidak
memungkinkan pengambilan elemen stack untuk menghindari overflow jika
pengambilan elemen stack dalam kondisi kosong.
C. Deklarasi dan Kondisi Stack
Tumpukan (stack) jika digambarkan
dengan array, maka dalam bahasa pemrograman PASCAL dapat dituliskan atau
dideklarasikan sebagai berikut :
Catatan : stack digambarkan dengan
array S
Sedangkan untuk kondisi Stack,
stack memiliki 3 kondisi, yaitu :
AWAL
|
KOSONG
|
PENUH
|
TOP=0
|
TOP=0
|
TOP=N
|
D. Proses yang dapat dilakukan terhadap
stack
1. Push: Push berarti menyimpan atau
memasukan data ke dalam stack, maksudnya bahwa untuk dapat melakukan proses
menyimpan data atau memasukkan data kedalam tumpukan, maka perintah yang
digunakan adalah instruksi PUSH.
Bila dialokasikan suatu array
dengan N elemen yang akan digunakan sebagai stack, maka cara memasukan data
(push) adalah mengikuti prosedur sebagai berikut :
- Cek kondisi Top, apakah Top < N,
- Jika Top < N, kemudian naikkan Top dengan 1
- Isikan data kedalam elemen yang ditunjuk oleh Top.
2. Pop: Pop berarti mengambil data dari
stack, maksudnya bahwa untuk dapat melakukan proses pengambilan data dari
tumpukan, maka perintah yang digunakan adalah dengan menggunakan instruksi Pop.
Bila dialokasikan suatu array
dengan N elemen yang akan digunakan sebagai stack, maka cara mengambil data
(pop) adalah mengikuti prosedur sebagai berikut :
- Cek kondisi Top, apakah Top > 0,
- Jika Top > 0, kemudian copy data dari elemen yang ditunjuk Top kedalam suatu variable.
- Turunkan Top
Selanjutnya diberikan ALGORITMA
dalam bentuk subprogram yaitu PROCEDURE sebagai berikut: Dalam PASCAL,
pemanggilan PROCEDURE dilakukan langsung dengan namanya.
PROCEDURE PUSH (X : ……….);
BEGIN
IF TOP < N THEN
BEGIN
TOP : = TOP + 1
S [TOP] : = X ;
END ;
ELSE WRITE ( ‘ STACK PENUH ‘ ) ;
END ;
PROCEDURE POP (VAR X : ……………….) ;
BEGIN
IF TOP > 0 THEN
BEGIN
X : = S [TOP] ;
TOP : = TOP – 1 ;
END ;
ELSE WRITE (‘ STACK KOSONG ‘) ;
END ;
E. Varian Stack
1. Single Stack dengan Array: Adalah penggunaan array dalam
penerapan stack tunggal untuk dapat melakukan operasi-operasi yang
diperbolehkan dalam stack. Karena stack mempunyai sifat bahwa pengambilan/penghapusan
elemen dalam stack harus dimulai dari elemen teratas, maka dalam kaitannya
dengan pemakaian array pengambilan dan penghapusan elemen stack harus
didasarkan atas penunjukan langsung atas indexs array tersebut. Untuk jelasnya
berikut diberikan ilustrasi stack dengan elemen dan indeks yang menyertainya.
Gambar 3.3 Ilustrasi Proses Push
dan Pop pada Stack
Dari gambar 3.3 dapat dijelaskan
bahwa indeks array ke-1 diisi oleh CPU, indeks ke-2 berisi Monitor, dan indeks
ke-3 diisi CD Rom. Karena elemen stack hanya mencapai indeks ke-3, maka maka
Top pada stack tersebut adalah 3, dan maks stack tersebut adalah 7.
Selanjutnya diberikan contoh
deklarasi constant, tipe, dan variable yang akan dipakai dalam penjelasan
operasi-operasi stack dengan array.
Conts
Max = 7 ;
Type
TipeData = byte;
Stack =array [ 1.. max ] of TipeData;
Var
Top : TipeData;
Operasi – Operasi Pada Single Stack
dengan Array
Create : adalah operasi
stack yang berfungsi untuk menciptakan sebuah stack baru yang masih kosong.
* konsepnya adalah Top menunjukkan
tingginya tumpukan stack. Jika tinggi tumpukan = 0, berarti stack dalam kondisi
kosong.
Gambar 3.4 Ilustrasi kondisi stack
Full : adalah fungsi
operasi stack yang berguna untuk mengecek atau memeriksa apakah stack yang ada
sudah penuh.
Push : adalah operasi
stack yang berfungsi untuk menambahkan sebuah elemen ke dalam stack, dan tidak
bisa dilakukan jika stack sudah penuh.
Contoh :
Contoh
Ilustrasi stack setelah operasi
Push.
Mula-mula Stack(Top)=0, karena ada
operasi Push(30), maka Top=Top+1, sehingga isi stack[1]:=30. untuk stack
berikutnya dapat dilakukan dengan cara yang sama
Empty : adalah fungsi
operasi stack yang berguna untuk mengecek atau memeriksa apakah stack yang ada
kosong.
Pop : adalah operasi stack
yang berfungsi untuk mengambil elemen teratas dari stack, dan tidak bisa
dilakukan jika stack dalam kondisi kosong.
Clear : suatu operasi
stack yang berfungsi untuk mengosongkan
stack, jika top=0, stack berarti kosong.
2. Double Stack dengan Array: Adalah teknik khusus yang
dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan
array. Intinya adalah penggunaan hanya sebuah array untuk menampung dua array.
Dengan memperhatikan ilustrasi diatas,
maka dapat dijelaskan bahwa pada single stack, stack haya bergerak satu arah,
sedangkan pada double stack, stack dapat beroperasi pada dua arah yaitu top1
dan top2. Jika top1 dan top2 bertemu, maka dalam hal ini double stack berarti
sudah penuh.
Contoh deklarasi :
Const
Max = 8;
Type
TypeData = Integer;
Stack = array[1..Max] of Byte;
Var
Top : array [1..2] of Byte;
Operasi – Operasi Pada Double Stack
dengan Array
Create : membuat stack
baru yang masih kosong
Full : memeriksa apakah
double stack sudah penuh
Push : memasukan sebuah
elemen ke salah satu stack
Empty : function berfungsi
untuk memeriksa apakah stack1 atau stack2 kosong.
Pop : mengeluarkan elemen
teratas dari salah satu stack.
Clear : operasi yang
berfungsi untuk mengosongkan salah satu stack
3. Stack dengan Single Linked List
Cara lain untuk mengimplementasikan
stack selain dengan menggunakan array adalah dengan menggunakan single linked
list.
Kelebihan menggunakan linked list
jika di komparasikan dengan array adalah penggunaan alokasi memori yang dinamis
sehingga menghindari pemboros memori. Sebagai contoh misalnya pada array
disediakan untuk stack berisi 200 elemen, sementara ketika dipakai oleh user
hanya diisi 100 elemen, maka dalam hal ini telah terjadi pemborosan memori
untuk sisa 100 tempat elemen yang tidak dipakai. Dengan menggunakan linked list
maka tempat yang disediakan akan sesuai dengan banyaknya elemen yang yang
mengisi stack.
Berikut diberikan contoh deklarasi
tipe, dan variable yang akan dipakai dalam penjelasan operasi operasi stack
dengan linked list.
Type
TipeData = Byte;
Point = ^simpul;
Simpul = record
Isi : TipeData;
Next : Point;
end;
var
Top : Point;
Operasi operasi pada Stack dengan
Single Linked List :
Create : adalah Procedure
yang digunakan untuk membuat stack baru yang kosong.
Procedure Create;
Begin
Top:= nil;
End;
Empty : adalah sebuah
function untuk memeriksa apakah stack yang ada masih kosong atau sudah penuh.
Push : adalah suatu proses
memasukan elemen baru dalam stack.
Pop : adalah proses
mengeluarkan elemen teratas dari stack
Clear : adalah suatu
proses menghapus stack yang ada.
F. Penggunaan ADT (Abstrak Data
Type) Stack
-
Simulasi tumpukan didunia nyata
-
Pemanggilan fungsi/procedure
-
Implementasi fungsi / procedure rekursi
-
Penanganan Interupsi
-
Evaluasi Ekspresi
-
Konversi infiks ke postfiks
-
Konversi basis 10 ke biner.






























Tidak ada komentar:
Posting Komentar