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.




Daftar struktur data umum :
  • Record

Sebuah record merupakan koleksi satuan data yang heterogen, yakni terdiri dari berbagai
type. Satuan data tersebut sering disebut sebagai field dari record. Field dipanggil dengan
menggunakan namanya masing-masing. Suatu field dapat terdiri atas beberapa subfield.
Contohnya: 
program list;  {untuk menampilkan list data karyawan} 
uses wincrt;
type karyawan=record
  nama: string;
  kelamin: string;
  alamat : string;
end;
var kry: karyawan;
begin
  clrscr;
  write('Masukkan Nama: '); readln(kry.nama);
  write('Masukkan Jenis Kelamin: '); readln(kry.kelamin);
  write('Masukkan Alamat: '); readln(kry.alamat);
  {untuk memasukkan data karyawan}
  writeln(kry.nama);
  writeln(kry.kelamin);
  writeln(kry.alamat);
  {untuk menampilkan data karyawan}
end.




  • Array

Array adalah suatu struktur yang terdiri dari sejumlah elemen yang memiliki tipe data yang sama. Elemen-elemen array tersusun secara sekuensial dalam memory computer. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun banyak dimensi (multi dimensi).
Contohnya :
uses crt;
var X : array[1..100] of integer;
a,b,n,r : integer;
beda : boolean;
begin
  write('Banyaknya data : ');readln(n);
  if n > 100 then begin
    writeln('Melebihi batas, (tidak boleh lebih dari 100)');
    exit;
  end;
  for a:=1 to n do begin
    repeat
      r:=random(100)+1;
      b:=1;beda:=true;
      repeat
        if r=x[b] then beda:=false else inc(b);
      until (b>a-1) or (beda=false);
    until (beda);
    x[a]:=r;
  end;
  writeln;
  for a:=1 to n do write(X[a],' ');
end.




  • List

List linier adalah sekumpulan elemen bertype sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari 2 bagian.
Type Elmtlist = record
< Info : InfoType,
 Next : address >
Dengan Info Type adalah sebuah type terdefenisi yang menyimpan informasi sebuah elemen list ; Next adalah address dari elemen berikutnya ( suksesor ). Dengan demikian, jika didefinisikan First adalah alamt elemen pertama list, maka elemen berikutnya dapat diakses secara suksesif dari elemen pertama tersebut. 
Jadi, sebuah list linier dikenali :
elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : First alamat elemen berikutnya ( suksesor ), jika kita mengetahui alamat sebuah elemen , yang dapat diakses melalui field NEXT setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu.Untuk mengacu sebuah elemen , alamat harus terdefenisi. Dengan alamat tersebut Informasi yang tersimpan pada elemen list dapat diakses.
elemen terakhirnya, Ada berbagai cara untuk mengenali elemen akhir Jika L adalah list , dan P adalah address : 
Alamat elemen pertama list L dapat diacu dengan notasi :
First (L)
Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi :
Info(P)
Next(P)

Skema traversal untuk list linier
List terdiri dari sekumpulan elemen.Seringkali diperlukan untuk emproses setiap elemen list dengan cara yang sama. Karena itu salah primitif perasi konsultasi dasar pada struktur list adalah traversal, yaitu “mengunjungi” setiap elemen list untuk diproses.Karena Urutan akses adalah dari elemen pertama sampai dengan elemen terakhir,  maka traversal list secara natural dilakukan dari elemen pertama, suksesornya, dan seterusnya sampai dengan elemen terakhir.
Skema traversal yang dipakai adalah Sbb :
Procedure SKEMAListTransversal1( Input L : List ) 
{K. Awal : List L terdefinisi , mungkin kosong }
{K. Akhir : semua elemen list L dikunjungi dan telah diproses }
{Proses : Traversal sebuah list linier. Dengan MARK,tanpa pemrosesan khusus pada list kosong}.




  • Stack / Tumpukan

