Senin, 13 Februari 2012

tree

Tree bisa 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.

Jika kita memperhatikan gambar di atas, 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 pohon 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 7.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).


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 Biner
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. Gambar
7.3 merupakan penyajian pohon biner menggunakan double link list.
Deklarasi Double Linked List di dalam Pascal :
Type
Tree = ^Simpul
Simpul = Record
Info : Tipe Data;
Kiri : Tree;
Kanan : Tree;
End;
Membuat Pohon Biner
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.”
Sebagai contoh jika kita akan membentuk pohon biner dari untai
‘HKACBLJ’ maka 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 tersimpan 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.
Dari gambar 7.4 jika kita melakukan traversal secara PREORDER pada
pohon biner tersebut maka akan menghasilkan untai : ‘HACBKJL’.
Prosedur untuk melakukan traversal secara PREORDER adalah sebagai
berikut :
Procedure PREORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
Write(Temp^.Info,’ ‘); {Cetak isi simpul}
PREORDER(Temp^.Kiri); {Kunjungi cabang kiri}
PREORDER(Temp^.Kanan); {Kunjungi cabang kanan}
End;
End;
2. INORDER
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
- Kunjungi cabang kiri.
- Cetak isi simpul yang dikunjungi.
- Kunjungi cabang kanan.
Dari gambar 7.4 jika kita melakukan traversal secara INORDER pada pohon
biner tersebut maka akan menghasilkan untai : ‘ABCHJKL’.


Prosedur untuk melakukan traversal secara INORDER adalah sebagai
berikut:
Procedure INORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
INORDER(Temp^.Kiri); {Kunjungi cabang kiri}
Write(Temp^.Info,’ ‘); {Cetak isi simpul}
INORDER(Temp^.Kanan); {Kunjungi cabang kanan}
End;
End;
3. POSTORDER
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
- Kunjungi cabang kiri.
- Kunjungi cabang kanan.
- Cetak isi simpul yang dikunjungi.
Dari gambar 7.4 jika kita melakukan travarsal secara POSTORDER pada
pohon biner tersebut maka akan menghasilkan untai : ‘BCAJLKH’.
Prosedur untuk melakukan traversal secara POSTORDER adalah sebagai
berikut:
Procedure POSTORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
POSTORDER(Temp^.Kiri); {Kunjungi cabang kiri}
POSTORDER(Temp^.Kanan); {Kunjungi cabang kanan}
Write(Temp^.Info,’ ‘); {Cetak isi simpul}
End;
End;
Dalam pengembangan nantinya, tiga jenis kunjungan ini dapat digunakan
sebagai pencarian notasi infix, postfix dan prefix. Kunjungan Preorder untuk











queue

Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front). 
Pada Stack atau tumpukan menggunakan prinsip“Masuk terakhir keluar pertama”atau LIFO (Last In First Out), Maka pada Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll.
Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak.
Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).
Karakteristik Queue atau antrian :
1. elemen antrian
2. front (elemen terdepan antrian)
3. tail (elemen terakhir)
4. jumlah elemen pada antrian
5. status antrian
Operasi pada Queue atau antrian
1. tambah(menambah item pada belakang antrian)
2. hapus (menghapus elemen depan dari antrian)
3. kosong( mendeteksi apakah pada antrian mengandung elemen atau tidak)
Operasi-operasi Queue :
1. Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail  = -1
Queue pada Struktur Data
Queue pada Struktur Data
 
 
2. IsEmpty()
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail.
Queue pada Struktur Data
 
3. IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh
Queue pada Struktur Data
 
 
4. Enqueue
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang
Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu
Queue pada Struktur Data
 
5. Dequeue()
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping.
Queue pada Struktur Data
 
6. Clear()
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca
Queue pada Struktur Data
 
7. Tampil()
Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail
Queue pada Struktur Data

stack

Pengertian Stack pada Struktur Data adalah sebagai tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan di atas data yang lain, koleksi dari objek-objek homogen, atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Stack pada Struktur Data dapat diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak. 

Stack pada Struktur Data

Stack bersifat LIFO (Last In First Out) artinya Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack 
Operasi-operasi yang biasanya tredapat pada Stack yaitu:
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
Cara mendefenisikan Stack dengan Array of Struct yaitu:
1. Definisikan Stack dengan menggunakan struct
2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
3. Buatlah variabel array data sebagai implementasi stack
4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.
contoh :
//Deklarasi MAX_STACK
                #define MAX_STACK 10   
            
//Deklarasi STACK dengan struct dan array data
                typedef struct STACK{
                                int top;
                                char data[10][10];                                                           
                }; 
//Deklarasi/buat variabel dari struct
                STACK tumpuk;
Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong.
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang.  Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.
Stack pada Struktur Data
IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1)  maka belum full.
Stack Struktur Data

Ilustrasi Stack pada kondisi Full
IsEmpty berfungsi untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.
Stack Struktur Data
Push berfungsi untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang ditunjuk oleh TOS).
Tambah satu (increment)  nilai top of stack lebih dahulu setiap kali ada penambahan elemen stack.
Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumnya.
Stack Struktur Data


Pop berfungsi untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack.
Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen stack berkurang.
Stack Struktur data
 
Printberfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.
Stack Struktur Data
 
Stack pada Struktur Data
 
Operasi Push
void Push (NOD **T, char item)
                {
                                NOD *n;
                                n=NodBaru (item);
                                n->next=*T;
                                *T=n;
                }
Operasi Pop
char Pop (NOD **T)
                {
                                NOD *n; char item;
                                if (!StackKosong(*T)) {
                                                P=*T;
                                                *T=(*T)->next;
                                                item=P->data;
                                                free(P);
                                }
                                return item;
                }
 
create berfungsi untuk membuat sebuah stack baru yang masih kosong.

Sumber : http://blog-arul.blogspot.com/2012/01/stack-pada-struktur-data.html#ixzz1mKGI85PM
Ilustrasi Stack pada saat inisialisasi

IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1)  maka belum full.
 

infiks , postfiks , dan prefiks

Infiks, Postfix dan Prefix

