Selasa, 05 Juni 2012

PENGERTIAN STRUKTUR DATA

 struktur data

Pengertian Struktur Data

Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer agar bisa dipakai secara efisien. Sedangkan 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.

Secara garis besar type data dapat dikategorikan menjadi:
Type data sederhana.

* Type data sederhana tunggal, misalnya Integer, real, boolean dan karakter.
* Type data sederhana majemuk, misalnyaString

Struktur Data, meliputi:

* Struktur data sederhana, misalnya array dan record.
* Struktur data majemuk, yang terdiri dari:

Linier : Stack, Queue, sertaList dan Multilist
Non Linier : Pohon Biner dan Graph

Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Struktur data yang standar yang biasanya digunakan dibidang informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist
* Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )

REVIEW RECORD (REKAMAN)
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 terdiri
atas 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;

Pengertian Data

Ada banyak pengertian tentang data, secara sederhana data adalah fakta kasar atau gambaran yang dikumpulkan dari keadaam tertentu yang berisi fakta yang masih kasar dan belum diolah, berikut beberapa hal yang berkaitan dengan data:
a. Syarat Data

* Obyektif, data sesuai dengan keadaan sebenarnya atau kenyataan.
* Relevan, sesuai dengan kepentingan atau tujuan yang diinginkan.
* Standard error kecil.

b. Macam-macam data
1. Berdasarkan sifatnya

* Data kwantitatif, data dalam bentuk angka atau bilangan, Contohnya; 6,4,3,4,7
* Data kwalitatif, data bukan dalam bentuk angka, tetapi dalam bentuk pernyataan dan atau kategori, Contohnya: Baik, buruk .

2. Berdasarkan sumbernya

* Data internal, data yang berasal dari dalam organisasi.
* Data eksternal, data yang berasal dari luar organisasi.

3. Berdasarkan cara memperoleh

* Data primer, data yang diperoleh dari sumber pertama/sumber data, data ini biasanya belum diolah.
* Data sekunder, data yang diperoleh dari pihak kedua,data ini biasanya sudah dalam keadaan diolah

4. Berdasarkan cakupannya

* Data Sensus, diperoleh dari populasi.
* Data Sampel, siperoleh dari sampel.

5. Berdasarkan skala pengukurannya

* Nominal
* Ordinal
* Interval
* Rasio

REKURSI

pengertian dan implementasi Rekursi/Rekursif

Posted on 4:40 PM by Rudi Syaifudin
Rekursi adalah konsep pengulangan yang penting dalam ilmu komputer. Konsep ini dapat digunakan untuk merumuskan solusi sederhana dalam sebuah permasalahan yang sulit untuk diselesaikan secara iteratif dengan menggunakan loop for, while do. Pada saat tertentu konsep ini dapat digunakan untuk mendefinisikan permasalahan dengan konsisten dan sederhana. Pada saat yang lain, rekursi dapat membantu untuk mengekspresikan algoritma dalam sebuah rumusan yang menjadikan tampilan algoritma tersebut mudah untuk dianalisa.

Rekursi

