Struktur Data – 1 - SI-35-02

Download Report

Transcript Struktur Data – 1 - SI-35-02

Imam Rozali, S.T., M.T.
Struktur Data
(Data Structure) – IS 2313
System Basic Theory
 Tuesday 07.00-13.00, Thursday 07.00-13.00
 Reference:
 Liem, Inggriani. Diktat Struktur Data, ITB, 2003.
 Thomas A. Standish, “Data Stuctures, Algorithms & Software
Principles in C” Addison-Wesley, 1995.
 Additional Reference
 Internet
 E-mail : [email protected], [email protected]
 Phone : 081220670006, 02270303011
Evaluation
Class Participation: - %
Quiz : 10%
Assignment : 20%
Midterm: 35%
Final : 35%
Chapter 1 : Introduction to Data
Structure
Outline












Latar Belakang
Sekilas Tentang C
Proses Kompilasi dan Linking Program C
Struktur Penulisan Program C
Fungsi-Fungsi Dasar CUDT (User Defined Type) atau Tipe Data
Bentukan
Pengenalan Praprosesor #include
Sekilas Tentang Array
Sekilas Tentang Struct
Contoh Program Struct
Struktur Data dalam Pemrograman
Memory Address
Data Structures
Latar Belakang
Algoritma
Program
Data
Struktur Data
Algoritma + Struktur Data = Program
Latar Belakang
Ciri algoritma yang baik menurut Donald
E.Knuth adalah:





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
Sekilas Tentang C
 Bahasa C sebagai bahasa tingkat menengah
 Beberapa kelebihan dari bahasa C:
 Bahasa C tersedia hampir di semua jenis komputer, baik mikro,
mini maupun komputer besar (mainframe computer).
 Kode bahasa C bersifat portabel.
 Berbagai struktur data dan pengendalian proses disediakan
dalam C sehingga memungkinkan untuk membuat program
yang terstruktur.
 Dibandingkan dengan bahasa mesin atau assembly, C jauh
lebih mudah dipahami dan pemrogram tidak perlu mengetahui
mesin komputer secara detil.
 C memungkinkan memanipulasi data dalam bentuk bit maupun
byte. Di samping itu juga memungkinkan untuk memanipulasi
alamat dari suatu data atau pointer.
Sekilas Tentang C
Kelemahan bahasa C yang dirasakan oleh para
pemula bahasa C:
 Banyaknya operator serta fleksibilitas penulisan
program kadang-kadang membingungkan
pemakai. Kalau tidak dikuasai sudah tentu akan
menimbulkan masalah.
 Para pemrogram C tingkat pemula umumnya
belum pernah mengenal pointer dan tidak
terbiasa menggunakannya.
Proses Kompilasi dan Linking Program C
Agar suatu program dalam bahasa
pemrograman dapat dimengerti oleh komputer,
program haruslah diterjemahkan dahulu ke
dalam kode mesin.
Adapun penerjemah yang digunakan bisa
berupa interpreter atau kompiler.
Proses Kompilasi dan Linking Program C
Struktur Penulisan Program C
Program C tersusun atas sejumlah blok fungsi.
Sebuah program minimal mengandung sebuah
fungsi.
Fungsi pertama yang harus ada dalam program
C dan sudah ditentukan namanya adalah
main().
Bagian pernyataan fungsi (sering disebut tubuh
fungsi) diawali dengan tanda kurung kurawal
buka ({) dan diakhiri dengan tanda kurung
kurawal tutup (}).
Struktur Penulisan Program C
Fungsi-Fungsi Dasar C
Pada C, terdapat beberapa fungsi dasar yang
merupakan struktur yang harus ada dalam
bahasa pemrograman C. Beberapa fungsi yang
terdapat dalam bahasa C adalah:
 Fungsi main()
 Fungsi printf()
Fungsi-Fungsi Dasar C
Fungsi printf() merupakan fungsi yang umum
dipakai untuk menampilkan suatu keluaran pada
layar peraga. Untuk menampilkan tulisan:
 Selamat belajar bahasa C
 printf(“Selamat belajar bahasa C”);
Dalam bentuk yang lebih umum, format printf()
 printf(“string kontrol”, daftar argumen);
