STRUKTUR DATA Pengantar Endang Purnama Giri, S.Kom., M.Kom. (EPG) Annisa, S.Kom., M.Kom. (ANN) Hendra Rahmawan, S.Kom., MT (HRW) Departemen Ilmu Komputer Institut Pertanian Bogor 2009-2010
Who am I ? Staf Dept Ilkom, Ibu rumah tangga, 1 suami, 2 anak, umur 4 tahun dan 4 bulan Address: Bukit cimanggu city blok X2 no.6 Telpon: 08881025777 Moto: Selalu menjadi orang yang bermanfaat dan membawa kebahagiaan bagi orang lain
Kontrak Perkuliahan Klik Here
Peraturan Kuliah Kehadiran Paling lambat 15 menit setelah dosen masuk kelas/lab Berpakaian Rapih Handphone silahkan dinonaktifkan/di-silent
Kejujuran Akademis Kecurangan Setiap kecurangan Akan diberikan imbalan nilai 0 pada mata kuliah ini Menyontek ataupun bekerja sama pada saat ujian Menyalin tugas hasil pekerjaan yang lain Titip tanda tangan kehadiran Sanksi akan diberikan untuk si pelaku maupun yang memberikan kesempatan
Motivation: Which Filing System? OR This one? This one? WHY?
Motivation: cluster or queue? This one? This one? WHY?
1 6 9 12 OR 12 9 6 1 WHY? Motivation: logistics case This one?
Mengapa Struktur Data Penting? #include<stdio.h> int nilai1, nilai2, nilai3,…,nilai100; float rataan; void main() { scanf(“%d”,&nilai1); scanf(“%d”,&nilai2); scanf(“%d”,&nilai3); : scanf(“%d”,&nilai100); } #include <stdio.h> main() { int n, i, x[100]; scanf("%d", &n); for (i=0 ; i<n ; i++) scanf("%d", &x[i]); .... return 0; }
Mengapa Struktur Data Penting? Mengapa data disimpan? Supaya bisa diakses diproses untuk masa yang akan datang Mengapa dalam penyimpanan membutuhkan struktur data? Supaya lebih mudah/efisien dalam pengaksesan/pemrosesas data tersebut Mengapa belajar teknik pembentukan struktur data, toh ada bahasa pemrograman yang sudah menyediakan struktur data tersebut? Ada tapi tidak semua
Mengapa Kuliah ini Penting? Untuk dapat memilih struktur data yang tepat, harus mengetahui kelebihan dan kekurangan dari masing-masing struktur data. Untuk dapat memahami struktur data, caranya adalah dengan belajar membuatnya dan menerapkannya dalam berbagai kasus
STRUKTUR DATA Struktur adalah cara sesuatu disusun;susunan, bangunan;pengaturan susunan dengan pola tertentu……(KBBI) Struktur data adalah suatu cara menyusun atau memodelkan data sehingga memudahkan pemrogram dalam melakukan pengolahan sesuai dengan kebutuhan. Struktur Data dalam bahasa pemrograman diimplementasikan dalam tipe data
Tipe Data Dasar Tipe Data Dasar Pointer Skalar Integer, Riil, char, Boolean Terstruktur Set Array Record File Tipe data dasar adalah tipe data yang telah tersedia secara default dalam suatu bahasa pemrograman (mis: pascal)
Abstract Data Type (ADT) Tipe data abstrak : Tipe data yang tidak tersedia secara default dan didefinisikan sendiri oleh pemrogram. Linked List, Queue, Stack, Tree, Graph.
Tipe data dasar pada C Untuk C Int Float Char String
Representasi struktur Data Representasi struktur data yang sederhana dapat dibentuk dari: Record Array Pointer linked list
Record / struct Tipe data bentukan, tipe data baru (kreasi) yang tersusun atas beberapa elemen yang memiliki tipe data dasar ataupun tipe data bentukan yang telah di buat sebelumnya. Pada C dikenal dengan struct
Record/struct Record / struct: tipe data terstruktur elemen-elemen data didalamnya memiliki tipe data yang berbeda Masing-masing record merepresentasikan suatu obyek int nilai; float rataan; Struct nilai_akhir { int nilai; float rataan } ; nilai_akhir x;
Array Suatu struktur data yang memiliki tipe data sejenis namun dapat menampung lebih dari satu buah nilai Penyimpanan pada memory secara terurut Pengaksesannya dengan indeks (ilustrasi di papan tulis) Sifatnya statis (dari aspek kapasitas) Pengaksesan relatif cepat
Array 8 9 5 2 3 7 Angka[1] Angka[2] Angka[3] Angka[4] Angka[5] Angka[6] baca 1000 angka dan lakukan operasi yang sama terhadap masing-masing angka (?) Array : tipe data terstruktur terdiri dari beberapa elemen data setiap elemen data memiliki tipe data yang sama Pengaksesan elemen array menggunakan nama array dan index namaarray [index]
How to represent a Table ? X [1] Nama: Tini IPK : 2.68 Status : Lulus X [2] Nama: Tina IPK : 3.65 Status : Lulus X [3] Nama: Tino IPK : 4.00 Status : Lulus X [4] Nama: Toni IPK : 3.21 Status : Lulus X [5] Nama: Tito IPK : 2.89 Status : Lulus Array of record !!
Pointer Tipe data yang berisi alamat memory sebagai nilainya Berisi alamat memory dari variabel yang mempunyai nilai tertentu
Pointer Pada variabel statis, lokasi memory ditempati oleh data/nilai sesungguhnya, Pada variabel dinamis, lokasi memory ditempati oleh alamat memori yang menyimpan data sesungguhnya. Variabel dinamis dikenal dengan nama pointer (yang berarti menunjuk ke sesuatu) Lokasi yang ditunjuk biasa dibebut node 100 A 1000 1000 A a. A adalah variabel statis b. A adalah variabel dinamis
Linked List Definisi Linked list atau senarai berantai struktur berupa rangkaian elemen saling berkait, setiap elemen dihubungkan ke elemen lain melalui pointer.
Linked List Himpunan kosong, satu ataupun lebih dari elemen (node) yang saling terhubung membentuk suatu deretan (list) Setiap elemen dialokasikan pada alamat memory yang belum tentu terurut Penelusuran dari node ke node Sifatnya dinamis dari aspek kapasitas Relatif lebih rumit dibandingkan array
Review Operasi Variabel Pointer Array dan operasinya Array of Record Array dan Pointer Linked List
Review Pointer1 Deklarasi int *ip ``address-of'' operator & int i = 5; ip = &i; ``contents-of'' operator * printf("%d\n", *ip); 5 ``set whatever ip points to to 7.'' *ip = 7;
Review Pointer2 int j = 3; ip = &j; int *ip2; ip2 = ip;
Review Pointer3 ip = &i; ip2 = ip; *ip2 = *ip; different? ip = 5; or *ip = 5; ? Which one is correct? printf("%d\n", ip); or printf("%d\n", *ip); ? Which one is correct?
Variabel Statis Banyaknya data terbatas sesuai dengan saat pendeklarasian int Tabel[1..100] Hanya mampu menampung 100 data maksimal Jika kurang, maka untuk menambahkannya dengan mengubah deklarasinya Trouble !!!! Bagaimana bila banyak datanya tidak bisa dipastikan, apakah harus terus menerus merubah deklarasinya ??????
Implementasi Pointer sebagai variabel dinamis Untuk mengalokasikan tempat (menciptakan) yang ditunjuk pertama kali, menggunakan perintah malloc/calloc. x=(int*)calloc(1,sizeof(int)); K=(int*)calloc(1,sizeof(int)); X K 1001 1002 1001 1002 X K
Implementasi Pointer X K free (X); free (K); Untuk menghapus alokasi tempat yang ditunjuk pointer menggunakan perintah free. free (X); free (K); X K
Record dan Array Kumpulan data dengan record dan array. mhs[1] mhs[2] 3 4 5 ganjar deny indri mira dwi 1001 1002 1003 1004 1005 struct datamhs { int no_urut ; char nama[20] ; }; struct datamhs mhs[5]; Statis, data tidak dapat ditambahkan secara langsung, alokasi memori juga statis
Record dan Pointer Record dan pointer struct simpul{ int no_urut ; char nama[20]; struct simpul *next; }; struct simpul awal, akhir, baru; no_urut nama awal akhir baru null Implementasi kumpulan data dinamis menggunakan struktur diatas terdapat pada linked list
Linked List Komponen-komponen Linked List 1. Simpul, terdiri dari dua bagian, data dan pointer data Pointer penunjuk untuk awal, akhir, pencarian dan elemen baru dari linked list Nil atau null, untuk menyatakan bahwa pointer tidak menunjuk kemanapun 4. Elemen akhir linked list adalah simpul yang pointernya bernilai nil
Linked List Bentuk Linked List Akhir Awal Operasi-operasi pada Linked List 1. Penambahan Simpul : awal, tengah, akhir 2. Penghapusan Simpul : awal, tengah, akhir 3. Pencarian Simpul 4. Pembacaan Simpul