Inti Materi Algoritma dan Struktur Data Algoritma : Kumpulan/urutan langkah-langkah untuk menyelesaikan masalah (computerize) dengan syarat : 1. Setiap langkah harus definite / pasti 2. minimal memiliki satu output 3. harus bisa berhenti / ada stopping criteria Struktur data : Susunan data di RAM yang meliputi Nilai Data yang berhubungan dengan type data Data relationship yaitu hubungan antara data Operasi pada data. Struktur data sangat berperan penting dalam pemrograman. Karena tidak ada program yang bekerja tanpa membutuhkan data. Program yang paling sederhana pun membutuhkan data. Pengaturan data dalam memori diatur oleh struktur data. Bisa dibayangkan bila tanpa struktur data, maka suatu data / variabel bisa saling overleaping dengan data / variabel lain sehingga output dari program tidak benar. Secara grafik bisa digambarkan sebagai berikut : Struktur Data Program Bahasa Pemrograman Algoritma Algoritma memberikan langkah-langkah yang dilakukan untuk menyelesaikan suatu masalah, struktur data mengatur data-data yang dibutuhkan dalam memori, bahasa pemrograman menterjemahkan algoritma yang sebelumnya telah disusun dalam bahasa tersebut. Hasilnya adalah sebuah program. Struktur data statis dan dinamis memiliki kelebihan dan kekurangan masing-masing. Struktur data statis membutuhkan alokasi memori yang tetap sehingga memori harus dipesan terlebih dahulu sebelum digunakan. Akibatnya akan terjadi pemborosan memori jika ternyata memori yang dipesan tidak digunakan seluruhnya. Kelebihan struktur data statis adalah letak datanya secara berurutan dalam memori sehingga mudah untuk mengakses data tertentu yang dibutuhkan. Struktur data dinamis membutuhkan alokasi memori sesuai banyaknya data yang didefinisikan. Tentunya akan menghemat memori. Akan tetapi data tersimpan secara acak dalam memori, sehingga untuk mengakses data tertenu dalam sebuah struktur data dinamis memerlukan waktu yang agak lama karena harus dicari mulai dari data pertama dalam struktur data tersebut. Struktur data statis baik digunakan untuk data yang ukurannya tidak besar. Struktur data dinamis baik digunakan untuk data yang ukurannya sangat besar. Linked list adalah suatu cara untuk menyimpan data dengan struktur sehingga dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data yang diperlukan. Program akan berisi suatu struct atau definisi kelas yang berisi variabel yang memegang informasi yang ada didalamnya, dan mempunyai suatu pointer yang menunjuk ke suatu struct sesuai dengan tipe datanya. Struktur dinamis ini mempunyai beberapa keuntungan dibanding struktur array yang bersifat statis. Struktur ini lebih dinamis, karena banyaknya elemen dengan mudah ditambah atau dikurangi, berbeda dengan array yang ukurannya bersifat tetap. Manipulasi setiap elemen seperti menyisipkan, menghapus, maupun menambah dapat dilakukan dengan lebih mudah. Jenis-jenis Struktur data adalah struktur data sederhana : ● Linked List ● Stack ● Queue ● Tree Contoh program untuk mengubah data tertentu : misalkan data dengan kode barang 'kd' type llist = ^node; node = record kode_barang : string[10]; harga : real; next : llist; end; var l : llist; idenya adalah : telusuri setiap node mulai dari depan hingga node terakhir. Jika ditemukan node dengan kode_barang = 'kd' maka ganti harga pada node tersebut dengan harga = harga + 1000. disini dibutuhkan variabel lain untuk mempertahankan nilai p yaitu variabel r. langkah awal bernilai r = p. kemudian telusuri mulai dari r pertama sampai nilai r yang terakhir jadi kondisi yang digunakan untuk perulangan adalah r <> nil karena jika yang digunakan adalah r^.next <> nil maka nilai terakhir tidak akan diperiksa. procedure ubahdata(var p , r : llist); begin r := p; while r <> nil do begin if r^.kode_barang = 'kd' then r^.harga = r^.harga + 1000; r := r^.next; end; end; contoh prosedur untuk mencetak linked list dari belakang ke depan; idenya adalah : kita mencari node terakhir kemudian mencetaknya setelah itu node tersebut di dispose dan di nil kan setelah itu ulangi penelusuran lagi dari depan sampai node terakhir, cetak node tersebut kemudian di dispose dan di nil kan demikian seterusnya. procedure cetakterbalik(p : llist); var k, r : llist; begin k := p; r := p; while k^.next<> nil do begin r := k; while r^.next^.next <> nil do r := r^.next; writeln(r^.next^.data); dispose(r^.next); r^.next := nil; end; writeln(k^.data); end; atau pindahkan isi stack ke variabel lain kemudian dicetak. Secara otomatis stack pada variable yang baru tersebut telah tersusun terbalik. Procedure cetak_data(l:link); var r, p : link; begin while l <> nil do begin r := l; if p = nil then begin p^.data = r^.data; p^.next := nil else begin r^.next := p; p := r; end; r := l^.next; dispose(l); l := r; end; while p^.next <> nil then begin writeln(p^.data); p := p^.next; end; end; Preorder adalah proses yang terdiri dari urutan prosedur baca sebagai berikut : procedure baca(x); begin cetak; baca(kiri); baca(kanan); end; InOrder adalah proses yang terdiri dari urutan prosedur baca sebagai berikut : procedure baca(x); begin baca(kiri); cetak; baca(kanan); end; PostOrder adalah proses yang terdiri dari urutan prosedur baca sebagai berikut : procedure baca(x); begin baca(kiri); baca(kanan); cetak; end; jika diberikan sebuah data dengan urutan : Pre-Order 30 10 5 17 2 3 20 13 15 7 12 In-Order 5 10 3 2 17 13 20 30 7 12 15 Berdasarkan pre-order maka node root adalah 30. 30 10 5 15 17 20 2 3 13 7 12 Hasil kunjungan postorder adalah : 5, 3, 2, 13, 20, 17, 10, 12, 7, 15, 30.