Infiks, notasi Postfix dan Prefix tiga cara yang berbeda tetapi setara dengan menulis ekspresi. Hal ini paling mudah untuk menunjukkan perbedaan dengan melihat contoh operator yang mengambil dua operan.
Infiks notasi: X + Y
Operator ditulis di-antara operan mereka. Ini adalah cara yang biasa kita menuliskan ekspresi. Sebuah ekspresi seperti A * ( B + C ) / D biasanya diartikan sesuatu seperti: ". Pertama menambahkan B dan C bersama-sama, kemudian kalikan hasilnya dengan A, kemudian bagi dengan D untuk memberikan jawaban akhir" Infiks notasi membutuhkan informasi tambahan untuk membuat urutan evaluasi dari operator jelas: aturan dibangun ke dalam bahasa tentang operator didahulukan dan associativity, dan kurung ( ) untuk memungkinkan pengguna untuk mengesampingkan aturan-aturan ini. Misalnya, peraturan yang biasa untuk associativity mengatakan bahwa kita melakukan operasi dari kiri ke kanan, sehingga perkalian dengan A diasumsikan datang sebelum pembagian dengan D. Demikian pula, aturan yang biasa untuk didahulukan mengatakan bahwa kita melakukan perkalian dan pembagian sebelum kita melakukan penambahan dan pengurangan. (Lihat kuliah CS2121 ).
Postfix notasi (juga dikenal sebagai "notasi Polandia Reverse"): XY +
Operator ditulis setelah operan mereka. Ekspresi infiks yang diberikan di atas adalah setara dengan A B C + * D /
Urutan evaluasi operator selalu kiri ke kanan, dan kurung tidak dapat digunakan untuk mengubah urutan ini. Karena "+" ada di sebelah kiri dari "*" dalam contoh di atas, penambahan harus dilakukan sebelum perkalian.
Operator bertindak pada nilai-nilai segera di sebelah kiri mereka. Sebagai contoh, "+" di atas menggunakan "B" dan "C". Kita dapat menambahkan (sama sekali tidak perlu) kurung untuk membuat ini jelas:
( (A (BC +) *) D /)
Dengan demikian, "*" menggunakan dua nilai menjelang: "A", dan hasil penambahan. Demikian pula, "/" menggunakan hasil dari perkalian dan "D".
Awalan notasi (juga dikenal sebagai "notasi Polandia"): + XY
Operator ditulis sebelum operan mereka. Ekspresi diberikan di atas adalah setara dengan / * A + B C D
Adapun Postfix, operator dievaluasi kiri ke kanan dan kurung adalah berlebihan. Operator bekerja pada dua nilai terdekat di sebelah kanan. Aku bagi lagi ditambahkan (sama sekali tidak perlu) kurung untuk membuat ini jelas:
(/ (* A (+ BC) ) D) Meskipun Awalan "operator dievaluasi kiri ke kanan", mereka menggunakan nilai-nilai di sebelah kanan mereka, dan jika nilai-nilai ini sendiri melibatkan perhitungan maka ini perubahan perintah pada operator harus dievaluasi masuk Dalam contoh di atas, meskipun pembagian itu operator pertama di sebelah kiri, bertindak berdasarkan hasil perkalian, dan sebagainya perkalian harus terjadi sebelum divisi ini (dan juga penambahan harus terjadi sebelum perkalian).
Karena Postfix operator menggunakan nilai-nilai ke kiri mereka, nilai-nilai yang melibatkan perhitungan sudah akan telah dihitung saat kita kiri ke kanan, dan urutan evaluasi operator tidak terganggu dengan cara yang sama seperti dalam ekspresi Prefix.
Di ketiga versi, operan terjadi dalam urutan yang sama, dan hanya operator harus dipindahkan untuk menjaga makna yang benar. (Hal ini sangat penting bagi operator asimetris seperti pengurangan dan pembagian: A - B tidak berarti sama dengan B - A ; yang pertama adalah setara dengan A B - atau - A B , yang terakhir untuk B A - atau - B A ).
Contoh:
Infiks Postfix Awalan Catatan
A * B + C / D A B * C D / + + * A B / C D kalikan A dan B,
membagi C dengan D,
menambahkan hasil
A * (B + C) / D A B C + * D / / * A + B C D tambahkan B dan C,
kalikan dengan A,
bagi dengan D
A * (B + C / D) A B C D / + * * A + B / C D membagi C dengan D,
menambahkan B,
kalikan dengan A


Konversi antara notasi

Metode yang paling mudah adalah mulai dengan memasukkan semua kurung implisit yang menunjukkan urutan misalnya evaluasi:
Infiks Postfix Awalan
( (A * B) + (C / D) ) ( (AB *) (CD /) +) (+ (* AB) (/ CD) )
((A * (B + C) ) / D) ( (A (BC +) *) D /) (/ (* A (+ BC) ) D)
(A * (B + (C / D) ) ) (A (B (CD /) +) *) (* A (+ B (/ CD) ) )
Anda dapat mengkonversi langsung antara bentuk-bentuk tanda kurung hanya dengan menggerakkan operator dalam kurung misalnya (X + Y) atau (X Y +) atau (+ X Y) . Ulangi langkah ini untuk semua operator dalam ekspresi, dan akhirnya menghapus tanda kurung berlebihan. Anda dapat menggunakan trik serupa untuk mengkonversi ke dan dari pohon parse - setiap triplet tanda kurung dari operator dan dua operand (atau sub-ekspresi) sesuai dengan node pohon. Pohon-pohon parse sesuai adalah:
          / *
       + / \ / \
      / \ D * A +
     / \ / \ / \
    * / A + B /
   / \ / \ / \ / \
  ABCD SM CD

 ((A * B) + (C / D)) ((A * (B + C)) / D) (A * (B + (C / D)))

searching

pengertian searching

Searching berarti pencarian suatu situs yang belum kita ketahui secara pasti alamat yang dimiliki. Dalam melakukan searching biasanya kita gunakan search engine sebagai mesin pembantu dalam pencarian situs tersebut.
Search engine adalah sebuah fasilitas (web) yang bisa mencari links dari situs lain. Ada berbagai macam search engine yang bisa kita gunakan dalam searcing, yaitu ; yahoo, google, altavista, lycos, astaga, msn, dan lain sebagainya. Disini akan dijelaskan bagaimana cara searcing melalui beberapa
search engine yang pada umumnya dipakai yaitu dengan menggunakan google dan yahoo.



sorting

Pengertian Sorting sort

Sorting Sort adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu.
Pada umumnya terdapat 2 cara pengurutan data yaitu
– Ascending : Pengurutan dilakukan mulai dari nilai terkecil menuju nilai terbesar
– Descending: Pengurutan dilakukan mulai dari nilai terbesar menuju nilai terkecil
Ada beberapa macem metoda pengurutan data diantaranya :
  1. Bubble Sort
  2. Selection Sort
  3. Insertion Sort
  4. Merge Sort
  5. Quick Sort
@. Bubble Sort

pengertian bubble sort
Bubble sort adalah sederhana algoritma sorting. It works by repeatedly stepping through the list to be sorted, comparing two items at a time and swapping them if they are in the wrong order. Bekerja dengan berulang kali melakukan melalui daftar akan di sortir, membandingkan dua item sekaligus dan swapping mereka jika mereka berada di salah pesanan. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. Yang melewati daftar diulang sampai swap tidak diperlukan, yang menunjukkan bahwa daftar disaring. The algorithm gets its name from the way smaller elements "bubble" to the top of the list. Algoritma yang mendapatkan namanya dari jalan kecil elemen "gelembung" ke bagian atas daftar. Because it only uses comparisons to operate on elements, it is a comparison sort . Karena hanya menggunakan perbandingan untuk beroperasi pada elemen, ia adalah perbandingan menyortir.

Bubble sort-kasus yang terburuk dan rata-rata kompleksitas kedua О (n ²), dimana n adalah jumlah item yang disortir. There exist many sorting algorithms with the substantially better worst-case or average complexity of O ( n log n ). Di sana ada banyak algoritma sorting dengan lebih baik substansial terburuk-kasus atau rata-rata kompleksitas O (n log n). Therefore bubble sort is not a practical sorting algorithm when n is large, except in rare specific applications where the array is known to be very close to being already sorted initially. Oleh karena itu gelembung menyortir tidak praktis algoritma sorting ketika n adalah besar, kecuali di langka di mana aplikasi spesifik deret diketahui sangat dekat dengan yang telah disortir awalnya.

