Imam Rozali, S.T., M.T.
Struktur Data
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 : imr@ittelkom.ac.id,
imam@telkompdc.com
Evaluation
Class Participation: - %
Quiz : 10%
Assignment : 20%
Midterm: 35%
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
Latar Belakang
Algoritma
Program
Data
Struktur Data
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)
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.
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
Proses Kompilasi dan Linking Program C
Agar suatu program dalam bahasa
pemrograman dapat dimengerti oleh komputer,
program haruslah diterjemahkan dahulu ke
dalam kode mesin.
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
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-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()
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
titik-mengambang (pecahan)
%c untuk menampilkan sebuah karakter
Fungsi-Fungsi Dasar C
#include <stdio.h>
main( )
{
printf(“No : %d\n”, 10);
printf(“Nama : %s\n”, “Ali”);
printf(“Nilai : %f\n”,80.5);
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 :
UDT (User Defined Type) atau
Tipe Data Bentukan
#include <stdio.h>#include <conio.h> typedef int angka;
typedef foat pecahan; typedef char huruf; void main(){
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);
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:
Sekilas Tentang Array
Array adalah kumpulan data yang bertipe sama yang
menggunakan nama yang sama. Dengan menggunakan
array, sejumlah variabel dapat memakai nama yang
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
for (elemen=0;elemen <= 4;elemen++) {
cout << “Data ke – “ << elemen << “: “ << data[elemen];
Sekilas Tentang Array
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];
foat ipk;
};
struct
{
char NIM[8];
char nama[50];
foat ipk;
Sekilas Tentang Struct
#include <stdio.h>#include <conio.h>
//Pendeklarasian tipe data baru struct Mahasiswa
typedef struct Mahasiswa {
//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);
#include <stdio.h> #include <conio.h> #defne phi 3.14
//langsung dianggap variabel 'lingkaran' struct
//fungsi void untuk menghitung luas ingkaran void luasLingkaran()
{
//langsung menggunakan luas lingkaran asli
lingkaran.luas = lingkaran.jtariu * lingkaran.jtariu * phi;r printf("\nLuas lingkaran = %f",lingkaran.luas);r
}
//fungsi yang mengembalikan nilai float untuk menghitung keliling
float kelLingkaran(float jt) {
int main() {
clrscr();r
printf("Jari-jtari = ");rscanf("%f",&lingkaran.jtariu);r //panggil fungsi luasLingkaran
luasLingkaran();r
//panggil fungsi keliling, nilai kembaliannya dikirim lingkaran.keliling = kelLingkaran(lingkaran.jtariu);r //tampilkan keliling lingkaran asli
printf("\nKeliling lingkaran = %f",lingkaran.keliling);r getch();r
#include <stdio.h> #include <conio.h> typedef struct Date {
int dd;r int mm;r int yyyy;r };r
typedef struct Time {
int h;r int m;r int s;r };r
typedef struct Login {
int ID;r
Date tglLogin;r
int main() {
Login user1;r
printf("USER 1\n");r printf("ID : ");r
scanf("%d",&user1.ID);r printf("Tanggal Login\n");r printf("Hari : ");r
scanf("%d",&user1.tglLogin.dd);r printf("Bulan : ");r
scanf("%d",&user1.tglLogin.mm);r printf("Tahun ");r
scanf("%d",&user1.tglLogin.yyyy);r printf("Waktu Login\n");r
printf("Jam : ");r
scanf("%d",&user1.waktuLogin.h);r printf("Menit : ");r
scanf("%d",&user1.waktuLogin.m);r printf("Detik : ");r
scanf("%d",&user1.waktuLogin.s);r printf("Terimakasih\n");r
printf("Data Anda :\n");r
printf("ID : %d\n",user1.ID);r printf("Date : %d - %d –
%d\n",user1.tglLogin.dd,user1.tglLogin.mm,user1.tglLogin.yyyy);r
printf(“ Time: %d:%d:%d\ n",user1.waktuLogin.h,user1.waktuLogin.m,user1.waktuLogin.s);r
#include <stdio.h> #include <conio.h> typedef struct Date {
int dd;r int mm;r int yyyy;r };r
typedef struct Time {
int h;r int m;r int s;r };r
typedef struct Login {
int ID;r
Date tglLogin;r
int main() {
Login user[3];r //3 user
for(int i=0;ri<3;ri++) {
printf("\nUSER ke-%d\n",i+1);r printf("ID : ");r
scanf("%d",&user[i].ID);r printf("Tanggal Login\n");r printf("Hari : ");r
scanf("%d",&user[i].tglLogin.dd);r printf("Bulan : ");r
scanf("%d",&user[i].tglLogin.mm);r printf("Tahun : ");r
scanf("%d",&user[i].tglLogin.yyyy);r printf("Waktu Login\n");r
printf("Jam : ");r
scanf("%d",&user[i].waktuLogin.h);r printf("Menit : ");r
scanf("%d",&user[i].waktuLogin.m);r printf("Detik : ");r
scanf("%d",&user[i].waktuLogin.s);r
printf("Terimakasih Atas Pengisiannya\n");r printf("\nData User ke-%d:\n",i+1);r
printf("Login ID : %d\n",user[i].ID);r printf("Login Date : %d %d
%d\n",user[i].tglLogin.dd,user[i].tglLogin.mm,user[i].tglLogin.yyyy);r printf("Login Time :
%d:%d:%d\n",user[i].waktuLogin.h,
user[i].waktuLogin.m,user[i].waktuLogin.s);r }
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
Struktur Data dalam
Pemrograman
Tahapan pemrograman:
Analisa masalah
Memilih algoritma dan struktur data untuk
menyelesaikan masalah itu
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
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
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
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
Struktur Data dalam
Pemrograman
List Linier Multi List
Tree Antrian
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
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
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 2
k– 1, untuk beberapa nilai k yang sesuai,
sebagai alamat dari lokasi yang berurutan dalam
memori. Alamat 2
kmeliputi ruang alamat komputer
tersebut, dan memori tersebut dapat memiliki lokasi
addressable
hingga 2
k. Misalnya, alamat 24-bit
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.
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
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
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
#include <stdio.h> #defne 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) }