STRUKTUR DATA


Data dan Struktur Data
Data adalah nilai yang merepresentasikan deskripsi dari suatu objek atau kejadian (event). Dengan demikian dapat dijelaskan kembali bahwa data merupakan suatu objek, kejadian, atau fakta yang terdokumentasikan dengan memiliki kodifikasi terstruktur untuk suatu atau beberapa entitas.
Pada garis besarnya, data dapat dikategorikan menjadi :
  1. Type Data Sederhana / Data Sederhana
Adalah tipe data yang sudah ada dan dijadikan standar dalam bahasa pemrograman tertentu.
Terdiri dari :
  1. Data Sederhana Tunggal
a.       INTEGER
Interger adalah data numerik yang tidak mengandung pecahan, dan disajikan dalam memori komputer sebagai angka bulat. Mengacu pada obyek data dengan range -32768 s/d 32767.
Operasi yang dapat dilaksanakan :
- Penambahan ( + )
- Pengurangan ( )
- Perkalian ( * )
- Pembagian Integer ( / )
- Pemangkatan ( ^ )
Operasi tersebut diatas disebut dengan opersi Binar atau arimatic operator yaitu operasi yang bekerja terhadap 2 Integer ( operand ). Sedangkan operator yang mempunyai satu operand disebut Unar ( Negasi = Not ). Selain itu ada juga operasi tambahan yang disediakan oleh bahasa pemrograman tertentu, yaitu :
·          MOD : sisa hasil pembagian bilangan
·          DIV   : hasil pembagi bilangan
·          ABS  : Mempositifkan bilangan negatif
·          SQR  : menghitung nilai akar dari bilangan
Penulisan di dalam bahasa pemrograman Pascal : var a : integer

Type data Integer
Nama Type
Jangkauan
Ukuran Memori
Shortint
-128  … 127
1 byte
Byte
0    255
1 byte
Integer
-32768    32767
 2 byte
Word
0    6555
2 byte
Longint
-214748368 … 2147483647
4 byte

b.      REAL
Data numerik yang mengandung pecahan digolongkan dalam jenis data Real (floating point). Operasi yang berlaku pada bilangan integer juga berlaku pada bilangan real. Selain itu ada operasi lainnya seperti :
INT : membulatkan bilangan real , misal INT(34.67) = 34
Type data REAL
Type
Jangkauan
Digit
Ukuran
Single
1,5E-45 .. 3,4E+38
7-8
4 byte
Real
2,9E-39 .. 1,7E+38
11-12
6 byte
Double
5,0E-324 .. 1,7E+308
15-16
8 byte
Extended
1,9E-4951 .. 1,1E+4932
19-20
10 byte
Comp
9,2E-18.. 9,2E+18
19-20
8 byte

c.       Boolean/Logical
Type ini dikenal pula sebagai “ Logical Data Types”, digunakan untuk melakukan
pengecekan suatu kondisi dalam suatu program. Elemen datanya hanya ada 2 yaitu True dan False, biasanya dinyatakan pula sebagai 1 dan 0.
Operatornya terdiri dari : AND, OR, NOT
                                               Binar    Unar
Dalam urutan operasi, Not mendapat prioritas pertama, kemudian baru AND dan OR kecuali bila diberi tanda kurung. Nilai true dan false dapat juga dihasilkan oleh operator Relational.Operator tersebut : < , > , <= , >= , = , <> , =
Type data Boolean
Type
Ukuran
Boolean
1 byte
Bool
1 byte
Wordbool
2 byte
Longbool
4 byte
d.      Character
Nilai data karakter berupa sebuah karakter yang ditulis diantara tanda petik tunggal,seperti‘A’. penggunaan variabel untuk menyimpan tipe data karakter ini harus dideklarasikan dengan tipe Char.
Contoh :
Var
Huruf:char;
Begin
Huruf : = ‘D‘;
Writeln (‘Hurufnya adalah : ‘, Huruf );
End.
Output dari contoh di atas : Hurufnya adalah : D
  1. Data Sederhana Majemuk