Definisi rekursi adalah definisi yang menggunakan konsep atau sebagian dari definisi tersebut menjadi definisi yang komplit.
Misalnya : "keturunan" bisa berarti anak atau keturunan dari anak. "Kalimat" bisa berarti dua kalimat yang digabung dengan kata hubung "dan". "Direktori" adalah bagian pada hard disk yang berisi file dan direktori. Dalam matematika, "himpunan" adalah koleksi elemen, di mana elemen tersebut bisa berupa himpunan. "Pernyataan" pada Java misalnya pernyataan while yang didalamnya terdapat kata while, kondisi bernilai boolean dan pernyataan lainnya.
Definisi rekursi bisa menjelaskan situasi yang sangat kompleks dalam beberapa kata. Definisi istilah "keturunan" tanpa menggunakan rekursi bisa jadi "anak, cucu, cicit, dan seterusnya". Akan tetapi mengatakan "dan seterusnya" bukan arti "keturunan" secara lengkap.
Kita juga akan kesulitan jika kita mencoba mendefinisikan "direktori" sebagai "file yang berisi daftar file, dimana beberapa file bisa berisi daftar file, di mana beberapa file tersebut bisa berisi daftar file, dan seterusnya". Mencoba untuk menjelaskan pernyataan Java tanpa menggunakan rekursi dalam definisinya akan sulit dilakukan.
Rekursi bisa digunakan dalam teknik pemrograman. Subrutin rekursif adalah subrutin yang memanggil dirinya sendiri, baik langsung maupun tak langsung. Subrutin tersebut memanggil dirinya sendiri secara tidak langsung yaitu jika ia memanggil subrutin lain yang akhirnya memanggil subrutin pertama (baik langsung maupun tak langsung).
Suatu subrutin rekursi bisa menyelesaikan tugas kompleks dalam beberapa baris perintah. Kita akan lihat beberapa contohnya pada bagian ini.

Mari kita mulai dengan contoh yang sudah kita lihat sebelumnya: algorithma pencarian biner pada bagian sebelumnya. Pencarian biner digunakan untuk mencari suatu nilai dalam list terurut (atau jika item nilai tersebut tidak ada di dalam list tersebut, akan memberitahu hasilnya misalnya dengan mengembalikan -1).
Caranya adalah dengan mengecek elemen di tengah list tersebut. Jika elemen tersebut sama dengan nilai yang dicari, maka pencarian tersebut selesai. Jika nilai yang dicari lebih kecil daripada nilai elemen di tengah list tersebut, maka kita harus mencari di separuh awal dari list tersebut. Jika lebih besar, kita harus mencari di separuh akhir list tersebut. Kemudian, pada separuh list yang kita pilih tersebut, kita akan mengecek kembali elemen tengahnya. Kita akan melihat kembali apakah nilainya sama dengan nilai yang kita cari, lebih besar atau lebih kecil, yang dari sini kita tahu paruh mana yang akan kita cari berikutnya. Dan begitu seterusnya, hingga besar list yang akan dicari berkurang menjadi 0.
Ini adalah definisi rekursif, dan kita bisa membuat subrutin rekursif untuk mengimplementasikannya.
Sebelumnya, ada dua pertimbahangan yang harus kita masukkan ke dalam perhitungan kita, yang merupakan fakta tentang subrutin rekursif. Pertama, algoritma pencarian biner dimulai dengan mengecek "elemen tengah suatu list". Apa yang terjadi jika list tersebut kosong? Jika tidak ada elemen di dalam list, maka kita tidak mungkin melihat elemen di tengahnya. Atau dengan kata lain, ini disebut "kondisi awal" untuk mengecek elemen di tengah list, yaitu memiliki list yang tidak kosong.
Apa yang terjadi kita ternyata harus mencari nilai di list kosong? Jawabannya mudah : Kita bisa mengatakan bahwa nilai yang kita cari tidak ada di dalam list. List kosong adalah kasus dasar untuk algoritma pencari biner. Kasus dasar untuk algoritma rekursif adalah kasus yang akan ditangani secara langsung, bukan dilakukan secara rekursif. Algoritma pencarian biner memiliki kasus dasar lain, yaitu jika kita menemukan nilai yang kita cari di tengah suatu list, maka program tersebut selesai. Kita tidak perlu melakukan rekursi lebih lanjut.
Pertimbangan kedua adalah parameter subrutin tersebut. Dalam subrutin non-rekursif dari pencarian biner yang dibahas sebelumnya, parameternya adalah suatu array. Akan tetapi dalam pendekatan rekursif, kita harus bisa menerapkan subrutin secara rekursif hanya sebagian dari list aslinya. Pada subrutin aslinya yang non-rekursif, kita melakukan pencarian di seluruh array, sedangkan subrutin rekursif harus bisa mencari di sebagian array. Parameter subrutin tersebut harus bisa memberi tahu di bagian mana array akan dicari.

