Selasa, 05 Juni 2012

STRUKTUR DATA

PENGERTIAN STRUKTUR DATA
Dalam istilah ilmu komputer, sebuah struktur data adalah cara penyimpanan, penyusunan dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien.
Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom untuk data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk pengolahan database (misalnya untuk keperluan data keuangan) atau untuk pengolah kata (word processor) yang kolomnya berubah secara dinamis. Contoh struktur data dapat dilihat pada berkas-berkas lembar-sebar (spreadsheet), pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.

TIPE DATA

Tipe data

Tipe data merupakan bagian program yang paling penting karena tipe data mempengaruhi setiap instruksi yang akan dilaksanakan oleh computer. Misalnya saja 5 dibagi 2 bisa saja menghasilkan hasil yang berbeda tergantung tipe datanya. Jika 5 dan 2 bertipe integer maka akan menghasilkan nilai 2, namun jika keduanya bertipe float maka akan menghasilkan nilai 2.5000000. Pemilihan tipe data yang tepat akan membuat proses operasi data menjadi lebih efisien dan efektif.

Dalam bahasa C terdapat lima tipe data dasar, yaitu :






Tipe Data Char
adalah karakter tunggal range=*signed=-127 sampai 127 *unsigned=0 sampai 255
untuk mengetahui angka desimal yang mempresentasikan huruf apa silahkan temen2 liat tabel ascii disini 
Tipe Data Int (integer)
range=*signed= -214748364 sampai + 2147483648 *unsigned = 0 sampai 4294967295 ex =5,-234,342 (signed (tipe data yang bertanda dalam artian mempunyai nilai positif dan negatif),.unsigned(tipe data yg hanya bernilai positif dan dimulai dari nol,.range tipe data unsigned dua kali dari batas atas tipe data signed).
Tipe Data Long
variables are stored as signed 64-bit (8-byte) integers ranging in value from -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807.
Tipe Data Float
range= -3,4 * 10^38 to 3,4 * 10^38 akurasi sampai 7 digit desimal ex=0,223
Tipe Data Double
range=-1,7*10^308 sampai 1,7*10^308 akurasi sampai 15 digit desimal ex=0,013243

Karakter Khusus

Karakter khusus merupakan karakter yang mewakili suatu perintah khusus dalam pemrograman, karakter khusus tersebut biasa disebut dengan escape.Escape sendiri memberikan intruksi pada praprosesor tanpa melalui include file header. Berikut karakter-karakter khusus dalam C++.



REKURSI

REKURSI
Rekursi adalah proses pengulangan item dengan cara kesamaan-diri. Sebagai contohnya, saat dua cermin berada paralel antara satu dengan yang lain, gambar yang tertangkap adalah suatu bentuk rekursi tak-terbatas. Istilah ini memiliki makna beragam bergantung kepada ragam disiplin mulai dari linguistik sampai logika. Penggunaan paling umum dari rekursi yaitu dalam matematika dan ilmu komputer, dimana ia mengacu kepada suatu metode mendefinisikan fungsi yang mana fungsi tersebut menggunakan definisinya sendiri. Secara spesifik hal ini mendefinisikan suatu instansi tak-terbatas (nilai fungsi), menggunakan ekpresi terbatas yang mana beberapa instansi bisa merujuk kepada instansi lainnya, tapi dengan suatu cara dimana tidak ada perulangan atau keterkaitan tak-terbatas dapat terjadi. Istilah ini juga digunakan secara umum untuk menjelaskan suatu proses pengulangan objek dengan cara kesamaan-diri.

Rekursi merupakan teknik pemrograman yang menyebabkan suatu fungsi/prosedur memanggil dirinya sendiri. Pemanggilan diri sendiri ini berlangsung terus menerus sampai batas terkecil yang nilai dari fungsi tersebut disebutkan secara eksplisit. Salah satu contoh dari penerapan rekursi adalah perhitungan faktorial. 

ARRAY


ARRAY
Array merupakan bagian dasar pembentukan suatu struktur data yang lebih kompleks. Hampir setiap jenis struktur data kompleks dapat disajikan secara logik oleh array.
q  Array : Suatu himpunan hingga elemen yang terurut dan homogen, atau dapat didefinisikan juga sebagai pemesanan alokasi memory sementara pada komputer.
q  Terurut : elemen tersebut dapat diidentifikasi sebagai element pertama, kedua, dan seterusnya sampai elemen ke-n.
q  Homogen : setiap elemen data dari sebuah array tertentu haruslah mempunyai tipe data yang sama.

Karakteristik Array :
1.    Mempunyai batasan dari pemesanan alokasi memory ( bersifat statis)
2.    Mempunyai type data sama ( bersifat Homogen)
3.    Dapat diakses secara acak.
4.    Berurutan ( terstruktur ).

Array mempunyai dimensi :
  1. Array Dimensi Satu (Vektor)
  2. Array Dimensi Banyak.
-          Dimensi Dua (Matriks/Tabel)
-          Dimensi Tiga (Kubik).

ARRAY DIMENSI SATU

Ø  Merupakan bentuk yang sangat sederhana dari array.
Ø  Setiap elemen array mempunyai subskrip/indeks.
Ø  Fungsi indeks/subskrip ini antara lain :
1. Menyatakan posisi elemen pada array tsb.
2. Membedakan dengan elemen lain.
Penggambaran secara fisik Array A(1:N) :
A(1)
A(2)
A(3)
A(4)
A(N)

Ket :                A                                 : nama array
                        1,2,3,4,…,N               : indeks / subskrip
Ø  Secara umum Array Dimensi Satu A dengan tipe T dan subskrip bergerak dari L sampai U ditulis : A(L:U) = (A(I)); I =L , L+1, L+2, …, U
Keterangan :       L : batas bawah indeks / lower bound
                                    U : batas atas indeks / upper bound
                                    A : nama Array
Ø  Banyaknya elemen array disebut Rentang atau Range A(L:U) =   U – L + 1
Ø  Range khusus untuk array Dimensi Satu yang mempunyai batas bawah indeks L=1 dan batas atas U=N, maka Range A adalah A(1:N) =( N – 1) + 1 = N

Contoh :
Data hasil pencatatan suhu suatu ruangan setiap satu jam, selama periode 24 jam ditulis dalam bentuk Array Dimensi Satu menjadi
Misal :
nama arraynya Suhu, berarti elemennya dapat kita tulis sebagai Suhu(I), dengan batas bawah 1 dan batas atas 24.
Suhu(I):menyatakan suhu pada jam ke-I dan 1<=I<=24
Range Suhu(1:24)=(24-1)+1=24

 

ARRAY DIMENSI BANYAK


Ø  Array Dimensi Banyak (Multi-Dimensional ARRAY) :
suatu array yang elemen –elemennya berupa array juga.
Ø  Array Dimensi Dua perlu dua subskrip/indeks :
a. Indeks pertama untuk menyatakan posisi baris
b. Indeks kedua untuk menyatakan posisi kolom
Ø  Secara umum Array Dimensi Dua B dengan elemen-elemen bertype data T dinyatakan sbb : B(L1:U1,L2:U2)={B(I,J)}
L1<=1<=U1, L2<=1<=U2, dan setiap elemen B(I,J) bertype data T
Keterangan :       B  = nama array
L1 = batas bawah indeks baris
L2 = batas bawah indeks kolom
U1 = batas atas indeks baris
U2 = batas atas indeks kolom
Ø  Jumlah elemen baris dari array B adalah (U2 - L2 + 1)
Ø  Jumlah elemen kolom dari array B adalah (U1 – L1 + 1)
Ø  Jumlah total elemen array adalah (U2 – L2 + 1) * (U1 – L1 + 1)
Ø  Suatu array B yang terdiri atas M elemen dimana elemennya berupa array dengan N elemen, maka dapat digambarkan sbb:

1          2          3     ……         J  …..     N     
1






2






3












I




B(I,J)







M







·         Array diatas dituliskan :
B(1:M, 1:N) = B(I,J) ;
Untuk I = 1,2,3,………….,M dan
     J = 1,2,3,……….., N
·         Jumlah elemen array B : M * N
·         Array B berukuran / berorder : M * N

CROSS SECTION


Ø  Cross Section dari array berdimensi dua adalah suatu himpunan yang anggotanya adalah elemen-elemen dlm satu baris saja atau satu kolom saja.

Ø  Notasinya : *

Misal
Array B(1:M ;1:N) = {B(I,J)}  ;          
I = 1,2,3,……..,M dan
J = 1,2,3,…….,N
Maka suatu Cross Section :
B(5,*) = {B(5,1), B(5,2), B(5,3),………, B(5,N)}
            B(*,5) = {B(1,5), B(2,5), B(3,5),………, B(M,5)}

TRANSPOSE


Ø  Transpose dari suatu array berdimensi dua adalah menukar posisi indeksnya ( menukar posisi baris menjadi kolom atau kolom menjadi baris).
Ø    Transpose suatu array dari B dinotasikan BT
Ø  B adalah  array dua dimensi, B(I,J) maka BT  (J,I)
Ø  A adalah array dua dimensi yang berorder M x N memepunyai transpose ( AT) N x M

 

ARRAY DIMENSI TIGA


Ø  Banyaknya indeks yang diperlukan array dimensi tiga adalah 3
Ø  Pada umumnya, suatu array berdimensi N memerlukan N indeks untuk setiap elemennya.
Ø  Secara acak array berdimesi N ditulis sbb:
A(L1:U1, L2:U2, …….., LN:UN ) = (A(I1,I2,……,IN)) dengan LK <= IK<=UK , k = 1,2,3,…, N

Contoh :
Penyajian data  mengenai  jumlah mahsiswa Manajemen Informatika Universitas Gunadarma berdasarkan tingkat, untuk kelas pagi dan malam dan jenis kelamin.
Jawab :
MHS = nama array
I = 1,2,3,4,5 (tingkat 1/5)
J = 1,2 (1 = pagi; 2 = malam )
K = 1,2 (1 = pria; 2= wanita)
MHS (1:5, 1:2,1:2)
Jadi :
§  MHS(3,2,2)
jumlah mahasiswa tingkat 3 MI kelas malam untuk jenis kelamin wanita
§  Cross Section MHS (1,*,2)
jumlah mahasiswa tingkat 1 MI kelas pagi atau malam dan berjenis kelamin wanita.

MAPPING KE STORAGE DARI ARRAY


Skema penyajian dapat dievaluasi berdasarkan 4 karakteristik yaitu :
1. Kesederhanaan dari akses elemen
2. Mudah ditelusuri
3. Efisiensi dari utilitas storage
4. Mudah dikembangkan


ARRAY SATU DIMENSI


Misal:
Diberikan array dengan nama B yang mempunyai indeks 1 s/d N yaitu A(1:N). Cara untuk menyimpan array tersebut adalah sedemikian sehingga urutan secara fisik  dari elemen-elemen adalah sama dengan urutan logik dari elemen.

Untuk mengetahui Address Awal ( Starting Address) dari elemen suatu array A(I) perlu diketahui :

1. Address Awal dari array yang bersangkutan
2. Ukuran dari masing-masing elemen array
Ø  Address Awal dari array dinyatakan dengan notasi Address Awal yaitu B ( Base Location)
Ø  Masing-masing elemennya menggunakan ruang sebanyak S byte.
Ø  Address awal dari elemen ke-I dari array A(1:N) adalah :
B + (I – 1 ) * S
Ø  Address Awal yang mempunyai batas bawah tidak sama dengan satu, elemen  ke-I dari array A(L:U) adalah : B + ( I– L) * S

Misal :
A ( 1:7), address awal dari elemen A(5) adalah : B + ( 5 –1) * S
A ( 3:8), address awal dari elemen A(6) adalah : B + (6 - 3 ) * S
A (-3:4), address awal dari elemen A(2) adalah : B + (2 –(- 3) ) * S

 

ARRAY MULTI DIMENSI

Memori komputer linier, maka untuk memetakan array dimensi banyak ke storage harus dilinierkan.


Alternatif untuk pelinieran tersebut adalah :

q  Row Major

Biasanya digunakan COBOL, PASCAL
Menyimpan pertama kali baris pertama dari array, kemudian baris kedua, ketiga dst
Array Rate ( 1:3 , 1:5)


1
2
3
4
5
1





2


Rate(2,3)


3






Menjadi         

                                                            Rate(2,3)







 
















              Baris 1                                    Baris 2                                     Baris 3        


Ø  Array A(I,J) dari array yang didefinisikan sebagai array 
A(L1:U1 , L2:U2), mempunyai
Address awal : B + (I – L1) * (U2 – L2 +1) * S + ( J – L2) * S

Contoh :

·         Array A(1:3, 1:5) dan elemen A(2,3) mempunyai address awal :
B + (2-1) * (5-1+1) * S + (3-1) * S
B + 5 * S + 2 * S
B + 7 * S
·         Array A(2:4, 3:5) dan elemen A(3,4) mempunyai address awal :
B + (3-2) * (5-3+1) * S + (4-3) * S
B + 1 * 3 *  S + 1 * S
B + 4 * S

q  Column Major

Biasanya digunakan FORTRAN
Menyimpan Kolom pertama dari array kemudian kolom kedua, ketiga, dst
Menjadi
                                                        Rate ( 2,3)
                                                                       















         Kolom 1         Kolom 2            Kolom 3                Kolom 4            Kolom 5


Ø  Array A(I,J) dari array yang didefinisikan sebagai array
 A(L1:U1 , L2:U2) mempunyai
Address awal : B + (J – L2) * (U1 – L1 +1) * S + ( I – L1) * S

Contoh :

·         Array A(1:3, 1:5) dan elemen A(2,3) mempunyai address awal :
B + (3-1) * (3-1+1) * S + (2-1) * S
B + 6 * S + 1 * S
B + 7 * S
·         Array A(2:4, 3:5) dan elemen A(3,4) mempunyai address awal :
B + (4-3) * (4-2+1) * S + (3-2) * S
B + 1 * 3 *  S + 1 * S
B + 4 * S



ARRAY SEGITIGA (TRINGULAR ARRAY)

Ada 2 macam

1. Upper Tringular
Elemen dibawah diagonal utama adalah 0
2. Lower Tringular
Elemen diatas diagonal utama adalah 0

Ø  Suatu array dimana elemen diagonalnya juga nol disebut Strictly (upper/lower) Tringular.
Ø  Pada array Lower Tringular dengan N baris, jumlah maksimum elemen <> 0 pada baris ke-I adalah I       
                               N
Ø  Total elemen <> 0 adalah å   I = ( N * ( N+1)) /2
                                                                  K=1
Ø  Untuk N kecil : tidak ada masalah
Ø  Untuk N besar :
1.    Elemen yang sama dengan nol tidak usah disimpan dalam memori
2.    Pendekatan terhadap masalah ini adalah dengan pelinieran array dan hanya menyimpan array yang tidak nol.

1. Misal

            A array segitiga atas berorder N x N
            B array bersegitiga bawah dengan order ( N-1) x ( N-1)
            A dan B dapat disimpan sebagai array C berorder N x N
            C (I,J) = A(I,J) untuk I <= J
            C(I+1,J) = B(I,J) untuk I >= J

2. Misal 

A array segitiga atas berorder N x N
            B array bersegitiga bawah dengan order  N x  N
            A dan B dapat disimpan sebagai array C berorder N x ( N + 1 )
            C (I,J+1) = A(I,J) untuk I <= J
            C(I,J) = B(I,J) untuk I >= J

3. Misal         

A dan B keduanya merupakan array segitiga atas
Maka untuk menyimpannya secara bersama-sama dengan melakukan transpose terhadap salah satu array tersebut.
            Array C berorder N x (N+1)
            C (I,J+1) = A(I,J) untuk I <= J
            C(J,i) = B(I,J) untuk I >= J

SPARSE ARRAY


Ø  Suatu type khusus yang lain dari array
Ø  Dikatakan Sparse atau jarang karena elemen-elemen yang tidak nolnya relatif lebih sedikit jumlahnya
Ø  Setiap elemen bukan nol pada sparse array dua dimensi dapat direpresentasikan dalam format (Row-Subscript, Column-subscript, value).
Ø  Triple ini dapat diurut berdasarkan Row-Subscript Major dan Colum-Subscript Minor dan disimpan dalam bentuk vektor.
Ø  Penyajian lain dari Sparse Array adalah dengan menggunakan daftar berkait/ Linked List.