String adalah merupakan urut-urutan dari karakter yang terletak diantara tanda petik tunggal. Suatu string adalah barisan hingga simbol yang diambil dari himpunan karakter yang digunakan untuk membentuk string dinamakan Alfabet.
Contoh : Himpunan string {A,A,1} dapat berisi antara lain :
(AB1), (A1B), (1AB),…dst. Termasuk string Null ( empty / hampa / kosong ={} Secara umum suatu string S dinyatakan : S : a1, a2, a3,… an,
Panjang dari string dilambangkan S =N atau Length (S) = N dimana N adalah banyaknya karakter pembentuk string. Untuk string Null = 0, untuk blank (spasi)=1. Operasi yang berlaku terhadap string :
a. Length(S) berfungsi untuk menghitung panjang suatu string.
Contoh : S1 adalah string = a1,a2,a3…an
S2 adalah string = b1, b2, b3,…bk
Len(s2) = n , Len(s1) = k
b. Concat (S1 , S2)
yaitu concatenation (Penyambungan 2 buah string atau lebih.Penggabungan juga dapat dilakukan terhadap dirinya sendiri.
Contoh : concat(s1,s2) = a1, . . . , an , b1 , . . . , bk
atau dalam bentuk lain : s1 // s2 , s1 + s2
c. Substr (s, i, j)
yaitu operasi pengambilan beberapa karakter dari string
untuk membentuk string baru.
s : adalah string
i : adalah posisi karakter awal yang diambil
j : adalah banyaknya karakter yang diambil
dimana i dan j ber-type Integer
S1(a1,a2,a3,…an)
Substr ( s, 3, 2) = a3, a4 S1( a3, a4)
Selain dari itu terdapat juga operasi pemenggalan lainnya yaitu : right(S1, j ) dan left(S1, j )
d. Insert ( S1, S2, j)
Operasi ini membutuhkan dua operand string dan sebuah operand Integer.
Contoh : Insert (S1, S2, 3) = a1, a2, b1, b2,…, bk, a3,…, an
Menyisipkan S2 didalam S1 mulai posisi ke 3 dari S1. Bila tidak ada statemen INSERT dalam bahasa pemrograman maka dapat dilakukan dengan cara lain, misal :
left(S1, j ) // S2 // right(S1, j )
e. Delete (S, i, j)
Operasi ini membutuhkan sebuah string dan dua operand integer.
Contoh : S1 : a1, a2, a3,…, an.
delete (S1 , 4, 3) = a1, a2, a3, a7, a8,…,an.
Menghapus string pada posisi awal 4, sebanyak 3. Bila tidak ada statemen delete dalam bahasa pemrograman maka dapat dilakukan dengan cara lain, misal :
left(S1, j ) // right(S1, j )
f. Index(S1,’substring’)
Mencari posisi awal (karakter ke berapa) suatu substring pada suatu string.
Contoh : Index(S1,’a3,a4,5’) = 3
Dalam bahasa pemrograman untuk membedakan sebuah string atau integer menggunakan tanda kutip. Integer : 34 string : ‘34’.

  1. 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. Struktur data adalah suatu koleksi atau kelompok data (susunan simbol-simbol) yang dapat dikarakterisasikan oleh organisasi serta dapat dioperasikan sesuai dengan definisi yang diberikan terhadapnya
Struktur data meliputi :
1.  Struktur data sederhana
Terdiri dari beberapa data item yang dihubungkan satu dengan lainnya.
a.  Array
Array atau dalam beberapa literatur disebut sebagai larik, adalah suatu tipe variabel yang berisi kumpulan data dengan setiap elemen datanya bertipe sama. Setiap komponen atau elemen array dapat diakses dan ndibedakan melalui indeks yang spesifik dimana jumlahnya sebanyak ukuran array tersebut dikurangi satu (karena perhitungan indeks dimulai dari nol). Array berfungsi sebagai langkah efisiensi penggunan memori komputer, sebab data elemen array dialokasikan pada suatu deretan sel memori tertentu. Hal ini jauh lebih efisien dibandingkan dengan jika kita mendefinisikan masing–masing data ada suatu variabel tersendiri yang pastinya akan banyak menyita memori.
Dengan menggunakan array, misal array x
           x[0]                     x[1]                    x[2]                  x[3]
10,5
11,2
125,1
30,5

Tidak menggunakan array
              x0                    x1                         x2                   x3
10,5
11,2
125,1
30,5

Berdasarkan jumlah indeks dalam sebuah variabel  ,array dibedakan menjadi :

1.      Array  Satu Dimensi
            Deklarasi : tipe_var nama_var[ukuran];
Contoh :
Jumlah elemen dimensi pertamanya  8
 
Nama variable x
 
111111Tttt112
Int x[8]
 
22233665488997

 


                                                             

2.      Array Multi Dimensi
Array dapat pula digunakan untuk menangani kumpulan data yang memiliki dimensi lebih dari satu, misalnya untuk penanganan pada matriks.
Bentuk umumnya : tipe_var nama_var[ukuran 1][ukuran 2]  ...
Contoh :
int iMatriks[2][2]={
{10, 2},
{2, 4}};
b.  Record
Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram. Rekaman disebut juga tipe terstruktur.
Contoh :
1. Type Titik : record
jika P dideklarasikan sebagai titik, maka mengacu field pada P adalah P.x dan P.y.
2. 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
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
diterjemahkan menjadi :
typedef struct { float x;
float y;
} Titik;
2. type Jam : record
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;
terjemahan dalam bahasa JAVA :
1. type Titik : record
real>
diterjemahkan menjadi :
class Titik {
float x, y;
}
2. type Jam : record
mm : integer, {0…59}
ss : integer {0…59}
> 
Diterjemahkan menjadi :
class Jam {
int hh; /*0…23*/
int mm; /*0…59*/
int ss; /*0…59*/
}
c. Set (Himpunan)
Tipe data himpunan merupakan sebuah tipe data yang didalamnya memuat sejumlah elemen (anggota) dimana anggotanya memiliki tipe data dasar yang sama.
2. Struktur Data Majemuk
Struktur data majemuk terdiri dari :
a.       Linier ,misalnya :
1)   Stack
Merupakan bentuk khusus dari linier list pemasukan dan penghapusan elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari list  (Top).
Prinsip stack adalah last-in-first-out (LIFO).
a)   Operasi-operasi dalam stack :
(1)  IsEmpty
o       Digunakan untuk memeriksa apakah stack masih dalam kondisi kosong.
o      
Int IsEmpty()
{
  If (tumpuk.top=-1
         Return 1;
  Else
          Return 0;
}
 
MAX_STACK
 
4
 3
2
1
0
 
Dengan cara memeriksa Top of stack jikia Top masih = -1 maka berarti stack masih kosong.



Top= -1
 


(2)  IsFull
o       Digunakan untuk memeriksa apakah kondisi stack sudah penuh.
o       Dengan cara memeriksa Top of Stack. Jika  Top of Stack= Max_Stack-1 maka Full(penuh), Jika Top of Stack

Int IsFull()
{
  If (tumpuk.top= Max_Stack-1
         Return 1;
  Else
          Return 0;
}
 
4
 3
2
1
0
 
MAX_STACK
 
 

EE     E
Top= -1
 
D
C
B
A

(3)  Push
Digunakan untuk memasukkan elemen dalam stack dan selalu menjadi elemen teratas stack.
o       Menambah satu nilai Top of Stack setiap ada penambahan elemen stack selama stack masih belum penuh.
o       Isikan nilai baru ke stack brdasarkan indeks top of stack setelah ditambah satu(diincrement)
Void push(char d[6])
{
  tumpuk.top++
  strcpy(tumpuk.data[tumpuk.top],d)
 }
 
4
 3
2
1
0
 
                                                                

PUSH ELEMEN A
 

Top= Top+1
      = -1 + 1
      = 0
 
A

              
(4)  Pop
Digunakan untuk menghapus elemen paling atas dari stack.
o       Ambil dahulu nilai elemen teratas  stack dengan mengakses top of stack.
o       Tampilkan nilai yang akan diambil
Lakukan decrement nilai top of stack sehingga jumlah elemen
Data yg di Pop = C
 
4

     Max_Stack
4
3


3

2
C
Top= 2
 
2
Top= Top-1
      = 2-1
      = 1
 
1
B

1
B
0
A

0
A
Void pop()
{
   Printf(“Data yang di Pop=%s\n”,tumpuk.data[tumpuk.top]);
   Tumpuk.top-;
}

 




(5)  Clear
o       Digunakan untuk mengosongkan stack / membuat stack hampa sehingga top pada stack berada kembali di posisi Top = -1
4
Void clear()
{
  tumpuk.data=tumpuk.top=-1
  printf(“Data clear”)
 }

 
3

2

1

0





b)      Stack dengan Array
Stack menggunakan array pengambil / penghapusan dielemen dalam stack dengan memeulainya dari elemen teratas.
c)      Double Stack dengan Array
Merupakan metode khusus yang dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan sebuah array untuk menampung dua buah stack.
d)     Stack dengan Single Linked List
Menggunakan single linked list dalam pembuatan stack mempunyai keunggulan dibandingkan dengan array yaitu dapat digunakan alokasi memori yang dinamis sehingga menghindari pemborosan memori
2)  Queue
Adalah suatu bentuk khusus dari linier dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi,yang disebut ekor dan operasi penghapusan hanya diperbolehkan pada sisi lainnya yang disebut kepala (Head) dari list linier.
Prinsip antrean adalah  FIFO (First in First Out) dan FCFS (First Come First Serve).
a)      Operasi  dalam Queue :
§         Create
Untuk menciptakan dan menganalisa Queue dengan cara membuat head dan tail = 1
§         IsEmpty
Untuk memeriksa apakah queue kosong
§         IsFull
Untuk memeriksa apakah queue sudah penuh
§         EnQueue
Untuk menamabhkan item pada posisi paling belakang
§         DeQueue
Untuk menghapus item dari posisi paling depan
§         Clear
Untuk mengosongkan queue
b)      Queue dengan Linier Array
Linier array adalah suatu array yang dibuat seakan-akan merupakan suatu garis lurus dengan satu pintu masuk dan satu pintu keluar.
c)      Queue dengan Circular Array
Circular Array merupakn suatu array yang dibuat seakan-akan merupakan lingkaran dengan titik awaldan titik akhir saling bersebelahan jika array dalam keadaan kosong.
d)     Queue dengan Double Linked List
Merupakan Queue yang menggunakan double linked list yang dapat menghemat memori dalam pengerjaanya .
3)      Linier Linked List
Linked list adalah kumpulan linier sejumlah data. Contoh linked list adalah data yang berisi daftar belanjaan yang berupa barang pertama, kedua, ketiga dan seterusnya. inked list terdiri dari dua macam :