TYPE DATA


TIPTYPE DATA

Tipe data yang dikenal dalam bahasa pascal antara lain :

·      Tipe data sederhana / Jenis data yang standar (Dasar)
1.      Integer
2.      Real
3.      Karakter
4.      Boolean

·         Tipe data non standar (user defined)
1.    Enumerated
2.    Sub-range

·         Tipe data berstuktur
1.        Array
2.        Record
3.        Set
4.        File

·         Jenis data Pointer

INTEGER


Jenis data ini merupakan nilai bilangan bulat, yang  terdiri atas integer positif, integer negatif dan nol. Pada TURBO PASCAL jenis data ini di bagi atas beberapa bagian.  (lihat tabel 1)

Tabel 1. Jenis data integer
Tipe
Ukuran memori
(dalam byte)
Jangkauan nilai
BYTE
1
0..255
SHORTINT
1
-128..127
INTEGER
2
-32768..32767
WORD
2
0..65535
LONGINT
4
-2147483648..2147483647

Operator Integer terdiri atas :  + , - , * , DIV dan MOD

Var
                 Jumlah : byte;
Begin
               Jumlah := 200;
                WriteLn(‘Nilai JUMLAH = ‘,Jumlah);
End.
Hasilnya bila dijalankan :

          Nilai JUMLAH = 200


REAL


Penulisan untuk jenis data ini selalu menggunakan titik desimal. Nilai konstanta numerik real berkisar dari 1E-38 sampai dengan 1E+38 dengan mantissa yang signifikan sampai dengan 11 digit. E menunjukkan nilai 10 pangkat. Nilai konstanta numerik real menempati memori sebesar 6 byte.

Contoh :
123.45
12345.  ® salah, titik desimal tidak boleh dibelakang
12E5
12E+5
-12.34
.1234  ® salah, titik desimal tidak boleh dimuka

 Pada TURBO PASCAL, jenis data ini dibedakan ( lihat tabel 2.)


Tabel 2. Jenis data Real

Tipe
Ukuran memori
(dalam byte)
Jangkauan nilai
Digit signifikan
SINGLE
4
1.5x10E-45 .. 3.4x10E38
7-8
DOUBLE
8
5.0x10E-324 .. 1.7x10E308
15-16
EXTENDED
10
1.9x10E-4951 .. 1.1x10E4932
19-20
COMP
8
-2E+63+1 .. 2E+63-1
19-20

Operator untuk jenis data ini terdiri atas : + , - , * dan /

KARAKTER


Yang dimaksud dengan jenis data ini adalah karakter tunggal atau sebuah karakter yang ditulis diantara tanda petik tunggal, seperti misalnya ‘A’, ’a’, ’!’, ’5’ dsb.

Dasarnya adalah ASCII CHARACTER SET.

Misalnya : 032 pada tabel ASCII CHARACTER SET menunjukkan karakter.

                   Blank.
          033                        !
          048                         0
076                         L
          dst

STRING


Nilai data string merupakan urut-urutan dari karakter yang terletak di antara tanda petik tunggal. Nilai data string akan menenpati memori sebesar banyaknya karakter stringnya ditambah dengan 1 byte. Bila panjang dari suatu string di dalam deklarasi variabel tidak disebutkan, maka dianggap panjangnya adalah 255 karakter.

Contoh :
Var
          Kampus : string[10];
Begin
          Kampus := ‘Gunadarma’;
Write(Kampus);
End.


 

BOOLEAN


Jenis data ini mempunyai nilai TRUE atau FALSE.

Operator untuk jenis data ini adalah :
1.    Logical Operator, yaitu : NOT, AND dan OR
2.    Relational Operator, yaitu : >, <, >=, <=, <> dan =


JENIS DATA NON-STANDARD (USER DEFINED)

ENUMERATED.
Jenis data ini terdiri atas barisan identifier yang terurut dimana setiap identifier tersebut dianggap sebagai suatu individual data item (elemen data yang berdiri sendiri).