Secara bahasa, Stack berarti tumpukan. Jika dikaitkan dengan struktur data, Stack berarti sekumpulan data yang organisasi atau strukturnya bersifat tumpukan atau menyerupai tumpukan. “Top “ merupakan pintu untuk keluar masuknya elemen – elemen stack. A, B, dan C merupakan suatu koleksi. Dari ilustrasi dapat digambarkan bahwa C merupakan elemen yang terakhir memasuki stack namun pertama keluar dari stack. Begitu sebaliknya dengan A. A merupakan elemen pertama yang memasuki tumpukan namun terakhir saat keluar dari tumpukan.
Contohnya :
#include<iostream.h>
#include<conio.h>
main()
{
char a[6]={'s','t','i','k','o','m'};
int i;
//Inputan Data
cout<<"Data Masukkan : "<<a<<endl;
cout<<endl;
//Menampilkan data
cout<<"Pembalikan Data :";
for(i=6;i>=0;i--)
{
cout<<a[i]<<"";
}
cout<<endl;
getch();
}




  • Antrian / Queue

Queue (antrian) adalah barisan elemen yang apabila elemen ditambah maka penambahannya berada di posisi belakang (rear) dan jika dilakukan pengambilan elemen dilakukan di elemen paling depan (front). Oleh karena itu, queue bersifat FIFO (first in first out).
Operasi-operasi
1. Create : Operasi untuk menciptakan dan inisialisasi queue (fungsi inisialisasi)
2. isempty : Operasi pemeriksaan queue kosong (fungsi kosong)
3. isfull : Operasi pemeriksaan queue penuh (fungsi penuh).
4. Dequeue : proses pengambilan elemen di posisi depan
5. Enqueue : proses penambahan elemen di posisi belakang
6. clear : operasi untuk mengosongkan queue

Fungsi Create
Digunakan untuk membentuk dan menunjukan awal terbentuknya suatu antrian/queue 
deklarasi dalam c++ 
void create( ){
    antrian.head=antrian.tail=-1;
}

Fungsi isempty
Fungsi isempty digunakan untuk memeriksa apakan keadaan queue tidak memiliki elemen. Fungsi isempty didapatkan dengan memeriksa field belakang dari queue. Jika field belakang bernilai 0 maka berarti queue kosong dan jika tidak 0 maka berarti queue mempunyai elemen. pemeriksaan nilai belakang dilakukan dengan membandingkannya dengan nilai -1. Jika nilai belakang bernilai -1 maka queue kosong (true) dan jika lebih dari -1 berarti queue tidak kosong (false).
deklarasi dalam c++ 
int kosong(TQueue Q)
{
     if (Q.belakang==-1)
        return 1;
     else
        return 0;
}

Fungsi isfull
Fungsi isfull berguna untuk memeriksa apakah suatu queue telah penuh. Fungsi
ini diperlukan ketika proses enqueue. Fungsi ini akan bernilai benar (true) jika
field belakang sama dengan nilai maks_queue jika tidak sama dengan berarti
queue belum penuh.
perbandingan yang dilakukan adalah bukan dengan maks_queue
tetapi dengan nilai maks_queue-1.
deklarasi dalam c++ 
int penuh(TQueue Q)
{
     if(Q.belakang==Q.maks_queue-1)
        return 1;
     else
        return 0;
}

Fungsi Enqueue
Proses enqueue adalah proses untuk penambahan di posisi belakang.
Penambahan ini dilakukan jika kondisi queue tidak penuh. Jika keadaan masih
kosong, maka field depan dan belakang bernilai 1 tetapi jika sudah mempunyai
elemen maka yang nilai belakang harus bertambah 1. Kemudian data baru
disimpan di array pada posisi belakang.
deklarasi dalam c++ 
void enqueue(TQueue *Q, int data) 
   if(!penuh(*Q)) 
   { 
      if(empty(*Q) 
      { 
          Q-&gt;depan=0; 
          Q-&gt;belakang=0; 
      } 
      else 
        Q-&gt;belakang++; 
 
      Q-&gt;antrian[Q-&gt;belakang]=data; 
   } 
   else 
        printf(“Queue Telah Penuh\n”); 
}
 