a)      Single Linked List
Terdiri dari elemen-elemen individu, dimana masing-masing dihubungkan dengan pointer tunggal. Masing-masing elemen terdiri dari dua bagian, yaitu sebuah data dan pointer yang disebut dengan pointer next. Dengan menggunakn struktur two-member .
b)      Double Linked List
Elemen ini dihubungkan dengan dua pointer dalam satu elemen, struktur ini menyebabkan list melintas kedepan dan kebelakang.
b.      Nonlinier,misalnya;
1)      Pohon(Tree)
Pohon (Tree) didefinisikan sebagai graph terhubung yang tidak mengandung sirkuit. Sedangkan Hutan (Forest) adalah graph yang tidak mengandung sirkuit. Jadi pohon adalah hutan yang terhubung.
o       Suatu Graf G disebut terhubung apabila untuk setiap dua simpul dari graf G selalu  terdapat jalur yang menghubungkan kedua simpul tersebut.
o       Sirkuit atau cycle adalah suatu lintasan tertutup dengan derajat setiap simpul dua.
contoh :





Sifat : Suatu Graf G adalah Pohon jika dan hanya jika terdapat satu dan hanya satu jalur diantara setiap pasang simpul dari Graf G.
2)      Pohon Biner (Binary Tree)
Dalam struktur data, pohon memegang peranan yang cukup penting. Struktur ini biasanya digunakan terutama untuk menyajikan data yang mengandung hubungan hierarkykal antara elemen-elemen mereka.
Bentuk pohon khusus yang lebih mudah dikelola dalam komputer adalah pohon binary. Bentuk ini merupakan bentuk pohon yang umum. Sebuah pohon binar T didefinisikan terdiri dari sebuah himpunan hingga elemen yang disebut simpul, sehingga :
o             T adalah hampa (disebut pohon null) atau
o             T mengandung simpul R yang dipilih disebut akar (root) dari T, dan simpul sisanya membentuk 2 pohon binary T1 dan T2 yang saling lepas.
Setiap simpul didalam pohon binar hanya dapat mempunyai 0, 1 atau 2 successor (turunan langsung).
Untuk menyajikan pohon binar, simpul akar adalah simpul yang digambar pada bagian paling atas. Sedangkan suksesor kiri (left successor) digambarkan sebagai garis ke kiri bawah dan suksesor kanan (right successor) sebagai garis ke kanan bawah.
Contoh :