Langkah-langkah oleh-contoh

Let us take the array of numbers "5 1 4 2 8", and sort the array from lowest number to greatest number using bubble sort algorithm. Mari kita nomor yang deret "5 1 4 2 8", dan menyusun deret dari terendah ke nomor terbesar nomor menggunakan gelembung sort Algoritma. In each step, elements written in bold are being compared. Dalam setiap langkah, unsur-unsur yang ditulis dalam huruf tebal sedang dibandingkan.

First Pass: Pertama Pass:
( 5 1 4 2 8 ) (5 1 4 2 8) \ untuk ( 1 5 4 2 8 ) Here, algorithm compares the first two elements, and swaps them. (1 5 4 2 8) Di sini, Algoritma membandingkan dua elemen pertama, dan mereka swap.
( 1 5 4 2 8 ) (1 5 4 2 8) \ untuk ( 1 4 5 2 8 ) (1 4 5 2 8)
( 1 4 5 2 8 ) (1 4 5 2 8) \ untuk ( 1 4 2 5 8 ) (1 4 2 5 8)
( 1 4 2 5 8 ) (1 4 2 5 8) \ untuk ( 1 4 2 5 8 ) Now, since these elements are already in order, algorithm does not swap them. (1 4 2 5 8) Sekarang, sejak elemen ini sudah dalam rangka, algoritma tidak swap mereka.
Second Pass: Kedua Pass:
( 1 4 2 5 8 ) (1 4 2 5 8) \ untuk ( 1 4 2 5 8 ) (1 4 2 5 8)
( 1 4 2 5 8 ) (1 4 2 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
Now, the array is already sorted, but our algorithm does not know if it is completed. Kini, deret sudah disortir, tetapi kami tidak Algoritma tahu jika sudah selesai. Algorithm needs one whole pass without any swap to know it is sorted. Algoritma satu kebutuhan seluruh lulus tanpa swap untuk mengetahui itu disortir.
Third Pass: Ketiga Pass:
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
( 1 2 4 5 8 ) (1 2 4 5 8) \ untuk ( 1 2 4 5 8 ) (1 2 4 5 8)
Finally, the array is sorted, and the algorithm can terminate. Akhirnya, deret disaring, dan algoritma dapat menghentikan.

[ edit ] Pseudocode implementation [Sunting] Pseudocode pelaksanaan

A simple way to express bubble sort in pseudocode is as follows: Cara mudah untuk menyortir ekspres gelembung di pseudocode adalah sebagai berikut:

procedure bubbleSort( A : list of sortable items ) defined as: do swapped := false for each i in 0 to length( A ) - 1 do: if A[ i ] > A[ i + 1 ] then swap( A[ i ], A[ i + 1 ] ) swapped := true end if end for while swapped end procedure

The algorithm can also be expressed as: Algoritma yang juga dapat dinyatakan sebagai:

procedure bubbleSort( A : list of sortable items ) defined as: for each i in 1 to length(A) do: for each j in length(A) downto i + 1 do: if A[ j - 1 ] > A[ j ] then swap( A[ j - 1], A[ j ] ) end if end for end for end procedure


The difference between this and the first pseudocode implementation is discussed later in the article . Perbedaan antara ini dan pertama pelaksanaan pseudocode dibahas dalam artikel nanti.

[ edit ] Alternative implementations [Sunting] Alternatif implementasi

One way to optimize bubblesort is to note that, after each pass, the largest element will always move down to the end. Salah satu cara untuk mengoptimalkan bubblesort adalah untuk dicatat bahwa, masing-masing setelah lulus, terbesar elemen akan selalu berpindah ke akhir. During each comparison, it is clear that the largest element will move downwards. Selama setiap perbandingan, jelas bahwa unsur terbesar akan berpindah ke bawah. Given a list of size n , the n th element will be guaranteed to be in its proper place. Mengingat daftar ukuran n, n th elemen yang akan dijamin untuk berada di tempat yang tepat. Thus it suffices to sort the remaining n - 1 elements. Oleh karena itu cukup untuk memilah sisa n - 1 elemen. Again, after this pass, the n - 1 th element will be in its final place. Sekali lagi, setelah lulus ini, yang n - 1 th elemen akan di tempat yang terakhir.

Metode Bubble Sort
Perhatikan bahwa jumlah pertukaran dan perbandingan data tidaklah tetap, perbedaan tergantung pada keadaan awal data setelah diacak. Tabel berikut memperlihatkan tabulasi hasil visualisasi menggunakan metode bubble sort.
PengacakanJumlah Total
Pertukaran Data Perbandingan Data
1155279
2127272
3137245
4142297
5151294
6138285
7178300
8165272
9156285
10175300
Rata-rata152283
Jumlah rata-rata pertukaran untuk 10 kali pengacakan adalah 152 kali, sedangkan rata-rata jumlah perbandingan adalah sebanyak 283 kali. Tetapi bila data pada awalnya terurut, maka untuk 25 jumlah data, jumlah pertukaran data sebanyak 0 kali dengan jumlah perbandingan sebanyak 24 kali.


contoh program
#include
#define MAX_LINE 1024

void discardnewline(char s[])
{
int i;
for(i = 0; s[i] != ”; i++)
{
if(s[i] == ‘\n’)
s[i] = ”;
}
}

int reverse(char s[])
{
char ch;
int i, j;

for(j = 0; s[j] != ”; j++)
{
}

–j;

for(i = 0; i 0)
{
discardnewline(line);
reverse(line);
printf(”%s\n”, line);
}
return 0;
}

@. Selection Sort

Pengertian tentang selection sort adalah Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama), dan yang telah diurutkan (meja kedua). Elemen pertama yang diambil dari bagian array yang belum diurutkan dan kemudian diletakkan pada posisinya sesuai dengan bagian lain dari array yang telah diurutkan. langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.


SOURCE CODE
void insertsort (int x[], int n)
{
int i, k, y
for (k=1, ky=x [k];
for (i=k-1;i>=0&&y
x[i+1]=y;
}
}

@. Insertion Sort


Pengertian Insertion Sort adalah Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama), dan yang telah diurutkan (meja kedua). Elemen pertama yang diambil dari bagian array yang belum diurutkan dan kemudian diletakkan pada posisinya sesuai dengan bagian lain dari array yang telah diurutkan. langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.
SOURCE CODE