Fungsi-Fungsi Dasar C
\” menyatakan karakter petik-ganda
\\ menyatakan karakter backslash
\t menyatakan karakter tab
%d untuk menampilkan bilangan bulat (integer)
%f untuk menampilkan bilangan titikmengambang (pecahan)
%c untuk menampilkan sebuah karakter
%s untuk menampilkan sebuah string
Fungsi-Fungsi Dasar C
#include <stdio.h>
main( )
{
 printf(“No : %d\n”, 10);
 printf(“Nama : %s\n”, “Ali”);
 printf(“Nilai : %f\n”,80.5);
 printf(“Huruf : %c\n”,‘A’);
}
UDT (User Defined 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.
 Tipe data baru :
 typedef <tipe_data_lama> <tipe_data_baru>
UDT (User Defined Type) atau
Tipe Data Bentukan
#include <stdio.h>
#include <conio.h>
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();
}
Pengenalan praprosesor
#include
 #include merupakan salah satu jenis pengarah
praprosesor (preprocessor directive). Pengarah
praprosesor ini dipakai untuk membaca file yang
diantaranya berisi deklarasi fungsi dan definisi
konstanta.
 File-file ini mempunyai ciri yaitu namanya diakhiri
dengan ekstensi .h. Misalnya pada program #include
<stdio.h> menyatakan pada kompiler agar membaca file
bernama stdio.h saat pelaksanaan kompilasi.
 Bentuk umum #include:
 #include “namafile”
Sekilas Tentang Array
 Array adalah kumpulan data yang bertipe sama yang
