Algoritma dan struktur data Pertemuan 2
Struktur data • Struktur data dilihat dari kebutuhan memorynya dapat dikelompokan menjadi 2 macam yaitu: • struktur data statis • dan struktur data dinamis
• Struktur data statis : Struktur data yang kebutuhan/alokasi memorinya tetap (fixed size), tidak dapat dikembangkan atau diciutkan, biasanya menggunakan tipe data array. Array adalah suatu struktur yang terdiri dari sejumlah elemen yang memiliki tipe data yang sama • Struktur data dinamis : Struktur data yang kebutuhan memorynya sesuai data yang ada, dimana dapat dikembangkan atau diciutkan sesuai dengan kebutuhan. Pengelolaan alamat secara dinamis (dynamic address) dapat dilakukan dengan menggunakan tipe data pointer.
• Pemakaian array tidak selalu tepat untuk programprogram terapan yang kebutuhan pengingatnya selalu bertambah selama eksekusi program tersebut. Untuk itu diperlukan satu tipe data yang dapat digunakan untuk mengalokasikan (membentuk) dan mendealokasikan (menghapus) pengingat secara dinamis, yaitu sesuai dengan kebutuhan pada saat suatu program dieksekusi.
Pada peubah statis, isi dari peubah adalah data sesungguhnya yang akan diolah. Pada peubah dinamis nilai peubah adalah alamat lokasi lain yang menyimpan data sesungguhnya. Dengan demikian data yang sesungguhnya tidak dapat dimasup secara langsung. Karena itu, peubah dinamis dikenal dengan sebutan POINTER yang artinya menunjuk ke sesuatu, yang berisi adress/alamat dalam RAM.
Deklarasi variabel bertipe pointer : • tipe data *namavariabel; Contoh: int *p Maka variabel p menunjuk suatu alamat pada memori. Jika ada variabel A bertipe integer, maka alamat variabel tersebut pada memori bisa diketahui dengan pernyataan &A.
Variabel pointer p, bisa menunjuk ke alamat variabel A, yaitu dengan pernyataan : p = &A; atau dengan memesan sendiri memory baru yaitu dengan perintah p = new int; Sedangkan untuk mengetahui isi dari variabel yang alamatnya ditunjuk oleh p, dengan pernyataan *p;
Contoh Program menuliskan alamat dan nilai dari suatu variabel pointer : #include using namespace std; main(){ int a,*b, *c; a=10; b=&a; cout<<*b<<endl; c=new int; *c=25; b=c; cout<<*b<<endl; getchar(); }
Apa itu struktur data? • Elemen-elemen data yang dikelompokkan bersama-sama dalam satu nama • Elemen-elemen (disebut member) bisa berasal dari tipe yang berbeda • Sintaks deklarasi: struct structure_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;
Mengapa harus ada struktur data? • Programmer membutuhkan suatu tipe data baru yang di dalamnya terdiri dari banyak tipe-tipe data. Biasanya digunakan untuk mengolah data yang mempunyai bebrapa parameter • Misalnya: data mahasiswa mempunyai parameter sbb: – – – – –
nama : tipe string NIM : tipe string Kelas : tipe char Usia : tipe int Alamat : tipe string
• Karena parameter-parameter tersebut saling berkaitan, dibutuhkan untuk mengelompokkan parameter-parameter tsb dalam suatu variabel baru.
Langkah-langkah penggunaan struktur data • Langkah 1: pembentukan struktur nama struktur beserta anggotanya • Langkah 2 : deklarasi variabel bertipe struktur
Contoh lain struktur data • Data mobil: – Merk (string) – Tahun pembuatan(string) – Bobot kendaraan (int) – Ukuran kendaraan dalam m3 (int)
• Bilangan kompleks – Real (float) – Imajiner (float)
Contoh pembentukan struct ... //pembentukan struktur ‘mhs’ struct mhs { char nama[20]; char NIM[6]; char kelas; int usia; char alamat[30]; }; ... dengan ini, kita punya tipe data baru yaitu ‘mhs’
Deklarasi variabel bertipe struct ... mhs data_mahasiswa; ...
Nama struktur Nama variabel Bentuk umumnya: Nama_struct nama_variabel; Dengan ini, kita punya variabel yang bernama data_mahasiswa yang bertipe ‘mhs’. ‘mhs’ sendiri pada dasarnya adalah struktur data
Mengakses data dalam struktur • Contoh : mengakses elemen alamat pada variabel data_mahasiswa, yg bertipe mhs misal untuk operasi baca: cin>>data_mahasiswa.alamat; atau operasi tulis: cout<
Array struktur data • Contoh: mhs data_mhs[20]; deklarasi variabel data_mhs bertipe array dari struktur mhs Masing-masing elemen array data_mhs mempunyai elemen struct nama,NIM, kelas, usia,dan alamat
Pengaksesan elemen struct pada suatu array • Contoh : variabel data_mhs bertipe array dari tipe struktur mhs mhs data_mhs[10]; • Program akan mengakses elemen struct nama pada data_mhs ke-5,maka sintaksnya: cin>>data_mhs[5].nama;
Pointer ke struktur • Contoh: masih menggunakan struktur ‘mhs’, akan dibuat suatu variabel bertipe pointer ke ‘mhs’. Deklarasi variabelnya: mhs *ptr_mhs;
Inisialisasi pointer struktur • Inisialisasi pointer struktur bisa menggunakan perintah malloc sbb: ptr_mhs=(mhs*)malloc(jumlah*sizeof(mhs));
Pengaksesan suatu nilai pada pointer struktur • Jika pada keadaan ‘biasa’, pengaksesan elemen pada suatu struct dilakukan dengan operator titik (misalnya data_mhs.nama), pada pointer struktur digunakan operator panah untuk mengakses elemennya, misalnya: cin>>ptr_mhs->nama;
Perbedaan Tipe Data, Obyek Data & Struktur Data (1)
• Tipe data adalah jenis data yang mampu ditangani oleh suatu bahasa pemrograman pada komputer. • Tiap-tiap bahasa pemrograman memiliki tipe data yang memungkinkan: – Deklarasi terhadap variabel tipe data tersebut – Menyediakan kumpulan operasi yang mungkin terhadap variabel bertipe data tersebut – Jenis obyek data yang mungkin – Contoh tipe data di C? Java? Pascal? .NET?
Perbedaan Tipe Data, Obyek Data & Struktur Data (2)
• 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.
Aktivitas Struktur Data • Di dalam struktur data kita berhubungan dengan 2 aktivitas: – Mendeskripsikan kumpulan obyek data yang sah sesuai dengan tipe data yang ada – Menunjukkan mekanisme kerja operasi-operasinya • Contoh: integer (-32768 s/d 32767) dan jenis operasi yang diperbolehkan adalah +, -, *, /, mod, ceil, floor, <, >, != dsb.
• Struktur data = obyek data + [operasi manipulasi data]
Hubungan SD dan Algoritma • 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 • Ciri algoritma yang baik menurut Donald E.Knuth: – Input: ada minimal 0 input atau lebih – Ouput: ada minimal 1 output atau lebih – Definite: ada kejelasan apa yang dilakukan – Efective: langkah yang dikerjakan harus efektif – Terminate: langkah harus dapat berhenti (stop) secara jelas
ADT (Abstract Data Type) atau Tipe Data Bentukan • Bahasa pemrograman bisa memiliki tipe data: – Built-in : sudah tersedia oleh bahasa pemrograman tersebut • Tidak berorientasi pada persoalan yang dihadapi. – UDT : User Defined Type, dibuat oleh pemrogram. • Mendekati penyelesaian persoalan yang dihadapi • Contoh: record pada Pascal, struct pada C, class pada Java – 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
Program • •
Contoh: #include <stdio.h>
• • • • • • • • • •
#include typedef int angka; typedef float pecahan; typedef char huruf; void main(){ //clrscr(); angka umur; pecahan pecah; huruf h;
• • • • • • • • • •
huruf nama[10]; printf("masukkan umur anda : ");scanf("%d",&umur); printf("Umur anda adalah %d",umur); printf("\nmasukkan bilangan pecahan : ");scanf("%f",&pecah); printf("Bilangan pecahan %f",pecah); printf("\nmasukkan huruf : ");h=getche(); printf("\nHuruf anda %c",h); printf("\nmasukkan nama : ");scanf("%s",nama); printf("Nama anda %s",nama); getch(); }
Hasil Program