void insertsort (int x[], int n)
{
int i, k, y
for (k=1, ky=x [k];
for (i=k-1;i>=0&&y
x[i+1]=y;
}
}

@. Merge Sort
Pengertian Merge Sort adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknya daftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.
Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item yang pertama pada setiap daftar. Algoritmanya sebagai berikut:
Selama p0..n masih menunjuk data yang di dalam sebagai pengganti pada akhirnya:
1.Melakukan sesuatu dengan data item yang menunjuk daftar mereka masing-masing.
2.Menemukan pointers points untuk item dengan kunci yang paling rendah; membantu salah satu pointer untuk item yang berikutnya dalam daftar.

Pada umumnya algoritma merge berjalan dalam waktu proposional untuk penjumlahan pada panjangnya daftar; Algoritma merge beroperasi pada bilangan besar dalam daftar yang akan segera mengalikan penjumlahan panjangnya daftar pada saat itu untuk keluaran gambar pointers points yang mana menunjuk pada item yang paling rendah, yang dapat terpengaruhi dengan suatu heap(tumpukan) yang didasarkan prioritas antrian dalam O(lg n) waktu, untuk O(m lg n) waktu (dimana n adalah bilangan pada daftar yang digabungkan, m adalah penjumlahan panjangnya daftar, dan lg adalah log basis 2). Ketika menggabungkan panjang m dua daftar, terdapat suatu perbandingan lompatan yang lebih rendah 2m-1 yang ada dalam kasus terburuk.
Keluaran data item Merge klasik (satu yang digunakan dalam merge sort) dengan kunci yang paling rendah pada langkah masing-masing, memberikan beberapa daftar yang diurutkan, hasil daftar yang diurutkan berisi semua unsur-unsur di dalam daftar input manapun, dan hal itu dilakukan agar waktunya proporsioal untuk input penjumlahan panjangnya daftar.

B.Contoh Algoritma Merge Sort
Ide algoritma ini hampir mirip dengan QuickSort, yaitu melakukan partisi. Kecuali bahwa algoritma ini melakukan partisi tanpa kriteria. Jadi, data set (X[l] ... X[r]) di partisi langsung ke dua sub data set dengan jumlah data yang sama (X[l] ... X[(l+r)/2], dan X[(l+r)/2+1] ... X[r]).
Lalu secara rekursif melakukan Merge Sort untuk masing-masing data set. Karena kedua data set itu bisa overlapping (tidak seperti pada Quick Sort) maka setelah kedua sub data set terurut masih memerlukan proses penggabungan (Merging). Merging ini memerlukan ruang tambahan yaitu suatu array yang sama panjangnya dengan panjang kedua sub set untuk menyimpan hasilnya.
Untuk Merge Sort dalam beberapa bahasa pemrograman yang ada pada saat ini untuk listing programnya hampir sama. Berikut ini merupakan salah satu contoh Listing Program yang biasa digunakan.

Contoh:
void MergeSort(int l,int r) {
if (l <>
MergeSort(l,(l+r)/2);
MergeSort((l+r)/2,r);
Merging();
}
}



@. Quick Sort
Pengerian Quick Sort adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknya daftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.
Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item yang pertama pada setiap daftar. Algoritmanya sebagai berikut:
Selama p0..n masih menunjuk data yang di dalam sebagai pengganti pada akhirnya:
1.Melakukan sesuatu dengan data item yang menunjuk daftar mereka masing-masing.
2.Menemukan pointers points untuk item dengan kunci yang paling rendah; membantu salah satu pointer untuk item yang berikutnya dalam daftar.

Pada umumnya algoritma merge berjalan dalam waktu proposional untuk penjumlahan pada panjangnya daftar; Algoritma merge beroperasi pada bilangan besar dalam daftar yang akan segera mengalikan penjumlahan panjangnya daftar pada saat itu untuk keluaran gambar pointers points yang mana menunjuk pada item yang paling rendah, yang dapat terpengaruhi dengan suatu heap(tumpukan) yang didasarkan prioritas antrian dalam O(lg n) waktu, untuk O(m lg n) waktu (dimana n adalah bilangan pada daftar yang digabungkan, m adalah penjumlahan panjangnya daftar, dan lg adalah log basis 2). Ketika menggabungkan panjang m dua daftar, terdapat suatu perbandingan lompatan yang lebih rendah 2m-1 yang ada dalam kasus terburuk.
Keluaran data item Merge klasik (satu yang digunakan dalam merge sort) dengan kunci yang paling rendah pada langkah masing-masing, memberikan beberapa daftar yang diurutkan, hasil daftar yang diurutkan berisi semua unsur-unsur di dalam daftar input manapun, dan hal itu dilakukan agar waktunya proporsioal untuk input penjumlahan panjangnya daftar.

B.Contoh Algoritma Merge Sort
Ide algoritma ini hampir mirip dengan QuickSort, yaitu melakukan partisi. Kecuali bahwa algoritma ini melakukan partisi tanpa kriteria. Jadi, data set (X[l] ... X[r]) di partisi langsung ke dua sub data set dengan jumlah data yang sama (X[l] ... X[(l+r)/2], dan X[(l+r)/2+1] ... X[r]).
Lalu secara rekursif melakukan Merge Sort untuk masing-masing data set. Karena kedua data set itu bisa overlapping (tidak seperti pada Quick Sort) maka setelah kedua sub data set terurut masih memerlukan proses penggabungan (Merging). Merging ini memerlukan ruang tambahan yaitu suatu array yang sama panjangnya dengan panjang kedua sub set untuk menyimpan hasilnya.
Untuk Merge Sort dalam beberapa bahasa pemrograman yang ada pada saat ini untuk listing programnya hampir sama. Berikut ini merupakan salah satu contoh Listing Program yang biasa digunakan.

Contoh:
void MergeSort(int l,int r) {
if (l <>
MergeSort(l,(l+r)/2);
MergeSort((l+r)/2,r);
Merging();
}
}

array

 array
Array merupakan koleksi data dimana setiap elemen memakai nama dan tipe yang sama serta setiap elemen diakses dengan membedakan indeks array-nya. Berikut adalah contoh variable bernama c yang mempunyai lokasi memori yang semuanya bertipe int.

C[0] -45
C[1] 6
C[2] 0
C[3] 72
C[4] 1543
C[5] 43
C[6] 4
Masing-masing nilai dalam setiap lokasi mempunyai identitas berupa nama c dan nomor indeks yang dituliskan di dalam tanda kurung ‘[..]’. sebagai contoh, 72 adalah nilai dari c[3].
Deklarasi Array
Variable array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat. Dengan demikian, deklarasi untuk variablearray c di atas adalah :
int c[7];
Perlu diperhatikan bahwa C++ secara otomatis menyediakan lokasi memori yang sesuai dengan yang dideklarasikan, dimana nomor indeks selalu dimulai dari 0. Nilai suatu variablearray dapat juga diinisialisasi secara langsung pada saat deklarasi, misalnya;
Int c[7] = {-45, 0, 6, 72, 1543, 43, 4}
Berarti setiap lokasi memori dari variable array c langsung diisi dengan nilai-nilai yang dituliskan didalam tanda kurung kurawal.
Banyaknya lokasi memori dapat secara otomatis disediakan sesuai degan banyaknya nilai yang akan dimasukkan, seperti contoh berikut yang tentunya membuat variable array dengan 10 lokasi memori:
Int x []={10, 15 12, 5, 13, 9, 6, 17, 25, 31};
Untuk memperjelas gambaran anda tentang array perhatikan contoh aplikasi variable array, yaitu program untuk menghitung jumlah setiap elemen dalam suatu array.
Sebagai gambaran dari program tersebut, dapat dibuat sebuah algoritma sebagai berikut:
1. Tentukan elemen array sebanyak yang diinginkan (dalam hal ini, elemen array tersebut berjumlah 12 buah)
2. Tentukan nilai awal indeks, batas akhir indeks dan kenaikannya (dalam hal ini, nilai awal indeks adalah 0, batas akhir indeks adalah jumlah elemen array diatas yaitu 12 dikurangi dengan 1, kenaikannya adalah 1)
3. Lakukan perulangan sesuai dengan langkah 2
4. Lakukan penjumlahan masing-masing elemen array sampai batas akhir indeks terpenuhi
5. Tampilkan penjumlahan semua elemen array
6. Selesai.
Sedangkan implementasi dalam program dapat dilihat berikut ini.
Contoh Program array
/*Program :array1.cpp*/
#include
#define SIZE 12
main()
{
int a[SIZE]={1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45};
int indeks, total =0;
for(indeks=0; indeks<=SIZE-1; indeks++)
total += a[indeks];
printf(“nTotal setiap elemen array adalah %d”,total);
return 0;
}
Bila program diatas dijalankan, akan muncul hasil :
Total setiap elemen array adalah 383
Adapun keterangan dari program diatas adalah sebagai berikut :
Hasil penjumlahan setiap elemen array diperoleh dari jumlah data atau elemen arraysebanyak 12 buah yang sudah didefinisikan pada awal program yaitu #define SIZE 12. Kemudian setiap elemen array dari a[0] yang berisi data, a[1] yang berisi data 3 di jumlahkan sampai dengan a[11] yang berisi data 45. Proses penjumlahan dilakukan pada loop dimulai dari 0 sampai data yang terakhir atau elemen terakhir.
Array Dimensi Satu
Bentuknya :
Tipe nama_var[ukuran];
Dengan :
Tipe : menyatakan jenis elemen array (int, char, unsigned, dan lain-lain)
Ukuran : menyatakan jumlah maksimal elemen array
Contoh :
Float nilai_ujian[5];
Pada turbo C++ array disimpan dalam memori secara berurutan. Elemen pertama berindeks nol digambarkan sebagai berikut :
Nilai_ujian[0]
Nilai_ujian[1]
Nilai_ujian[2]
Nilai_ujian[3]
Nilai_ujian[4]
Masing-masing berbentuk float dan berjumlah 5 elemen.
Selain itu, deklarasi array juga dapat berupa :
Static int bulan[12]={1,2,3,4,5,6,7,8,9,10,11,12}
Sesuai dengan deklarasi array diatas, maka isi variable array telah ditentukan yaitu :
Bulan[0] bernilai 1
Bulan[1] bernilai 2
Bulan[2] bernilai 3
Bulan[3] bernilai 4
Bulan[4] bernilai 5
Bulan[5] bernilai 6
Bulan[6] bernilai 7
Bulan[7] bernilai 8
Bulan[8] bernilai 9
Bulan[9] bernilai 10
Bulan[10] bernilai 11
Bulan[11] bernilai 12
Untuk memperjelas tentang array dimensi satu, perhatikan maslah berikut ini :
Misalkan Anda diminta membuat algoritma dan program untuk menampilkan bilangan dari 1 sampai bilangan 10, dengan pangkatnya masing-masing. Adapun batas nilai maksimal yang disimpan adalah 100.
Sesuai yang telah Anda pelajari , bahwa bilangan 1 pangkatnya adalah 1. Hasil ini diperoleh dari 1*1, kemudian bilangan 2 pangkatnya adalah 4, hasil ini diperoleh dari 2*2 sampaibilangan 10 yang pangkatnya adalah 100, hasil ini diperoleh dari 10*10.
Algoritma dari permasalahan diatas adalah berikut ini :
1. Tentukan elemen array untuk menampung nilai perkalian
2. Tentukan nilai awal indeks, batas akhir indeks dan kenaikannya (dalam hal ini , nilai awal indeks adalah 0, batas akhir indeks adalah 10, dan kenaikannya adalah 1)
3. Lakukan perulangan sesuai langkah 2
4. Nilai awal indeks ditambah dengan 1
5. Lakukan perkalian masing-masing elemen array sampai batas akhir indeks terpenuhi.
6. Tampilkan perkalian semua elemen array
7. Selesai .
Contoh program array dimensi satu
/*Program :array2.cpp*/
#include
int main()
{
int square[100];
int i; /*loop index*/;
int k; /*the integer*/
/*calculate the squares */
for (i=0; i<10; i++)
{
k= i+1;
square[i]=k*k;
printf(“nPangkat dari %d adalah %d “, k, square[i]);
}
return 0;
}
Bila program dijalankan akan muncul hasil :
Pangkat dari 1 adalah 1
Pangkat dari 2 adalah 4
Pangkat dari 3 adalah 9
Pangkat dari 4 adalah 16
Pangkat dari 5 adalah 25
Pangkat dari 6 adalah 36
Pangkat dari 7 adalah 49
Pangkat dari 8 adalah 64
Pangkat dari 9 adalah 81
Pangkat dari 10 adalah 100
Penjelasan :
Dari program diatas, Anda dapat melihat ada 10 buah elemen yang masing-masing nilainya akan dipangkatkan, mulai dari 1 sampai 10. Dimana dalam memori sudah dipesan tempat sebanyak 100.
Sedangkan apabila array akan dikirim ke sebuah fungsi caranya adalah hanya dengan mencantumkan nama array tanpa diikuti dengan tanda apapun, seperti contoh berikut :
int c[5] = {-45, 0, 6, 72, 1543};


JUMLAH (c, 5)
—-
Dalam contoh diatas, yang memanggil fungsi JUMLAH dengan mengirimkan argument berupa variable array c dan sebuah konstanta 5. Perhatikan bahwa variable array ditulis hanya c tanpa notasi tambahan apapun. Deklarasi variable array yang menjadi parameter dari suatu fungsi dituliskan dengan nama variable array yang diikuti dengan tanda kurung [], tanpa menuliskan banyaknya lokasi memori yang diinginkan.
ARRAY DIMENSI DUA
Struktur array yang dibahas diatas mempunyai satu dimensi, sehingga variabelnya disebut variable array berdimensi satu. Pada bagian ini ditunjukkan array berdimensi lebih dari satu, yang sering disebut dengan array berdimensi dua.
Sebagai contoh, sebuah matrik B berukuran 2 X 3 dapat dideklarasikan dalam C seperti berikut : int B[2][3] = {[2, 4, 1}, {5, 3, 7}}; yang menempati lokasi memori dengan susunan sebagai berikut :
0 1 2
0 2 4 1
1 5 3 7
Dan definisi variable untuk setiap elemen tersebut adalah :
0 1 2
0 b[0][0] b[0][1] b[0][2]
1 b[1][0] b[1][1] b[1][2]
Sebagai implementasi dari keterangan diatas, perhatikan program berikut ini :
Contoh Program array dimensi dua
/*Program :array2.cpp*/
#include
void printArray(int[][3]);
main()
{ int matrik1[2][3] = {{1, 2, 3},{4, 5, 6}};
int matrik2[2][3] = {1, 2, 3, 4, 5};
int matrik3[2][3] = {{1, 2},{4}};
printArray (matrik1);
printArray (matrik2);
printArray (matrik3);
return 0; }
void printArray (int a[][3])
{ int i,j;
for (i=0; i<=1; i++)
{ for (j=0; j<=2; j++)
printf(“%d”,a[i][j]);;
printf(“n”);
}
}
Bila program diatas dijalankan, akan mucul hasil :
123
456
123
450
120
400
Penjelasan :
Dari program diatas untuk matrik 1, penulisannya adalah 123 456, sedangkan pada matrik 2 penulisannya adalah 123 450. 0 disini mempunyai arti tempat yang disediakan untuk data kolom ke 3 dan baris ke 2 tidak diisi. Sedangkan matrik 3 penulisannya adalah 120 400. Dari matrik 3 disini kita bisa melihat bahwa pada baris pertama kolom ketiga data tidak diisi dan dianggap 0 dan pada baris kedua kolom kedua dan ketiga juga tidak diisi juga diisi 0.
Dalam program tersebut, juga digunakan fungsi untuk menampung hasil penjumlahan matrik.
Perhatikan contoh lain :
Int datasiswa[4][3];
Deklarasi diatas digunakan untuk mendeklarasikan suatu data siswa yang berbentuk demikian :
No Nama Kelas Jumlah Siswa
Tahun 1989 Tahun 1990 Tahun 1991
1 Kelas 1 50 55 49
2 Kelas 2 60 60 55
3 Kelas 3 56 56 56
4 Kelas 4 49 50 54
Dari deklarasi diatas maka angka empat [4] menyatakan jumlah kelas, dan angka indek [3] menyatakan tahun.
Data siswa [0][2] adalah Kelas 1 dan jumlah siswa tahun 1990 yaitu 55. Atau jumlah siswa kelas 1 pada tahun 1990 adalah 55.
Bentuk data siswa dapat juga digambarkan sebagai berikut :
1 2 3
1 50 55 49
2 60 60 55
3 56 56 56
4 49 50 54
Array ini dapat pula diberi nilai tetap dengan static seperti pada array dimensi satu. Deklarasinya adalah sebagai berikut :
Static int jumlah [4][3]=
{
50, 55, 49,
60, 60, 55,
56, 56, 56,
49, 50, 54
};



Array adalah variabel yang dapat menyimpan lebih dari satu nilai sejenis. Terdapat dua bagian penting yaitu elemen array yang merupakan nilai dan endeks array yang merupakan nilai urut untuk mengakses nilai pada array.
Berikut ini contoh array A dengan 10 buah elemen tiap elemen memiliki nilai antara 10 hingga 100.
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
1 2 3 4 5 6 7 8 9 10
10 20 30 40 50 60 70 80 90 100
Deklarasi Array.
Array dideklarasikan pada bagian deklarasi. Deklarasi umum dari array adalah
NamaArray : array[IndeksAwal..IndeksAkhir] of tipe_data;
Contoh: Jika akan mendeklarasikan viriabel A sebagai Array dengan 10 elemen bertipe integer:
Var
A: array [1..10] of Integer;
Contoh lain:
A1: array[0..9] of Integer;
A1: array[10..20] of Integer;
A1: array[‘a’..’j’] of Integer;
Mengakses elemen Array
Untuk memberikan nilai pada variabel array dapat dengan menggunakan parameter berikut :
NamaArray [indeks]:=nilai;
Contoh
Var
A: array[1..10] of integer;
Begin
A[1]:=1; {Mengisikan elemen 1 dengan nilai 1}
A[9]:=200; {Mengisi elemen 9 dengan nilai 200};
End.
Array sebagai konstanta
Nilai pada array dapat bernilai konstan. Dapat kita lakukan dengan mendeklarasikannya pada bagian constanta.
Bentuk umum pendeklrasiannya adalah:
Const
NamaArray : array[IndeksAwal..IndeksAkhir] of Tipe_Data = (nilai1, nilai2,………);
Banyaknya nilai konstanta harus sama dengan jumlah elemennya.
Contoh penggunaanya
Program ArrayKonstanm;
Uses Wincrt;
Const
Hari : array[1..2] oof string = (’senin’,’selasa’,'rabu’,'kamis’,'jumat’,’sabtu’,'minggu’);
Var
noHari:integer;
begin
clrscr;
write(‘Masukan nomor harinya : ‘);readln(noHAri);
write(‘Hari ke’,noHari,’adalah’,Har[noHari]);
end.
Jika dieksekusi maka hasilnya adalah:
Masukan nomor harinya : 2
Hari ke 3 adalah rabu
Array saebagai parameter
Array pada waktu tertentu dapat digunakan sebagai parameter dari suatu proesdur atyau fungsi. Contoh
Type
Bilangan = array [1..100[ of integer;
Procedure InputArray(A:bilangan; N:integer);
var
i:integer;
begin
for i:=1 to N do
write('Masukan elemen array ke ',i); readln(A[i]);
end.
Contoh diatas adalah prenggunaan array sebagai parameter untuk memberikan nilai pada suatu array tertentu.
Array berisi record
Caranya adalah mendefinisikan record terlebih dahulu yang kemudian akan digunakan sebagaitipe data pada saat pendeklarasiaan array. Contoh:
Type
Tsiswa = record
NIM:=string[9[;
Nama:string[25];
End;
TkumpulanSiswa = array [1..100] of Tsiswa;
Var
A: TkumpulanSiswa;
Variabel A diatas akan menampung 100 buah record yang bertipe Tsiswa. Sementara untukrecord berisi array dengan contoh perhitungan nilai siswa berikut : Nilai = (20% * kuis) + (30% * UTS) + (50% * UAS). Maka kita dapat mendefinisikan mahasiswa sebagai tipe record yang memiliki 3 nilai dengan menggunakan array. Yaitu:
Type
Tsiswa = record
NIM:=string[9[;
Nama:string[25];
Nilai = array [1..3] of real;
Kode diatas menunjukan bahwa setiap mahasiswa memiliki 3 nilai.
Metode pencarian pada Array
Ada beberapa macam teknik dalam mendapatkan nilai dari suatu elemen pada array salh satunya dengan metode pencarian beruntun.Contoh:
Program CaraiBeruntun;
Uses Wincrt;
Const
N : array[1..5] of integer= (10,20,30,40,50);
Var
a,b,index : integer;
begin
clrscr;
write(‘Masukan nilai yang akan dicari : ’);readln(a);
index:=0;
for b:=1 to 5 do begin
if N[b] = a then begin
index:=b;
break;
end;
end;
writeln(a,’ adalah nilai yang ditemukan pada index ke ’,index);
end.
Array 2 dimensi
Array 2 dimensi adalah array yang memiliki 2 buah elemen bertipe array yang berbentuk kolom dan baris. Pendeklarasiannya adlah sebagai berikut:
NamaArray : array[1..BanyakBaris, 1..BanyakKolom] of tipe_data;
Contoh
Array2D : array[1..3, 1..4] of integer;
Sedangkan untuk mengaskes maupun memberikan nilai dengan parameter:
Array2D [2,3]:=200; {Mengisikan nilai 200 pada baris 2 kolom 3}

cara membuat program dengan menggunakan array of string. Dengan asumsi program user dapat melakukan input data ke dalam array, kemudian seluruh array akan ditampilkan.
Kira-kira begini penyelesaiannya :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 uses wincrt;

var x : array[1..3] of string;
a : integer;
begin
for a := 1 to 3 do begin
write('input ', a, ' : ');
readln(x[a]);
end;

writeln;
write('output : ');
for a := 1 to 3 do
write(x[a],' ');
end.


Pada source array berikut ini, dibuat suatu program untuk menyimpan array sebanyak 100 (max), pada awalnya program akan meminta jumlah data yang akan di masukkan. Dalam memberikan nilai pada array, akan dilakukan pengacak-an serta pengecekan nilai yang dihasilkan. Nilai yang dihasilkan kemudian ditampilkan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 uses wincrt;

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.

struktur data

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.
*Tahapan Pembuatan Struktur Data :
1. Tahap
Spesifikasi atau pendeskripsian struktur data menyatakan apa yang dapat dilakukan struktur data, bukan cara penempatannya. Pendeskripsian ini melibatkan level logic sehingga dapat digunakan konvensi matematika untuk menyatakan sifat-sifat struktur data yang dikehendaki.
2 . Tahap Kedua
Implementasi menyatakan cara penerapan struktur data dengan struktur data yang telah ada. Implementasi struktur dataadalah proses pendefinisian tipe data abstark sehingga semua operasi dapat dieksekusi computer. Implementasi berisi dekklarasi struktur penyimpanan item data serta algoritma untuk implementasi operasi, sehingga menjamin terpenuhinya karakteristik struktur data, relasi item data tau invariant pada struktur data tersebut.
3. Tahap Ketiga
Pemrograman struktur data adalah penterjemahan menjadi pernyataan dalam bahasa pemrograman tertentu.struktur data dibangun menggunakan fasilitas pembentukkan atau pembuatan struktur data yang disediakan bahasa seperti array, record dan lain-lain.


*Jenis Struktur Data
1. Struktur Data Sederhana
a. Array
(Larik)

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 vektor
b. Record
(Catatan)

ADT adalah definisi tipe dan sekumpulan primitif (operasi dasar) terhadap tipe tersebut. Tipe diterjemahkan menjadi tipe terdefinisi dalam bahasa pemrograman yang bersangkutan.
2. Struktur Data Majemuk
a. Linier
·         Stack(Tumpukan)
Stack (tumpukan) adalah list linier yang dikenali elemen puncaknya (top), aturan penyisipan dan penghapusan elemennya tertentu (penyisipan selalu dilakukan “di atas” (top), penghapusan selalu dilakukan pada top). Karena aturan penyisipan dan penghapusan semacam itu, top adalah satu-satunya alamat tempat terjadi operasi. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus. Dikatakan bahwa elemen stack akan tersusun secara LIFO (Last In First Out).
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
Pemanfaatan Stack :
·            Perhitungan ekspresi aritmatika (posfix)
·            algoritma backtraking (runut balik)
·            algoritma rekursif
Operasi Stack yang biasanya :
1.      Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen ke stack
2.      Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemen stack
3.      IsEmpty ()
4.      IsFull ()
5.      dan beberapas selektor yang lain

·         Queue(Antrian)
Queue (antrian) adalah list linier yang dikenali elemen pertama (head) dan elemen terakhirnya (tail);Queue juga berarti salah satu bentuk struktur data yang juga merepresentasikan linked list. Dimana yang berbeda dalam queue tersebut adalah cara menambah data dan mengambil data. Sesuai dengan namanya yaitu queue atau antrian, data yang dimasukan dari belakang (insertAtBack), sehingga data yang pertama kali dimasukan berada pada node pertama, dan data yang dimasukan terakhir juga akan berada pada node yang terakhir. Dimana untuk pengambilan proses pengambilan datanya, yang diambil adalah data pertama, dan setelah data pertama diambil maka node yang berisi data pertama tersebut akan di-null kan, sehingga posisi node pertama akan berpindah pada node setelah node pertama tersebut. Proses ini biasanya disebut dengan FIFO, atau First In First Out. Method yang digunakan untuk memasukan data kedalam queue tersebut dinamakan enqueue dan yang untuk mengambil data dinamakan dequeu. Untuk representasinya dalan Java dan C# bisa didownload melalui link dibawah ini.Dimana untuk pengambilan proses pengambilan datanya, yang diambil adalah data pertama, dan setelah data pertama diambil maka node yang berisi data pertama tersebut akan di-null kan, sehingga posisi node pertama akan berpindah pada node setelah node pertama tersebut. Proses ini biasanya disebut dengan FIFO, atau First In First Out. Implementasi Queue di Java [NetBeansProject]Implementasi Queue di Java [SourceCode] Implementasi Queue di C# [VisualStudioProject]

·         List dan Multi-List (Daftar)
List linier adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari 2 bagian. sebuah list linier dikenali dengan (1) elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut (first); (2) Alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen, yang dapat diakses melalui field next; (3) Setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu. Untuk mengacu sebuah elemen, alamat harus terdefinisi. Dengan alamat tersebut informasi yang tersimpan pada elemen list dapat diakses; (4) Elemen terakhirnya.

b. Non-Linier
·         Binary Tree (Pohon Biner)
Sebuah pohon biner (binary tree) adalah himpunan terbatas yang mungkin kosong atau terdiri dari sebuah simpul yang disebut sebagai akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner yang disebut sebagai sub pohon kiri (left) dan sub pohon kanan (right) dari pohon biner tersebut. Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai dalam berbagai terapan. Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap simpul paling banyak hanya memiliki dua buah anak, dan mungkin tidak punya anak. Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum.
·         Graph (Graf)
Graph merupakan struktur data yang paling umum. Jika struktur linier memungkinkan pendefinisian keterhubungan sekuensial antara entitas data, struktur data tree memungkinkan pendefinisian keterhubungan hirarkis, maka struktur graph memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data. Banyak entitas-entitas data dalam masalah-masalah nyata secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas demikian. Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa. Dalam masalah ini kota X bisa berhubungan langsung dengan hanya satu atau lima kota lainnya. Untuk memeriksa keterhubungan dan jarak tidak langsung antara dua kota dapat diperoleh berdasarkan data keterhubungan-keterhubungan langsung dari kota-kota lainnya yang memperantarainya. Representasi data dengan struktur data linier ataupun hirarkis pada masalah ini masih bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung (straightforward) dilakukan pada strukturnya sendiri


*Istilah penting dalam struktur data :
1.      Data
Data adalah deskripsi dari sesuatu dan kejadian yang kita hadapi(data is the description of things and events that we face). Data adalah kenyataan yang menggambarkan suatu kejadian-kejadian dan kesatuan nyata. Kejadian (event) adalah sesuatu yang terjadi pada saat tertentu. Sebagai contoh, dalam dunia bisnis kejadian-kejadian nyata yang sering terjadi adalah perubahan dari suatu nilai yang disebut dengan transaksi. Misalnya penjualan adalah transaksi perubahan nilai barang menjadi nilai uang atau nilai piutang dagang. Kesatuan nyata(fact and entity) adalah berupa suatu obyek nyata seperti tempat, benda dan orang yang betul-betul ada dan terjadi.Sumber dari informasi adalah data. Data merupakan bentuk jamak dari bentuk tunggal data-item. Data merupakan bentuk yang belum dapat memberikan manfaat yang besar bagi penerimanya, sehingga perlu suatu model yang nantinya akan dikelompokkan dan diproses untuk menghasilkan informasi
2.        Database
Database bisa dikatakan sebagai suatu kumpulan dari data yang tersimpan dan diatur atau diorganisasikan sehingga data tersebut bisa diambil atau dicari dengan mudah dan efisien. Sebagai contoh sederhana dari database adalah buku telepon yang mungkin sering Anda lihat.Bagaimana halnya dengan database dengan sistem database dengan menggunakan komputer? Hal tersebut sama saja seperti database yang sifatnya manual (seperti contoh buku telepon di atas) hanya saja dengan adanya komputer maka informasi yang ada di dalam database akan sangat mudah untuk di-update dan sangat cepat untuk dicari. Software atau aplikasi yang bertugas untuk mengatur, menyimpan, memodifikasi data disebut dengan software database engine dan lebih resminya disebut dengan DBMS (Database Management System). Ada banyak sekali aplikasi DBMS ini mulai yang berjalan di komputer personal (PC) sampai ke komputer skala mainframe. Contoh-contoh dari aplikasi database engine misalnya seperti:
·         SQL Server, dibuat oleh Microsoft.
·         MS Access, dibuat oleh Microsoft.
·         Oracle Database, dibuat oleh Oracle.
·         MySQL, dibuat oleh MySQL AB.
·         Firebird, dibuat oleh komunitas open source berdasarkan dari kode Interbase.
·         PostgreSQL, dibuat oleh komunitas open source.
·         DB2, dibuat oleh IBM.
3.        Data Set
Istilah untuk sekelompok record data yang sama dan saling terhubung dalam memori computer.
4.        Data bit
Sekelompok bit yang digunakan untuk menggambarkan satu karakter:character data untuk transmisi:trans...
5.        Enkapsulasi (Pembungkusan)
·         Variabel dan method yang dipunyai suatu obyek, bisa ditentukan hak aksesnya.
ü  Definisi enkapsulasi: Pembungkusan variabel dan method dalam sebuah obyek yang terlindungi.
ü  Definisi enkapsulasi: menyembunyikan cara kerja dan sistem.
ü  Dalam OOP, konsep enkapsulasi sebenarnya merupakan perluasan dari struktur dalam bahasa C. 
Artikel ini saya buat sebagai bahan pembelajaran untuk meningkatkan pengetahuan pada Struktur Data dalam Pemrograman.
Tipe Data adalah jenis data yang mampu ditangani oleh suatu bahasa pemrograman pada komputer.
Tiap-tiap bahasa pemrograman memiliki Tipe Data yang memungkinkan:
1. Deklarasi terhadap variabel tipe data tersebut
2. Menyediakan kumpulan operasi yang mungkin terhadap variabel bertipe data tersebut
3. Jenis obyek data yang mungkin
4. Contoh tipe data di C? Java? Pascal? .NET?
Obyek Data adalah kumpulan elemen yang mungkin untuk suatu tipe data tertentu. 
Mis: integer mengacu pada obyek data -32768 s/d 32767, byte 0 s/d 255, string adalah kumpulan karakter maks 255 huruf
Struktur Data adalah cara penyimpanan dan pengorganisasian data-data pada memori komputer maupun file secara efektif sehingga dapat digunakan secara efisien, termasuk operasi-operasi di dalamnya.
Di dalam Struktur Data kita berhubungan dengan 2 aktivitas:
1. Mendeskripsikan kumpulan obyek data yang sah sesuai dengan tipe data yang ada
2. Menunjukkan mekanisme kerja operasi-operasinya
Contoh: integer (-32768 s/d 32767) dan jenis operasi yang diperbolehkan adalah +, -, *, /, mod, ceil, floor, <, >, != dsb.
Jadi Struktur Data = obyek data  + [operasi manipulasi data]

Algoritma merupakan alur penyelesaian masalah atau cara penyelesaian masalah dalam hal ini tentang pemrograman. Hubungan Struktur Data dengan Algoritma yaitu dengan pemilihan struktur data yang baik, maka problem yang kompleks dapat diselesaikan sehingga algoritma dapat digunakan secara efisien, operasi-operasi penting dapat dieksekusi dengan sumber daya yang lebih kecil, memori lebih kecil, dan waktu eksekusi yang lebih cepat. Tidak semua struktur data baik dan sesuai.  Contoh untuk problem data bank: pengupdate-an harus cepat, sedangkan penambahan/penghapusan data boleh lebih lambat.

Ciri Algoritma yang baik menurut Donald E.Knuth:
1. Input: ada minimal 0 input atau lebih
2. Ouput: ada minimal 1 output atau lebih
3. Definite: ada kejelasan apa yang dilakukan
4. Efective: langkah yang dikerjakan harus efektif
5. Terminate: langkah harus dapat berhenti (stop) secara jelas 

Bahasa pemrograman bisa memiliki Tipe Data:
1. Built-in : sudah tersedia oleh bahasa pemrograman tersebut
- Tidak berorientasi pada persoalan yang dihadapi.
2. UDT : User Defined Type, dibuat oleh pemrogram.
- Mendekati penyelesaian persoalan yang dihadapi
  Contoh: record pada Pascal, struct pada C, class pada Java
3. ADT : Abstract Data Type
- memperluas konsep UDT dengan menambahkan pengkapsulan atau enkapsulasi, berisi sifat-sifat dan operasi-operasi yang bisa dilakukan terhadap kelas tersebut.
  Contoh: class pada Java
- Bahasa C memiliki tipe data numerik dan karakter (seperti int, float, char dan lain-lain).  Disamping itu juga memiliki tipe data enumerasi dan structure.  Bagaimana jika kita ingin membuat tipe data baru?
- Untuk pembuatan tipe data baru digunakan keyword typedef
Bentuk umum:
                typedef <tipe_data_lama> <tipe_data_baru>

Struct adalah tipe data bentukan yang berisi kumpulan variabel-variabel yang bernaung dalam satu nama yang sama dan memiliki kaitan satu sama lain. Berbeda dengan array hanya berupa kumpulan variabel yang bertipe data sama, struct bisa memiliki variabel-variabel yang bertipe data sama atau berbeda, bahkan bisa menyimpan variabel yang bertipe data array atau struct itu sendiri. Variabel-variabel yang menjadi anggota struct disebut dengan elemen struct.
Bentuk umum:
typedef struct <nama_struct> {
                                tipe_data <nama_var>;
                                tipe_data <nama_var>;
                                ....
}

Cara penggunaan struct dan pengaksesan elemen-elemennya :
1. Penggunaan/pemakaian tipe data struct dilakukan dengan membuat suatu variabel yang bertipe data struct tersebut
2. Pengaksesan elemen struct dilakukan secara individual dengan menyebutkan nama variabel struct diikuti dengan operator titik (.)