Pada saat mendeklarasikan jenis data ini kita harus menuliskan semua elemen-elemennya.

Bentuk umum deklarasinya adalah :

TYPE nama = (data_item_1, data_item_2, ……., data_item_n);

Contoh :

TYPE hari = (sen,sel,rab,kam,jum,sab,ming);

TYPE warna = (red,blue,green,yellow,black,white);

Setelah jenis data ini dideklarasikan, maka selanjutnya kita dapat mendeklarasikan suatu variabel yang berjenis data sama dengan jenis data ini.

Misalnya :
              TYPE nama_hari = (sen,sel,rab,kam,jum,sab,ming);
              VAR libur : nama_hari;

Fungsi standar yang dapat digunakan pada jenis data ini adalah :

PRED, SUCC dan ORD

Misalnya :

     PRED (sel) = sen
     SUCC (sen) = sel
     ORD (sen) = 0
     ORD (sel) = 1

      dsb

SUB-RANGE.

Jenis data ini berupa range dari suatu kumpulan data yang mempunyai urutan..

Bentuk umum deklarasinya adalah :

     TYPE nama = data_item_pertama .. data_item_terakhir;

Contoh :
          TYPE jam_kuliah = 1 .. 10;
tanggal = 1 .. 31;
abjad = ‘A’ .. ‘Z’;

          TYPE bulan = (jan,feb,mar,apr,mei,jun,jul,agt,sep,okt,nov,des);
hari = (sen,sel,rab,kam,jum,sab,ming);
ata = agt .. jan;
pta = feb .. jun;
hari_kerja = sen .. jum;

 



PENGERTIAN LIST

Pengertian Struktur Data Linked List

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).

Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yang sangat besar(misal 100). Hal ini tidak efektif karena seringkali yang dipakai tidak sebesar itu. Dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang besarnya statik. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.

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.

-------- -------- --------
Mesin Data Data
-------- -------- --------
(kepala) ---> Pointer ---> Pointer --
-------- -------- --------

Programmer membaca data menyerupai kondektur yang ingin memeriksa karcis penumpang. Programmer menyusuri linked list melalui kepalanya, dan kemudian berlanjut ke gerbong (data) berikutnya, dan seterusnya sampai gerbong terakhir (biasanya ditandai dengan pointer menunjukkan alamat kosong (NULL)). Penyusuran data dilakukan secara satu persatu sehingga penyusuran data bekerja dengan keefektifan On. Dibandingkan array, ini merupakan kelemahan terbesar linked list. Pada array, apabilan programmer ingin mengakses data ke-n (index n), maka programmer dapat langsung mengaksesnya. Sedangkan dengan linked list programmer harus menyusuri data sebanyak n terlebih dahulu.

ARRAY


ARRAY

Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.

VARIABEL ARRAY
            nama_variabel[indeks]

ketentuan nama variabel arrray sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .

DEKLARASI VARIABEL ARRAY

BU                  : tipe nama_variabel[indeks];

Contoh           : float bil[10];
            deklarasi variabel array dengan nama bil yang akan menampung 10 data            yang  bertipe  float.  Indeks  10  menunjukkan  variabel  bil  terdiri  dari  10 elemen, dimana setiap elemen akan menampung sebuah data.

Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
            float bil[11]

INISIALISASI  ARRAY 1 DIMENSI
Inisialisasi  dapat dilakukan bersama dengan deklarasi atau tersendiri. Inisialisasi suatu array adalah dengan meletakkan elemen array di antara tanda kurung kurawal {}, antara elemen yang satu dengan lainnya dipisahkan koma.
            int bil[2] = {4,1,8}

            bil[0] = 4
            bil[1] = 1
            bil[2] = 8

AUTOMATIC ARRAY adalah Inisialisasi array dilakukan di dalam fungsi tertentu. Hanya  compiler C yang berstandar ANSI C yang dapat menginisialisasikan automatic array.
Cara menginisialisasikan  array dari compiler yg tidak mengikuti standar  ANSI C:
1. Diinisialisasikan di luar fungsi sebagai variabel GLOBAL/EXTERNAL ARRAY.
            int bil[2]={0,0,0};
            main()
           