menggunakan nama yang sama. Dengan menggunakan
array, sejumlah variabel dapat memakai nama yang
sama. Antara satu variabel dengan variabel lain di
dalam array dibedakan berdasarkan nomor elemen
(subscript).
Sekilas Tentang Array
#include<iostream.h>
#include<conio.h>
void main()
{
int data[10]; // array dengan 10 elemen bertipe integer
int elemen;
clrscr();
// entri 10 data
for (elemen=0;elemen <= 9;elemen++)
{
cout << “Data ke – “ << elemen << “: “;
cin >> data[elemen];
}
// tampilkan data setelah entri
for (elemen=0;elemen <= 9;elemen++)
{
cout << “Data ke – “ << elemen << “: “ << data[elemen];
}
}
Sekilas Tentang Array
#include<iostream.h>
#include<conio.h>
void main()
{
int data[5] = {4, 1, 0, -9, 8};
int elemen;
clrscr();
// tampilkan data
for (elemen=0;elemen <= 4;elemen++)
{
cout << “Data ke – “ << elemen << “: “ << data[elemen];
}
}
Sekilas Tentang Array
#include<iostream.h>
#include<conio.h>
void main()
{
int data[10] = {4, 1, 0, -9, 8, 5, -1, 2, 3, -7};
int elemen, max;
max = data[0];
for(elemen=0; elemen<= 9; elemen++)
{
if (data[elemen]>max)
max = data[elemen];
else
max = max;
}
cout << “Nilai maksimum adalah : “ << max;
}
Sekilas Tentang Array
#include<iostream.h>
#include<conio.h>
void main()
{
int j, k;
int data[5][3] =
{
{3, 4, -1},
{2, 3, 0},
{1, 1, 2},
{5, 9, -4},
{6, 6, 2}
};
for (j = 0; j<=4; j++)
{
for (k = 0; k<=2; k++)
cout << “data[“ << j << “][“<< k << “] = “ << data[j][k] << endl;
}
}
Sekilas Tentang Struct
Struct adalah tipe data bentukan yang berisi
kumpulan variabel-variabel yang bernaung
dalam satu nama yang sama dan memiliki
kaitan satu sama lain.
typedef struct <nama_struct>
{
tipe_data <nama_var>;
tipe_data <nama_var>;
....
}
Sekilas Tentang Struct
typedef struct Mahasiswa
{
char NIM[8];
char nama[50];
float ipk;
};
struct
{
char NIM[8];
char nama[50];
float ipk;
} mhs;
Sekilas Tentang Struct
#include <stdio.h>
#include <conio.h>
//Pendeklarasian tipe data baru struct Mahasiswa
typedef struct Mahasiswa
{
char NIM[9];
char nama[30];
float ipk;
};
void main()
{
//Buat variabel mhs bertipe data Mahasiswa
Mahasiswa mhs;
clrscr();
printf("NIM = ");scanf("%s",mhs.NIM);
printf("Nama = ");scanf("%s",mhs.nama);
printf("IPK = ");scanf("%f",&mhs.ipk);
printf("Data Anda : \n");
printf("NIM : %s\n",mhs.NIM);
printf("Nama : %s\n",mhs.nama);
printf("IPK : %f\n",mhs.ipk);
getch();
}
#include <stdio.h>
#include <conio.h>
#define phi 3.14
//langsung dianggap variabel 'lingkaran'
struct
{
float jari2;
float keliling;
float luas;
} lingkaran;
//fungsi void untuk menghitung luas ingkaran
void luasLingkaran()
{
//langsung menggunakan luas lingkaran asli
lingkaran.luas = lingkaran.jari2 * lingkaran.jari2 * phi;
printf("\nLuas lingkaran = %f",lingkaran.luas);
}
//fungsi yang mengembalikan nilai float untuk menghitung keliling
float kelLingkaran(float j)
{
return 2*phi*lingkaran.jari2;
}
int main()
{
clrscr();
printf("Jari-jari = ");scanf("%f",&lingkaran.jari2);
//panggil fungsi luasLingkaran
luasLingkaran();
//panggil fungsi keliling, nilai kembaliannya dikirim
lingkaran.keliling = kelLingkaran(lingkaran.jari2);
//tampilkan keliling lingkaran asli
printf("\nKeliling lingkaran = %f",lingkaran.keliling);
getch();
}
#include <stdio.h>
#include <conio.h>
typedef struct Date
{
int dd;
int mm;
int yyyy;
};
typedef struct Time
{
int h;
int m;
int s;
};
typedef struct Login
{
int ID;
Date tglLogin;
Time waktuLogin;
};
int main()
{
Login user1;
printf("USER 1\n");
printf("ID : ");
scanf("%d",&user1.ID);
printf("Tanggal Login\n");
printf("Hari : ");
scanf("%d",&user1.tglLogin.dd);
printf("Bulan : ");
scanf("%d",&user1.tglLogin.mm);
printf("Tahun ");
scanf("%d",&user1.tglLogin.yyyy);
printf("Waktu Login\n");
printf("Jam : ");
scanf("%d",&user1.waktuLogin.h);
printf("Menit : ");
scanf("%d",&user1.waktuLogin.m);
printf("Detik : ");
scanf("%d",&user1.waktuLogin.s);
printf("Terimakasih\n");
printf("Data Anda :\n");
printf("ID : %d\n",user1.ID);
printf("Date : %d - %d –
%d\n",user1.tglLogin.dd,user1.tglLogin.mm,user1.tglLogin.yyyy);
printf(“ Time: %d:%d:%d\n",user1.waktuLogin.h,user1.waktuLogin.m,user1.waktuLogin.s);
getch();
}
#include <stdio.h>
#include <conio.h>
typedef struct Date
{
int dd;
int mm;
int yyyy;
};
typedef struct Time
{
int h;
int m;
int s;
};
typedef struct Login
{
int ID;
Date tglLogin;
Time waktuLogin;
};
int main()
{
Login user[3];
//3 user
for(int i=0;i<3;i++)
{
printf("\nUSER ke-%d\n",i+1);
printf("ID : ");
scanf("%d",&user[i].ID);
printf("Tanggal Login\n");
printf("Hari : ");
scanf("%d",&user[i].tglLogin.dd);
printf("Bulan : ");
scanf("%d",&user[i].tglLogin.mm);
printf("Tahun : ");
scanf("%d",&user[i].tglLogin.yyyy);
printf("Waktu Login\n");
printf("Jam : ");
scanf("%d",&user[i].waktuLogin.h);
printf("Menit : ");
scanf("%d",&user[i].waktuLogin.m);
printf("Detik : ");
scanf("%d",&user[i].waktuLogin.s);
printf("Terimakasih Atas Pengisiannya\n");
printf("\nData User ke-%d:\n",i+1);
printf("Login ID : %d\n",user[i].ID);
printf("Login Date : %d - %d %d\n",user[i].tglLogin.dd,user[i].tglLogin.mm,user[i].tglLogin.yyyy);
printf("Login Time :
%d:%d:%d\n",user[i].waktuLogin.h,
user[i].waktuLogin.m,user[i].waktuLogin.s);
}
getch();
}
Struktur Data dalam
Pemrograman
 Pemakaian struktur data yang tepat di dalam proses
pemrograman akan menghasilkan:
 Algoritma yang lebih jelas dan tepat, sehingga
menjadikan program secara keseluruhan lebih efisien
dan sederhana.
 Membuat program lebih ringkas, lebih bersih, lebih
elegan,lebih mudah dan lebih mampu berkinerja
tinggi (karena efisien dalam penggunaan memori dan
waktu)
 Program berjalan membutuhkan waktu beberapa
detik, dimana struktur yang lain mungkin akan
membutuhkan ribuan detik
Struktur Data dalam
Pemrograman
Tahapan pemrograman:
 Analisa masalah
 Memilih algoritma dan struktur data untuk
menyelesaikan masalah itu
 Coding
Struktur Data dalam
Pemrograman
 Struktur Data yang telah dipelajari struktur data dengan type :
 Dasar yaitu integer, real, boolean, character. Nama Informasi
yang disefinisikan dengan type dasar ini hanya dapat
menyimpan satu nilai.
 Bentukan yaitu type yang merupakan komposisi dari type
bentukan. Nama informasi yang didefiniskan dengan type ini
hanya mengandung satu nilai sesuai dengan kompisisi dari type
yang didefinisikan.
 Tabel/Array yaitu type yang mendefinisikan sekumpulan elemen
bertype sama, dan nantinya kumpulan elemen tersebut akan
dialokasikan secara kontigu, dengan akses elemen yang
ditentukan oleh indeks. Nama informasi yang bertype tabel
dapat menyimpan banyak nilai, tergantung pada ukuran tabel.
Struktur Data dalam
Pemrograman
 Ada 3 tingkatan struktur data :
 Definisi Fungsional adalah pendefinisian struktur data dan
operator-operator yang berlaku pada struktur tersebut
 Representasi Lojik adalah spesifikasi “type” dari struktur,
yang menyangkut nama type dan spesifikasi semua
operator, namun dalam definisi ini, alamat masih belum
ditentukan secara pasti.
 Representasi fisik adalah spesifikasi dari struktur data
sesuai dengan implementasinya dalam memori komputer.
Struktur Data dalam
Pemrograman
 Ada dua macam implementasi fisik :
 Representasi fisik kontigu adalah sekumpulan data yang
penempatannya dalam memori secara fisik adalah kontigu,
setiap elemen ditaruh berurutan posisi alamatnya dengan
elemen lain. Karena itu untuk mencapai elemen berikutnya,
cukup melalui suksesor alamat dari “current element”. Struktur
ini disebut struktur yang statis.
 Representasi fisik berkait adalah sekumpulan data yang
penempatannya dalam memori dapat terpencar-pencar, namun
dapat ditelusuri berkat adanya informasi berupa alamat, yang
menghubungkan elemen yang satu dengan yang lain. Alamat
memori dapat dialokasikan/dapat pula dibebaskan sesuai
dengan keperluan, sehingga besarnya memori yang dipakai
bisa membesar dan mengecil. Struktur ini disebut struktur yang
dinamis.
Struktur Data dalam
Pemrograman
 Beberapa jenis struktur data adalah sebagai berikut:










Array
Linear List
Stack
Queue
List
Connected List
Circular List
Double Linked List
Multi List Structure
Tree Structure
Struktur Data dalam
Pemrograman
Struktur Data dalam
Pemrograman
List Linier
Tree
Stack
Multi List
Antrian
Graph
MEMORY ADDRESS
 Operand bilangan dan karakter, seperti halnya instruksi,
disimpan dalam memori komputer.
 Memori terdiri atas jutaan sel penyimpanan, dimana tiap
sel tersebut menyimpan suatu bit informasi yang berupa
nilai 0 atau 1. Karena bit tunggal mewakili informasi
yang sangat sedikit, maka bit jarang ditangani secara
individu.
 Pendekatan yang umum adalah menanganinya dalam
kelompok dengan ukuran tertentu. Untuk tujuan ini,
memori tersebut diatur sehingga kelompok n bit dapat
disimpan dan diambil dalam satu operasi dasar tunggal.
 Tiap kelompok n bit disebut sebagai word informasi, dan
n disebut word length.
MEMORY ADDRESS
Komputer modern memiliki word length yang
biasanya berkisar dari 16 hingga 64 bit. Suatu
unit 8 bit disebut byte.
Instruksi mesin mungkin memerlukan satu atau
lebih word untuk representasinya. Jika word
length suatu komputer adalah 32 bit, maka word
tunggal dapat menyimpan 32-bit bilangan 2’scomplement atau empat karakter ASCII,
masing-masing memiliki 8 bit.
MEMORY ADDRESS
 Mengakses memori untuk menyimpan atau mengambil
suatu item informasi, baik berupa word atau byte,
memerlukan nama yang berbeda atau alamat untuk tiap
lokasi item.
 Merupakan hal yang biasa menggunakan bilangan 0
hingga 2k – 1, untuk beberapa nilai k yang sesuai,
sebagai alamat dari lokasi yang berurutan dalam
memori. Alamat 2k meliputi ruang alamat komputer
tersebut, dan memori tersebut dapat memiliki lokasi
addressable hingga 2k. Misalnya, alamat 24-bit
menghasilkan ruang alamat 224 (16.777.216) lokasi.
Data Structures
 CPU secara langsung dapat memanipulasi data integer, real
number, karakter, boolean dan memory addres. Jenis data yang
secara langsung didukung oleh CPU disebut jenis data primitif, atau
jenis data mesin.
 Struktur data termasuk kelompok elemen data primitif yang
diorganisir untuk beberapa bentuk pengolahan umum. Struktur data
digambarkan dan dimanipulasi dalam perangkat lunak.
 Perangkat keras komputer tidak bisa memanipulasi struktur data
secara langsung, tetapi harus memperlakukannya berkaitan dengan
komponen primitif seperti bilangan integer, bilangan floating point,
karakter tunggal, dan seterusnya.
 Perangkat lunak harus menterjemahkan operasi struktur data ke
dalam seperangkat instruksi mesin yang beroperasi pada elemen
data primitif individu.
Data Structures
 Kompleksitas struktur data terbatas pada keterampilan
dan imajinasi para programmer.
 Perangkat lunak sistem sering menyediakan jasa
aplikasi untuk manipulasi struktur data. Sebagai contoh,
suatu sistem operasi umumnya menyediakan jasa untuk
membaca dan menulis ke dan dari file.
 Struktur data lain lebih sedikit didukung oleh perangkat
lunak sistem. Contohnya meliputi array numerik, file
indeks, dan struktur database kompleks.
 File indeks didukung oleh beberapa, tetapi tidak semua
sistem operasi.
Data Structures
 Array numerik umumnya mendukung bahasa pemrograman tetapi
bukan di dalam sistem operasi.
 Struktur database secara normal didukung oleh suatu database
manajemen sistem.
 Kebanyakan bahasa program mendukung manipulasi langsung dari
karakter string.
 Struktur data mempunyai peran penting dalam pengembangan
sistem software. Sebagai contoh, linked list biasanya digunakan
oleh sistem operasi untuk menjejaki blok memori yang dialokasikan
ke program dan blok disk yang dialokasikan ke file dan direktori.
 Indeks digunakan dalam database manajemen sistem untuk
mempercepat pencarian dan memanggil kembali operasi.
Tugas I
Tuliskan nilai setiap elemen dari variabel array a
di bawah ini:
 Int a[3][3] = {{1,8},{2,4,6},{5}}
Buatlah sebuah fungsi rekursif untuk
mendapatkan bilangan terkecil dari n buah
bilangan bulat yang tersimpan dalam sebuah
varriabel array
Buatlah sebuah array – record untuk
menampung suatu data mahasiswa yang terdiri
atas: nim, nama, alamat, dan umur. Asumsi
jumlah maksimal mahasiswa adalah 50 orang.
Program apakah ini?
Outputnya?
#include <stdio.h>
#define SIZE 10
Int whatisThis(int[],int);
main()
{
Int total,a[SIZE] = {1,2,3,4,5,6,7,8,9,10}
total = whatisThis(a,SIZE);
printf(“\nNilai variabel total adalah %d”, total);
return 0;
}
Int whatisThis(int b[],int size)
{
If (size == 1)
Return b[0];
else
return b[size-1] + whatisThis(b,size-1)
}