§         B adalah left successor dan C adalah right successor dari simpul A
§         Left subtree dari root A terdiri dari simpul B, D, E, F
§         Right subtree dari root A terdiri dari simpul C, G, H, J, K, L
§         F adalah left successor dari simpul E
§         L adalah right successor dari simpul J
§         Kedalaman atau ketinggian (depth/height) dari pohon binar T adalah banyak    maksimum simpul dari cabang di T. Untuk pohon binar di atas, ketinggiannya adalah 5.
3)      Graph
Suatu Graph mengandung  2 Himpunan,yaitu :
o       Himpunan  V yang elemenya disebut simpul (vertex)
o       Himpunan E yang merupakan pasangan tak urut dari simpul. Anggotanya disebut Ruas (Edge)
Banyaknya simpul (vertex) disebut order, sedangkan banyanya ruas (Edge) disebut size dari Graph. Multigraph adalah graph yang mengandung ruas sejajar sedangkan simple graph adalah suatu graph yang tidak mengandung ruas sejajar ataupun self-loop.
4)      Pohon Cari Biner (Search Binary Tree)
Merupakan binary yang mempunyai sifat dimana semau left child harus lebih kecil dibandingkan  dengan right child dan parentnya dan sebaliknya. Binary ini dibuat untuk mengatasi kelemahan binary tree biasa dalam pencarian node tertentu.