2. Diinisialisasikan didlm fungsi sebagai variabel LOKAL/STATIC ARRAY.
            main()
            {
                        static int bil[2]={0,0,0};
                        .........

Pada automatic array yang tidak diinisialisasikan , elemen array akan memiliki nilai yang tidak beraturan. Bila global & static array tidak diinisialisasi maka semua elemen array secara otomatis akan diberi nilai nol(0).

Contoh :
main()
{
            int y;
            int hitung=0;
            int x[0];
            for(y=0;y<5;y++)
            {
                        hitung+=y;
                        x[y]=hitung;
                        printf("%3d - %3d\n",y,x[y]);
            }
}

OUTPUT:
0-  0
1-  1
2-  3
3-  6
4-  10

MENDEFINISIKAN JUMLAH ELEMEN ARRAY DALAM VARIABEL
Besarnya variabel indeks dapat ditentukan dengan menggunakan
preprocessor directives #define
#define N 40
main()
{
            int no[N],gaji[N],gol[N],status[N],juman[N];

Bila besari indeks akan diubah menjadi 50, cukup diganti dengan
#define N 50

ARRAY 2 DIMENSI
            nama_variabel [indeks1][indeks2]

indeks1          : jumlah/nomor baris
indeks2          : jumlah/nomor kolom
Jumlah elemen yang dimiliki array 2 dimensi dapat ditentukan dari hasil perkalian         indeks1 * indeks2

misal : array A[2][3] akan memiliki 2*3 = 6 elemen.

main()
{
            float  bil [5] [5]
            .......

dapat dituliskan dengan #define
#define N 5
main()
{
            float bil [N]  [N]
            .......

INISIALISASI ARRAY 2 DIMENSI
main()
{
            float bil[2] [3] =
            { { 1,2,3},         /*baris 0*/
              { 4,5,6},         /*baris 1*/
            }

elemen bil [0] [0] = 1
elemen bil [0] [1] = 2
elemen bil [0] [2] = 3
elemen bil [1] [0] = 4
elemen bil [1] [1] = 5
elemen bil [1] [2] = 6

Contoh :
main()
{
            int x[3][5];
            int y,z;
            int hitung=0;
            for(y=0;y<3;y++)


            {
                        printf("y = %d\n",y);
                        for(z=0;z<5;z++)
                        {
                                    hitung+=z;
                                    x[y][z] = hitung;
                                    printf("%/t%3d - %3d\n",z,x[y][z]);
                        }
            }
}

OUTPUT:
y = 0
   0-  0
   1-  1
   2-  2
   3-  6
   4-  10
y = 1
   0-  10
   1-  11
   2-  13
   3-  16
   4-  20
y = 2
  0-  20
  1-  21
  2-  23
  3-  26
  4-  30

STRING dan ARRAY
1. Pada string   terdapat karakter null(\0) di akhir string
2. String sudah pasti array, array belum tentu string

CONTOH - CONTOH :
1. array dengan pengisian input melalui keyboard
            baca_input()
            {
                        float nilai[10];
                        for(i=0;i<10;i++)
                        scanf("%d",&nilai[i]);
            }

2. Fungsi yang mencetak isi array dari akhir ke awal
            cetak_array()
            {
                        float nilai[10];
                        for(i=9;i>=0;i--)
                        scanf("%3f",nilai[i]);
            }
3. Menghitung rata - rata isi array nilai
            rata_rata()
            {
                        float nilai[10],jum*rata;
                        for(i=0,jum=0;i<=9;i++)
                                    jum+=nilai[i];
                                    rata=jum/i;
            }

4. Mencari nilai terbesar
            besar()
            float temp,nilai[10];
            {
                        for(temp=nilai[0],i=1;i<=9;i++)
                        if(nilai[i] > temp)
                                    temp=nilai[i];
            }
            return(temp)