Fungsi Dequeue 
Operasi dequeue adalah proses pengambilan elemen queue. Tentunya elemen
yang diambil selalu dari elemen pertama  (1). Setelah elemen pertama diambil,
maka akan diperlukan proses pergeseran elemen data setelah elemen data yang
diambil (dari posisi ke-2 sampai posisi paling belakang), dan kemudian posisi
belakang akan dikurangi 1 karena ada data yang diambil.
deklarasi dalam c++ 
int dequeue(TQueue *Q)
{
    int data,i;
    if(!kosong(*Q))
    {
        data=Q-&gt;antrian[Q-&gt;depan];
        for(i=0;i&lt;=Q-&gt;belakang-1;i++)
           Q-&gt;antrian[i]=Q-&gt;antrian[i+1];
        Q-&gt;belakang–;
        return data;
    }
    else
    {
        printf(“Queue Kosong.\n”);
        return 0;
    }
}

Fungsi Clear
Operasi clear adalah operasi untuk mengahapus elemen elemen antrian dengan cara membuat tail dan head =-1.penghapusan antrian antrian sebenarnya tidak menghapus arraynya,namun hanya mengeset indek pengaksesanya ke nilai -1.sehingga elemen elemen antrian tidak lagi terbaca sehingga mengembalikan antrian seperti keadaan semula.
 deklarasi dalam c++ 
  void clear( ){
antrian.head=antrian.tail=-1;
printf(“data clear”);
}




  • Tree / Pohon

Didefinisikan sebagai suatu kumpulan elemen salah satu elemennya disebut dengan akar (root), dan sisa elemen lainnya (yang disebut simpul) terpecah menjadi sejumlah himpunan yang paling tidak berhubungan satu sama lain, yang disebut dengan subpohon ( subtree), atau disebut juga cabang. Jika kita melihat pada subpohon, maka subpohon inipun juga mempunyai akar dan sub-subpohonnya masing-masing. Dalam kehidupan sehari-hari, tree dapat dilihat dari pohon silsilah keluarga. Tingkat yang tertinggi disebut juga sebagai root. 







Contoh Tree dengan 15 simpul Jika kita memperhatikan gambar ditas, sebenarnya yang disebut dengan simpul (node atau vertex) adalah elemen pohon yang berisi informasi / data dan petunjuk percabangan. Pada pohon diatas memiliki 15 simpul yang berisi informasi berupa huruf A, B, C, D sampai O lengkap dengan percabangannya. Akar / Root dari pohon diatas berisi huruf A. Tingkat (level) suatu simpul ditentukan dengan pertama kali menentukan akar sebagai bertingkat 1. jika suatu simpul dinyatakan sebagai tingkat N, maka simpul-simpul yang merupakan anaknya dikatakan berada dalam tingkat N+1. pada p ohon diatas merupakan tree dengan 5 level. Selain tingkat, dikenal juga istilah derajad (degree) dari suatu simpul. Derajad suatu simpul dinyatakan sebagai banyaknya anak atau turunan dari simpul tersebut. Contoh, dari gambar 6.1 simpul A mempunyai derajad 2, simpul B mempunyai derajad 2, simpul C berderajad 3. simpul-simpul F, H, I, J, K, L, N, O yang semuanya berderajad nol, disebut dengan daun (leaf). 





