By: Abdul Jamil, S. Kom, MM - Jan s/d Mar'14
Bab 1 Konsepsi Struktur Data
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
Jawaban :
13.3.0113 – Hendra Setia S – STMIK Muhammadiyah
2. Struktur data adalah suatu pengelolaan data sehingga data dapat dipergunakan secara lebih efisien dan efektif. Dalam bahasa pemrograman, struktur data seringkali ditampakkan secaa fisik dalam bentuk tabel (biasanya pada bahasa pemrograman/pengelolaan database berbasis visual), namun pada beberapa bahasa pemrograman yang tidak berbasis visual, strutkur data lebih berupa pengelolaan data dengan aturan-aturan tertentu.
3. Kaitan Struktur Data dg 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.
4.
a. 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.
b. 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.Adalah macam atau isi data dalam suatu variable dalam bahasa program. Atau jenis data yang ditangani bahasa pemrogramman.
c. 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).
5.
NIP
|
Nama
|
Tanggal Lahir
|
Alamat
|
Pendidikan
|
Status
|
Integer
|
Char
|
Char => Datetime
|
Char => VarChar
|
Char
|
Boolean
|
6. Penyelesaian permasalahan dengan penggunaan komputer berhadapan dengan empat hal, yaitu:
a. Pemahaman secara menyeluruh keterhubungan elemen-elemen data yang relevan terhadap solusi masalah.
b. Pembuatan keputusan operasi-operasi yang dilakukan oleh elemen data.
c. 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.
d. Pengambilan keputusan mengenai bahasa pemrograman terbaik untuk menerjamahkan solusi masalah menjadi program atau sistem.
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
13.3.0113 – Hendra Setia S – STMIK Muhammadiyah
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!
101
|
102
|
103
|
104
|
105
|
0
|
1
|
2
|
3
|
4
|
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).
Array 1 dimensi : Adalah array yang merupakan kumpulan elemen-elemen yang identik yang tersusun dalam satu baris.
Array 2 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.
Array 3 dimensi : Adalah pengembangan dari Array 2 dimensi yang sering disebut dengan Matriks sederhana.
3. Diketahui array A(3:5, 2:4, 1:3, 3 :4), tentukan jumlah elemen array dan coba carikan alamat (5,2,1,4)
JmlElemen =
|
(5-3+1)
|
.
|
(4-2+1)
|
.
|
(3-1+1)
|
.
|
(4-3+1)
| |||
3
|
.
|
3
|
.
|
3
|
2
|
=
|
54
| |||
Dengan menggunakan row mayor, elemen disimpan dalam bentuk
Misal alamat A(5,2,1,4) = A(3,2,1,3) + (5-3) 3.2.2 + (2-2)2.2 + (1-1)2 + (4-3).1
= A(3,2,1,3) + 2.3.3.2 + 0.3.2 + 0.2 + 1
= A(3,2,1,3) + 36 + 1
= A(3,2,1,3) + 37
A(3,2,1,3), A(3,2,1,4), A(3,2,2,3), A(3,2,2,4), A(3,2,3,3), A(3,2,3,4)
A(3,3,1,3), A(3,3,1,4), A(3,3,2,3), A(3,3,2,4), A(3,3,3,3), A(3,3,3,4)
A(3,4,1,3), A(3,4,1,4), A(3,4,2,3), A(3,4,2,4), A(3,4,3,3), A(3,4,3,4)
A(4,2,1,3), A(4,2,1,4), A(4,2,2,3), A(4,2,2,4), A(4,2,3,3), A(4,2,3,4)
A(4,3,1,3), A(4,3,1,4), A(4,3,2,3), A(4,3,2,4), A(4,3,3,3), A(4,3,3,4)
A(4,4,1,3), A(4,4,1,4), A(4,4,2,3), A(4,4,2,4), A(4,4,3,3), A(4,4,3,4)
A(5,2,1,3), A(5,2,1,4), A(5,2,2,3), A(5,2,2,4), A(5,2,3,3), A(5,2,3,4)
A(5,3,1,3), A(5,3,1,4), A(5,3,2,3), A(5,3,2,4), A(5,3,3,3), A(5,3,3,4)
A(5,4,1,3), A(5,4,1,4), A(5,4,2,3), A(5,4,2,4), A(5,4,3,3), A(5,4,3,4)
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