struktur data mantap
DESCRIPTION
Materi Struktur DataTRANSCRIPT
DATA DAN STRUKTUR DATA
1.PENGERTIAN DATA
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.
Pengertian data ini menyiratkan suatu nilai yang bisa dinyatakan dalam bentuk konstanta /
variable.
Konstanta digunakan untuk menyatakan nilai tetap sedangkan variable digunakan
dalam program untuk menyatakan nilai yang dapat berubah-ubah selang eksekusi
berlangsung.
Ada empat istilah data, yaitu:
Tipe data adalah jenis atau macam data di dalam suatu variable dalam bahasa pemrograman.
Objek data mengacu kumpulan elemen, D (domain).
Representasi data : Suatu mapping dari struktur data ‘d’ ke suatu set ke struktur data ‘e’
(d===e) misal bolean di representasikan dalam 0 dan 1.
Struktur data biasa dipakai untuk mengelompokan beberapa informasi yang terkait
menjadi sebuah kesatuan.
Tipe data sederhana terbagi menjadi dua, yaitu:
Data sederhana tunggal. Misalnya : Integer, real / float, Boolean dan character.
Data sederhana majemuk. Misalnya : String.
1.TIPE DATA SEDERHANA TUNGGAL
INTEGER
Tipe Integer merupakan subset dari bilangan bulat yang ukurannya dapat bervariasi pada
komputer-komputer yang berbeda-beda.
Semua Operasi pada data bertipe integer pasti berkaitan dengan hukum dasar operasi
aritmatika, dan hasil komputasinya akan diinterupsi jika berada di luar jangkauan nilai yang
ditentukan.
Operator standar pada data bertipe integer adalah :
- Penjumlahan (diberi notasi +)
- Pengurangan (diberi notasi -)
- Perkalian (diberi notasi *)
- Pembagian (div).
Operasi pembagian (div) menghasilkan bilangan bulat, dengan mengabaikan sisa
pembagian. Sedangkan untuk mendapatkan sisa hasil baginya, gunakan modulus (mod).
Anggota dari himpunan bilangan :
{..., -(n+1), -n, ..., -2, -1, 0, 1, 2, ..., n, n+1, ...}
Operasi dasar yaitu : penjumlahan, pengurangan, perkalian, pembagian dan perpangkatan
REAL
Tipe Real merupakan subset bilangan real (bukan bilangan bulat)
Proses aritmatika pada bilangan real diperbolehkan untuk memberikan hasil yang tidak
teliti sampai batas pembulatan kesalahan pada jumlah digit tertentu (jumlah digit di
belakang koma). Inilah perbedaan mendasar dari tipe data Integer dengan Real dalam
hampir semua bahasa pemrograman.
Operator standar pada data bertipe Real adalah :
- Penjumlahan (diberi notasi +)
- Pengurangan (diberi notasi -)
- Perkalian (diberi notasi *)
- Pembagian (diberi notasi slash (/)) untuk membedakannya dengan pembagian bulat (div).
Data numerik yang bukan termasuk integer, digolongkan dalam jenis data real.
Ditulis menggunakan titik desimal (atau koma desimal). Dimasukkan ke dalam memori
komputer memakai sistem floating point, disebut Scientific Notation.
Penyajiannya terdiri dari : mantissa (pecahan) dan eksponen.
Contoh :
Di dalam sistem desimal, 123000 = 0.123 * 106
Di sini 0.123 adalah mantissa atau pecahan, sedangkan 6 adalah eksponennya.
Secara umum suatu bilangan real X dituliskan M * RE
Di sini : M dijadikan pecahan, R adalah radixnya dan E merupakan eksponennya.
BOOLEAN
Disebut juga jenis data logical. Anggota { true atau false}.
Operator Logika, yaitu : AND, OR, NOT
Operator AND akan menghasilkan nilai true, jika kedua operand bernilai true.
Operator OR akan menghasilkan nilai true, jika salah satu operand bernilai true
Operator NOT merupakan “precedence” dari operator AND dan OR.
Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT harus
dievaluasi sebelum operator AND dan OR.
Operator Relasional, yaitu : >, <, >=, <=, <> dan =
Contoh : 6 < 8 = True
9 < 8 = False
KARAKTER
Elemen dari suatu himpunan yang terdiri atas bilangan, abjad dan simbol khusus.
(0,1,...,8,9, A, B, ..., Y,Z, +, -,*,Ö, ...}
Ada banyak skema yang digunakan untuk merepresentasikan karakter dalam storage. Pada
umumnya skema yang paling banyak digunakan adalah :
1. Extended Binary Coded Decimal Interchange (EBCDIC)
Digunakan kode 8 bit untuk menyatakan sebuah karakter. Jika dihitung, kemungkinan
kombinasi seluruhnya : 28 = 256.
2. American Standard Code for Information Interchange (ASCII)
Digunakan kode 7 bit untuk menyatakan sebuah karakter. Jika dihitung, kemungkinan
kombinasi seluruhnya : 27 = 128.
2.TIPE DATA MAJEMUK
STRING
Barisan hingga karakter yang dibentuk oleh suatu kumpulan dari karakter.
Karakter yang digunakan untuk membentuk suatu string disebut alfabet. Dalam penulisannya,
suatu string berada dalam tanda “aphosthrope”.
Contoh :
Misal diberikan himpunan alfabet A = {C,D,1}.
String yang dapat dibentuk dari alfabet di atas di antaranya :
‘CD1’,’CDD’,’DDC’,’CDC1’,... dan sebagainya, termasuk “null string” atau “empty string”
Himpunan tak hingga dari string yang dibentuk oleh alfabet A disebut VOCABULARY,
Notasi : VA atau A*
Jika suatu string dibentuk dari alfabet {0,1}, maka string yang terbentuk disebut
dengan “Bit String”.
OPERASI OperatorJumlah karakter dalam string LENGTHGabungan 2 buah string CONCATSub bagian dari string SUBSTRMenyisipkan string ke dalam string yang lain INSERTMenghapus karakter dalam string DELETE
LENGTH
Nilai dari operasi ini adalah suatu integer yang menunjukkan panjang dari suatu string
.
Notasi : LENGTH(S) = N (integer)
di sini S = String, N = integer
CONCAT
Operasi ini bekerja terhadap dua string dan hasilnya merupakan resultan dari kedua
string tersebut.
Jika S1 dan S2 masing-masing adalah suatu string, maka bentuk operasi CONCATENATION
dinotasikan dengan : CONCAT(S1, S2).
Contoh :
Misal S1 = ‘a1a2 ... aN’ dan S2 =‘b1b2 ... bM’
Maka CONCAT(S1,S2) = ‘a1a2 ... aNb1b2 ... bM’
String S1 = "Sistem"
String S2 = "Informasi"
CONCAT(S1, S2)= "SistemInformasi"
LENGTH(CONCAT(S1, S2)) = 15
LENGTH(S1) + LENGTH(S2) = LENGTH(CONCAT(S1, S2))
6 + 9 = 15
15 = 15
SUBSTR
Operasi ini adalah operasi membentuk string baru, yang merupakan bagian dari string
yang diketahui.
Notasi : SUBSTR(S, i, j)
di sini : S = string yang diketahui
i dan j = integer
i = posisi awal substring 1 £ i £ LENGTH(S)
j = banyak karakter yang diambil
0 £ j £ LENGTH(S) dan 0 £ i+j-1 £ LENGTH(S)
INSERT
Operasi ini adalah untuk menyisipkan suatu string ke dalam string lain.
Bentuk umumnya adalah :
INSERT(S1,S2,i). S1 dan S2 masing-masing adalah suatu string dan i adalah posisi awal S2
pada S1.
Contoh :
Misalkan : S1 = ‘a1a2 ... aN’
S2 = ‘b1b2 ... bM’
INSERT(S1, S2,3) = ‘a1a2b1b2 ... bMa3a4... aN’
String S1 = "Sistem"
String S2 = "Informasi"
INSERT(S1,S2,4) = “SisInformasitem”
INSERT(S2,S1,4) = “InfSistemormasi”
DELETE
Operasi ini digunakan untuk menghapus sebagian karakter dalam suatu string.
Bentuk umumnya adalah :
DELETE(S,i,j) ® menghapuskan sebagian karakter dalam string S, mulai dari posisi i dengan
panjang j.
Contoh :
Diberikan string S = ‘a1a2 ... aN’
DELETE(S,3,4) = ‘a1 a2 a7a8 ... aN’
String S = "Sistem Informasi"
i = 4, j = 9
DELETE(S,i,j) = “Sismasi”
DELETE(S,j,i) = “Sistem Imasi”
String S = “SistemInformasi”
DELETE(S, 4, 5) = “Sisformasi”
DELETE(S, 5, 4) = “Sistformasi”
PENGERTIAN STRUKTUR DATA
Struktur data adalah suatu koleksi / kelompok data yang dapat di karakteristikan oleh
organisasi serta operasi yang di definisikan terhadapnya.
Dalam teknik pemrograman,struktur data berarti tata letak yang berisi kolom-kolom data,baik
itu kolom yang tampak oleh pengguna (user) ataupun kolom yang hanya digunakan untuk
keperluan pemrograman yang tidak tampak oleh pengguna.
Sedangkan 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.
Struktur data meliputi :
Struktur data sederhana, misalnya Array dan Record.
Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe sama.
Setiap elemen diakses langsung melalui indeksnya.
Indeks larik harus tipe data yang menyatakan keterurutan misalnya integer atau karakter.
Banyaknya elemen larik harus sudah diketahui sebelum program dieksekusi.
Tipe elemen larik dapat berupa tipe sederhana, tipe terstruktur atau tipe larik lain.
Nama lain array adalah Larik, tabel atau vector
Array atau Larik di definisikan sebagai pemesanan alokasi memory
berurutan.definisi ini kurang tepat, karena terjadi kerancuan antara struktur data dan
representasinya. Memang benar array hampir selalu di implementasikan menggunakan
memory berurutan tapi tidak selalu demikian.
Semua elemem array bertipe sama. Array cocok untuk organisasi kumpulan data homogen
yang ukuran atau jumlah elemen maksimumnya telah diketahui dari awal.
Homogen adalah bahwa setiap elemen dari sebuah array tertentu haruslah mempunyai tipe
data yang sama.
Cara Pendefinisian Array
1.Sebagai Peubah
Contoh :
L : array[1..50] of integer
NamaMhs : array[‘a’..’j’] of string
2.Sebagai tipe baru
Contoh :
type LarikInt : array[1..100] of integer
P : LarikInt
3. Mendefinisikan ukuran maksimum
elemen larik sebagai konstanta
Contoh :
Const Nmaks = 100
type Larikint : array[1..Nmaks] of integer
P : LarikInt
Cara menterjemahkan ke bahasa C :
#define Nmaks 100
typedef int Larikint[Nmaks+1];
Larikint P;
Cara Mengacu Elemen Larik
Elemen larik diacu melalui indeksnya.
Nilai indek harus terdefinisi.
Contoh cara mengacu elemen larik adalah :
L[4] {mengacu elemen keempat dari larik L }
NamaMhs[‘b’] {mengacu elemen kedua dari larik NamaMhs}
P[k] {mengacu elemen ke-k dari larik P, asalkan nilai k sudah terdefinisi }
Menginisialisasi Larik
menginisialisasi elemen larik adalah memberikan harga awal untuk seluruh elemen
larik, misalnya menginisialisasi dengan nilai 0 seperti di bawah ini :
Procedure InisDgn0(output A:larik, input N:integer)
{menginisialisasi setiap elemen larik A[1..N] dengan nol}
{K. Awal : N adalah banyak elemen efektif larik, nilainya terdefinisi}
{K. Akhir : seluruh elemen larik A bernilai nol}
Deklarasi :
K : integer
Deskripsi :
for k ß 1 to N do
A[k] ß 0
endfor
Mengisi elemen larik dari piranti masukan
Elemen larik dapat diisi dengan nilai yang dibaca dari piranti masukan seperti contoh
di bawah ini :
Procedure BacaLarik(output A:larik, input N:integer)
{mengisi elemen larik A[1..N] dengan nilai yang dibaca dari piranti masukan}
{K. Awal : N adalah jumlah elemen efektif larik, nilainya terdefinisi}
{K. Akhir : seluruh elemen larik A berisi nilai-nilai yang dibaca dari piranti
masukan}
Deklarasi :
K : integer
Deskripsi :
for k ß 1 to N do
read (A[k])
endfor
Larik Bertype Terstruktur
Larik tidak hanya dapat berisi data bertype tunggal, tapi dapat juga berisi data yang
bertipe terstruktur
Contoh :
const Nmaks = 100
type Mahasiswa : record
<nim : integer,
nama_mhs : string,
KodeMK : string,
Nilai : char >
TabMhs : array[1..Nmaks] of Mahasiswa
Contoh Cara mengacu elemen TabMhs :
1.TabMhs[2].Nim
mengacu field Nim dari elemen kedua larik
2.Write(TabMhs[k].KodeMK)
menuliskan field KodeMK dari elemen ke k dari larik.
Karakteristik Array
Mepunyai batasan dari pemesanan alokasi memori (bersifat statis)
Mempunyai tipe data sama (bersifat homogen)
Dapat diakses secara acak.
Deklarasi Array
Ada tiga hal yang harus di ketahui dalam mendeklarasikan array, yaitu :
Type data array
Nama variable array
Subkrip / index array.
Contoh deklarasi dari array adalah sebagai berikut :
int A[5] ; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe
integer.
Jenis-jenis Array:
ARRAY DIMENSI SATU
Deklarasi : Type_Data Nama_Variabel [index]
Rumus untuk menentukan jumlah elemen dalam array adalah :
p = Perkalian dari index sebelumnya (untuk arraybdimensi dua dan tiga).
PEMETAAN (MAPPING) ARRAY DIMENSI SATU KE STORAGE
Rumus : @A[i] = B + (i – 1) * L
Dimana : @A[i] : Posisi array yang dicari
B : Posisi awal index di memori computer
i : Subkrip atau index array yang di cari
L : Ukuran atau besar memori suatu tipe data
Contoh bentuk Array menggunakan c++include<iostream>using namespace std;void main(void){
int x[10]={0,1,2,3,4,5,6,7,8,9};int *px;int i;for(i=0;i<10;i++){px=&x[i]; // membaca alamat dari xcout<<x[i] << " " <<*px<<" "<<px<<endl;}{
N
p(Index Array)
i = 1
cout<<"1.NAMA :SUDARSONO"<<endl;cout<<"2.NIM :2010140119"<<endl;cout<<"3.SEMESTER :IIIA"<<endl;cout<<"4.TANGGAL PRAKTIKUM :23-03-2011"<<endl;
}#include<iostream>#include<conio.h>using namespace std;void main(void){
int billy [5] = {16,2,77,40,12017};int n, result=0;for( n=0 ; n<5 ; n++ )
{result += billy[n];}cout<<"Outputnya:"<<endl;cout<<result<<endl<<endl;cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%:"<<endl;cout<<"Nama : SUDARSONO SIHOTANG:"<<endl;cout<<"SEMESTER : IIIA:"<<endl;cout<<"Tanggal praktikum : kamis-1/04/2011:"<<endl;cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%:"<<endl;getch();
}
ARRAY DIMENSI DUA
Deklarasi : Type_Data Nama_Variabel [index1] [index2]
Menentukan jumlah elemen dalam array dimensi dua :
p = Perkalian dari statemen sebelumnya
PEMETAAN (MAPPING) ARRAY DIMENSI DUA KE STORAGE
Terbagi dua cara pandang (representasi) yang berbeda :
Secara kolom per kolom (coloumn major order / CMO)
Secara baris per
baris (row major order /
RMO)
n
p(Index Array)
i = 1
@M[i][j] = M[0][0] + {(j – 1) * K + (i – 1)} * L
@M[i][j] = M[0][0] + {(i – 1) * N + (j – 1)} * L
Keterangan :
@M[i][j] = Posisi array yang di cari, M[0][0 = Posisi alamat awal index array, i = Baris, j =
Kolom, L = Ukuran memory type data, K = Banyaknya elemen per kolom, N = Banyaknya
elemen per baris.
ARRAY DIMENSI TIGA
Adalah suatu array yang setiap elemennya merupakan tipe data array juga yang
merupakan array dimensi dua.
Contoh :
Penyajian data mengenai banyaknya mahasiswa dari 20 perguruan tinggi di Jakarta,
berdasarkan tingkat (1 sampai 5), dan jenis kelamin (pria atau wanita). Misalkan array
tersebut dinamakan MHS. Ambil subskrip pertama, tingkat = 1, 2, ..., 5; subskrip kedua, jenis
kelamin (pria = 1, wanita = 2), dan subskrip ketiga, perguruan tinggi adalah K = 1, 2, ..., 20.
Jadi MHS(4,2,17) menyatakan jumlah mahasiswa tingkat 4, wanita, dari perguruan tinggi 17.
CROSS SECTION (Penampang Array Berdimensi-2)
Adalah pengambilan salah satu subskrip.
Misal : Baris = tetap/konstan
Kolom = berubah-ubah (*)
Contoh : B(*,4) = semua elemen pada kolom ke-4.
B(2,*) = semua elemen pada baris ke-2.
Pengertian cross-section pada array dimensi banyak, adalah sama seperti pada array dimensi
dua.
Misal :
MHS(4,*,17) = jumlah mahasiswa tingkat 4 dari perguruan tinggi 17 (masing-masing
untuk pria dan wanita).
MHS(*,*, 3) = jumlah mahasiswa untuk masing-masing tingkat, pria dan
wanita, dari perguruan tinggi 3.
Operasi Dasar Pada Array
Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung. Nilai
di masing-masing posisi elemen dapat diambil dan nilai dapat disimpan tanpa melewati
posisi-posisi lain.
Terdapat dua tipe operasi, yaitu :
Operasi terhadap satu elemen / posisi dari array
Operasi terhadap array sebagai keseluruhan
Dua operasi paling dasar terhadap satu elemen / posisi adalah
Penyimpanan nilai elemen ke posisi tertentu di array
Pengambilan nilai elemen dari posisi tertentu di array
Operasi-operasi dasar terhadap array secara keseluruhan adalah :
1. Operasi penciptaan
2. Operasi penghancuran
3. Operasi pemrosesan traversal
4. Operasi pencarian (table look-up)
5. Operasi sorting
1. PENCIPTAAN DAN PENGHANCURAN
Operasi penciptaan biasa disebut inisialisasi.
Operasi ini untuk mempersiapkan struktur data untuk operasi-operasi berikutnya.
Operasi penghancuran menyatakan ketidak berlakuan struktur data atau membebaskan
memory, menyerahkan memory ke manajemen memory agar dapat di pergunakan keperluan
lain.
Operasi penghancuran penting terutama bila struktur data di implementasikan secara dinamis
menggunakan pointer
2. PENYIMPANAN DAN PENGAMBILAN NILAI
Biasanya bahasa pemrograman menyediakan sintaks tertentu untuk penyimpanan dan
pengambilan nilai elemen pada posisi tertentu di array.
Contoh :
A[10] = 78, berarti penyimpanan nilai 78 ke posisi ke-10 dari array A
C = A[10], berarti pengambilan nilai elemen posisi ke-10 dari array A
3. PEMROSESAN TRANSVERSAL
Operasi pemrosesan transversal adalah pemrosesan mengolah seluruh elemen secara
sistematik.
4. PENCARIAN DI ARRAY (table look-up)
Pencarian di array (table look-up) adalah proses pencarian suatu nilai di array. Klasifikasi
pencarian di array adalah :
1) Pencarian sekuen (sequential searching),yaitu:
i. Tanpa Boolean, terbagi:
Tanpa sentinen
Dengan sentinen
ii. Menggunakan boolean
2) Pencarian secara biner / dikotom (binary = dichotomy searching).
5. PENGURUTAN ARRAY
Pengurutan atau sorting adalah proses yang paling sering di lakukan dalam
pengolahan data.pengurutan di bedakan menjadi dua, yaitu :
a. Pengurutan internal
Pengurutan dilakukan terhadap sekumpulan data di media memory internal komputer dimana
data dapat di akses elemennya secara langsung.
b. Pengurutan eksternal
Pengurutan data di memory sekunder. Biasanya data bervolume besar sehingga tidak mampu
dimuat semuanya di memori utama.
KEUNGGULAN DAN KELEMAHAN ARRAY
Keunggulan array adalah sebagai berikut :
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu
secara langsung tanpa melalui elemen-elemen lain.
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen-
elemen tetangga, baik elemen pendahulu atau elemen penerus 3
3. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga,
maka penggunaan penyimpanannya sangat efisien.
Kelemahan array adalah sebagai berikut :
Array mempunyai fleksibilitas rendah, sehingga tidak cocok untuk berbagai aplikasi karena
array mempunyai batasan sebagai berikut :
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen
adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit
diubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi
terus-menerus, maka representasi statis
• Tidak efisien dalam penggunaan memori
• Menyiakan banyak waktu komputasi
• Pada suatu aplikasi, representasi statis tidak dimungkinkan
Bila penambahan dan pengurangan terjadi terus menerus, maka representasi statis (array):
1. Tidak efisien dalam penggunaan memory
2. Menyiakan banyak waktu komputasi
3. Pada suatu aplikasi, representasi statis tidak di mungkinkan.
Pengaksesan Elemen Array
Elemen-elemen array dapat diakses oleh program menggunakan suatu indeks tertentu secara
random ataupun berurutan.
Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan dengan mengeset
nilai atau menampilkan nilai pada indeks yang dimaksud.
Dalam C, tidak terdapat error handling terhadap batasan nilai indeks, apakah indeks tersebut
berada di dalam indeks array yang sudah didefinisikan atau belum. Hal ini merupakan
tanggung jawab programmer. Sehingga jika programmer mengakses indeks yang salah,
maka nilai yang dihasilkan akan berbeda atau rusak karena mengakses alamat memori yang
tidak sesuai.
Record (basis data) merupakan kumpulan dari elemen-elemen data yang terkait dalam
sebuah basis data. Secara ringkas, database dapat dikatakan sebagai sebuah tabe yang
memiliki baris alias record dan kolom atau field. Setiap baris menyatakan elemen-elemen
data yang saling berkaitan. Sebagai contoh dalam suatu tabel memiliki kolom nama, alamat,
tanggal lahir, pekerjaan. Maka satu record adalah data sau orang yang terdiri atas nama,
alamat, tanggal lahir dan pekerjaan.
Contoh :
1. type Titik : record <x : real, y : real>
jika P dideklarasikan sebagai Titik maka mengacu field pada P adalah P.x dan
P.y.
Didefinisikan tipe terstruktur yang mewakili Jam yang dinyatakan sebagai jam (hh), menit
(mm) dan detik (ss), maka cara menulis type Jam adalah :
type JAM : record
<hh : integer, {0…23}
mm : integer, {0…59}
ss : integer {0…59}
>
Jika J adalah peubah (variabel) bertipe Jam
maka cara mengacu tiap field adalah J.hh, J.mm dan J.ss
Terjemahan dalam bahasa C :
1. type Titik : record <x : real, y : real>
diterjemahkan menjadi :
typedef struct { float x;
float y;
} Titik;
2. type JAM : record
<hh : integer, {0…23}
mm : integer, {0…59}
ss : integer {0…59}
>
Diterjemahkan menjadi :
typedef struct
{ int hh; /*0…23*/
int mm; /*0…59*/
int ss; /*0…59*/
} Jam;
Struktur data majemuk terdiri :
Linier : Stack, Queue, serta List dan Multilist
Non Linier : Pohon Biner dan Graph
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.
Struktur data standar yang biasanya digunakan dibidang informatika adalah :
ADT , Array , Struk
ADT (Abstract Data Type) atau Tipe Data Bentukan Bahasa C memiliki tipe data numerik dan karakter (seperti integer, float, char dan
lainlain). Bagaimana jika kita ingin membuat tipe data baru?
ADT adalah tipe data yang dibuat oleh programmer sendiri yang memiliki suatu nama
tertentu.
ADT dapat berupa tipe data dasar namun diberi nama baru atau berupa kumpulan tipe data
berbeda yang diberi nama baru.
Untuk pembuatan ADT digunakan keyword typedef
ADT (Abstract Data Type) adalah definisi type dan sekumpulan primitif (operasi dasar)
terhadap type tersebut.
Type diterjemahkan menjadi type terdefinisi dalam bahasa pemrograman yang
bersangkutan, misalnya menjadi record dalam Pascal/Ada dan Struct dalam bahasa C
Primitif dalam konteks pemrograman prosedural, diterjemahkan menjadi fungsi dan
prosedur.
Primitif dikelompokkan menjadi :
1. Konstruktor/Kreator, pembentuk nilai type. Biasanya namanya diawali dengan Make.
2. Selektor, untuk mengakses komponen type. Biasanya namanya diawali dengan Get.
3. Prosedur Pengubah nilai komponen
4. Validator komponen type, yang dipakai untuk mengetes apakah dapat membentuk
type sesuai batasan.
5. Destruktor/Dealokator, yaitu untuk menghancurkan nilai objek, sekaligus memori
penyimpannya
6. Baca/tulis, untuk interface dengan input/output device
7. Operator Relasional terhadap type tersebut untuk mendefinisikan lebih besar, lebih
kecil, sama dengan dan sebagainya.
8. Aritmatika terhadap type tersebut, dalam pemrograman biasanya hanya terdefinisi
untuk bilangan numerik.
9. Konversi dari type tersebut ke type dasar dan sebaliknya
List linier (Linked List) dan variasinya
Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental
dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat
menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked
list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian
program (run-time).
Secara umum linked list tersusun atas sejumlah bagian-bagian data yang lebih kecil
yang terhubung (biasanya melalui pointer). Linked list dapat divisualisasikan seperti kereta,
bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan
pengait antar gerbong adalah pointer.
Multilist
Stack (Tumpukan)
Dalam ilmu komputer, Stack atau Tumpukan merupakan sebuah koleksi objek yang
menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan
pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi
berkait atau kontigu (dengan tabel fix). Ciri Stack :
Elemen TOP (puncak) diketahui
penisipan dan penghapusan elemen selalu dilakukan di TOP
LIFO
Stack Overflow & Stack Underflow
• Stack Overflow
Menambahkan data pada sebuah stack yang telah penuh
• Stack Underflow
Menghapus data dari sebuah stack yang sudah kosong
Pemanfaatan Stack :
Perhitungan ekspresi aritmatika (posfix)
algoritma backtraking (runut balik)
algoritma rekursif
Operasi Stack yang biasanya :
1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas.
2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
3. Clear : digunakan untuk mengosongkan stack
4. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
5. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
Queue (Antrian)
Definisi Queue
Queue ( Antrian ) merupakan kumpulan daya yang seolah – olah terihat seperti ada data yang
diletakkan disebelah data yang lainnya . Queue memiliki sifat FIFO.
Queue dengan Linear Array
Linear Array adalah suatu array yan dibuat seakan – akan merupakan suatu garis lurus
dengan satu pintu masuk dan satu pintu keluar .
Queue dengan Circular Array
Circular Array merupakan suatu array yang dibuat seakan – akan merupakan sebuah
lingkaran dengan titik awal an titik akhir saling bersebelahan jika array dalam keadaan
kosong .
Queue dengan Double Lingked List
Merupakan Queue yang menggunakan Double Lingked List yang dapat menghemat memori
dalam pengerjaan nya seperti pengertian Double Lingked List sebelumnya.
Tree ( Pohon ) Biner
Binary Tree
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua
subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap
node dalam binary tree hanya boleh memiliki paling banyak dua child.
Jenis-jenis Binary Tree :
a) Full Binary Tree
Binary Tree yang tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree harus
mempunyai panjang path yang sama.
b) Complete Binary Tree
Mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path yang
berbeda. Node kecuali leaf memiliki 0 atau 2 child.
c) Skewed Binary Tree
Yakni Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu child.
Graph ( Graf )
Graph merupakan struktur data yang paling umum. Jika struktur linear
memungkinkan pendefinisian keterhubungan sikuensial antara entitas data, struktur data tree
memungkinkan pendefinisian keterhubungan hirarkis, maka struktur graph memungkinkan
pendefinisian keterhubungan tak terbatas antara entitas data.
Konsep Dasar Graph.
Proses pembentukan dan pengaksesan struktur data dapat dipikirkan sebagai
komputasi yang secara efektif terfokus. Struktur linier seperti tumpukan, larik, merekam
sejarah pengaksesan terhadap diri mereka, struktur-struktur terurut melaksanakan pengurutan
berkelanjutan, dan pohon-pohon biner melakukan pengkodean keputusan-keputusan tentang
pemartisian koleksi-koleksi data. Adapun mekanisme yang paling umum untuk mengkodekan
hubungan-hubungan antar data dalam graf. Struktur-struktur sederhana seperti larik
menyediakan koneksi-koneksi implisit, seperti hubungan yang terjadi diantara nilai-nilai yang
tersimpan didalamnya. Graf relatif sukar dikembangkan, tetapi sebagai hasilnya , graf dapat
digunakan untuk menyimpan informasi yang lebih rinci. Kecanggihan sturktur graf
memungkinkan para ilmuan komputer dapat merefresentasikan berbagai persoalan sulit
dalam ilmu komputer.
Dalam terminlogi graf dikenal berbagai istilah umum, selain simpul dan lintasan, yaitu:
a. Keberdampingan (adjacency)
Dinamakan berdampingan jika mereka terhubung melalui satu lintasan (edge).
b. Lintasan (path) adalah urutan dari lintasan.
c. Terhubung (connected)
Suatu graf dikatakan terhubung jika ada setidaknya atau lintasan antara satu simpul ke
simpul-simpul lainnya.
d. Berarah (directed graph) dan berbobot (weighted graph)
Suatu graf dikatakan tidak berarah jika kita dapat melintas dengan cara yang sama
mudahnya dari suatu simpul ke simpul lainnya dan ini biasanya ditunjukan dengan
lintasan tanpa panah yang menunjukan arah antar simpul.
PEMBUATAN STRUKTUR DATA
Untuk membuat menjadi struktur data, kita harus melakukan dulu aktivitas terhadap
objek data, yaitu :
Mendeskkripsikan kumpulan operasi sah yang diterapkan ke elemen-elemen objek data.
Menunjukan mekanisme kerja operasi-operasi.
Objek data integer ditambah operasi (+ , - , * , / , mod ,cell , floor , < , >) dan operasi-operasi
lain yang memanipuasi objek data integer menyatakan struktur data.
Struktur data = Objek data + { Operasi manipulasi }.
Tahap pembuatan struktur data adalah :
Tahap pertama : Spesifikasi
Pendeskripsian / spesifikasi struktur data menyatakan apa yang dapat dilakukan
struktur data, bukan cara penerapannya. Pendeskripsian ini melibatkan level logic sehingga
dapat digunakan konvensi matematika untuk menyatakan sifat-sifat struktur data yang
dikehendaki.
Spesifikasi dapat dilakukan dengan dua cara, yaitu :
- Spesifikasi secara formal
- Spesifikasi secara informal
Tahap kedua : Implementasi
Implementasi menyatakan cara penerapan struktur data dengan struktur data yang
telah ada.
Implementasi struktur data adalah proses pendefinisian tipe data abstrak sehingga
semua operasi dapat dieksekusi computer. Implementasi struktur penyinpanan item-item data
serta algoritma-algoritma untuk implementasi operasi-operasi sehingga menjamin
terpenuhinya karakteristik struktur data, relasi item-item data atau invariant pada struktur data
itu.
Tahap ketiga : Pemrograman
Pemrograman terstruktur adalah penerjemahan menjadi pernyataan di bahasa
pemrograman tertentu. Prosesnya terdiri dari :
Deklarasi yang mendefinisikan objek-objek data dan hubungannya…
Pembuatan prosedur / rutin untuk operasi-operasi dasar yang menjaga invariant pada struktur
data itu .
Sesuai dengan relasi yang didefinisikan di spesifikasi perancangan harus memilih
tipe-tipe data yang telah ada untuk merepresentasikan struktur data.
Struktur data di bangun menggunakan fasilitas pembentukan atau pembuatan struktur data
yang disediakan bahasa seperti array, record, dan sebagainya atau yang telah di buat seperti
stack, queue, atau himpunan menggunakan linked list.
Pembuatan struktur data adalah pembentukan tipe data lengkap yang mempunyai empat
property berikut :
Nama : Identifier tipe data
Domain : Domain / himpunan semesta nilai di tipe data
Konstanta (penyebutan anggota-anggotanya) : Cara penyebutan anggota-anggota tipe data
Operasi-operasi terhadap tipe data itu (operator) : Daftar operasi terhadap anggota tipe
data sehingga kelakuan objek data sesuai spesifikasi.
KESIMPULAN
Struktur data merupakan salah satu bahan dasar pembuatan program. Pemakaian
struktur data yang tepat di dalam proses pemrograman, akan menghasilkan algoritma yang
jelas dan tepat sehingga menjadikan program secara keseluruhan lebih sederhana. Array
merupakan bagian dari struktur data yaitu termasuk kedalam struktur data sederhana yang
dapat di definisikan sebagai pemesanan alokasi memory sementara pada komputer. Apabila
kita membuat program dengan data yang sudah kita ketahui batasnyamaka kita menggunakan
Array (type data statis), namun apabila datanya belum kita ketahui batasnya maka gunakan
pointer (type data dinamis).