Struktur Data (Data Structure) – IS 2313

  Imam Rozali, S.T., M.T.

  

Struktur Data

Data Structure

   Reference:

   Rozali, Imam. Diktat Struktur Data, ITTelkom, 2010.

   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 :

   Phone : 081220670006, 02270303011

Evaluation

   Class Participation: - %

   Quiz : 10%

   Assignment : 20%

   Midterm: 35%

   Final : 35%

Outline

  Bentukan

  Memory Address

  

  Struktur Data dalam Pemrograman

  

  Contoh Program Struct

   Pengenalan Praprosesor #include  Sekilas Tentang Array  Sekilas Tentang Struct 

  

  Latar Belakang

  Struktur Penulisan Program C

  

  Proses Kompilasi dan Linking Program C

  

  Sekilas Tentang C

  

  

 Fungsi-Fungsi Dasar CUDT (User Defined Type) atau Tipe Data

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

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 titik- mengambang (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 foat 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);

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]; 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 { char NIM[9]; char nama[30]; foat 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);

  #include <stdio.h> #include <conio.h> #defne phi 3.14 //langsung dianggap variabel 'lingkaran' struct { float jtariu;r float keliling;r float luas;r } lingkaran;r //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 Time waktuLogin;r };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 Time waktuLogin;r };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 detik, dimana struktur yang lain mungkin akan

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

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 Multi List

  Tree Antrian

  Stack 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.

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’s- complement 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 k hingga 2 – 1, untuk beberapa nilai k yang sesuai, sebagai alamat dari lokasi yang berurutan dalam k memori. Alamat 2 meliputi ruang alamat komputer tersebut, dan memori tersebut dapat memiliki lokasi k addressable hingga 2 . Misalnya, alamat 24-bit

  24 menghasilkan ruang alamat 2 (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

Program apakah ini? Outputnya?

  #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) }