Simpul-simpul yang disebut daun Tinggi (Height) atau Kedalaman (Depth) dari suatu pohon adalah tingkat maksimum dari suatu pohon dikurangi dengan satu. Dengan demikian pohon diatas mempunyai tinggi atau kedalaman sama dengan 4. Hutan (Forest) adalah kumpulan sejumlah pohon yang tidak saling berhubungan. Dari gambar diatas jika kita menghapus simpul A maka akan terbentuk sebuah hutan. Pohon Biner (Binary Tree) Pohon biner bisa didefinisikan sebagai suatu kumpulan simpul yang mungkin kosong atau mempunyai akar dan dua subpohon yang saling terpisah yang disebut dengan subpohon kiri dan sub pohon kanan. Subpohon disebut juga sebagai cabang. Karakteristik dari pohon biner ialah bahwa setiap simpul paling banyak hanya mempunyai dua buah anak. Dengan kata lain derajat tertinggi dari sebuah pohon biner adalah dua. Pengertian daun, root, level, tinggi dan derajad yang berlaku pada pohon juga berlaku pada binary tree. Penyajian binary tree pada komputer di gunakan double link list. Deklarasi Pohon Setiap simpul pada pohon biner selalu berisi dua buah pointer yang menunjuk ke cabang kiri dan cabang kanan dengan melihat hal tersebut maka struktur double link list sangat cocok untuk di terapkan di dalam tree ini. Untuk membuat pohon biner, terdapat aturan dalam penempatan simpulnya. Berikut ini merupakan algoritma penempatan sebuah simpul dalam pohon biner : “Simpul yang berisi informasi yang nilainya lebih besar dari simpul diatasnya akan ditempatkan sebagai cabang kanan dan jika lebih kecil akan ditempatkan di cabang kiri.” Proses untuk memperoleh pohon biner diatas adalah sebagai berikut : Karakter pertama ‘H’ ditempatkan sebagai Akar. Karakter ‘K’ karena lebih besar dari ‘H’ diletakkan dicabang kanan. Karakter ‘A’ karena lebih kecil dari ‘H’ akan menempati cabang kiri dari ‘H’. kemudian, karena karakter ‘C’ lebih kecil dari ‘H’ dan lebih besar dari ‘A’ maka ia di letakkan sebagai cabang kanan dari ‘A’. demikian seterusnya sampai semua masukkan di proses. Untuk mengalokasikan simpul baru seperti diatas biasanya digunakan fungsi rekursif, untuk itu ada baiknya jika kita membuat fungsi baru agar proses rekursif untuk simpul dapat berlangsung sukses. Kunjungan Pada Pohon Biner Sebuah pohon biner memiliki operasi traversal yaitu suatu kunjungan pada suatu simpul tepat satu kali. Dengan melakukan kunjungan lengkap kita akan memperoleh urutan informasi secara linier yang tersinpan di dalam pohon biner. Terdapat tiga jenis kunjungan pada pohon biner, yaitu : 1. PREORDER Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut : - Cetak isi simpul yang dikunjungi. - Kunjungi cabang kiri. - Kunjungi cabang kanan. Jika kita melakukan traversal secara PREORDER pada pohon biner tersebut maka akan menghasilkan untai : ‘HACBKJL’. 2. INORDER Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut: - Kunjungi cabang kiri. - Cetak isi simpul yang dikunjungi. - Kunjungi cabang kanan. Jika kita melakukan traversal secara INORDER pada pohon biner tersebut maka akan menghasilkan untai : ‘ABCHJKL’. 3. POSTORDER Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut : - Kunjungi cabang kiri. - Kunjungi cabang kanan. - Cetak isi simpul yang dikunjungi. Jika kita melakukan travarsal secara POSTORDER pada pohon biner tersebut maka akan menghasilkan untai : ‘BCAJLKH’

Penulis : Charley Christerico Corputty (Triple-C) ~ Sebuah blog yang menyediakan berbagai macam informasi

Artikel Struktur Data ini dipublish oleh Charley Christerico Corputty (Triple-C) pada hari Jumat, 11 Januari 2013. Semoga artikel ini dapat bermanfaat.Terimakasih atas kunjungan Anda silahkan tinggalkan komentar.sudah ada 0 komentar: di postingan Struktur Data
 

0 komentar:

Posting Komentar