4. Refresh C++
Bahasa C dibuat pada tahun 1978 untuk Sistem Operasi Unix oleh Bell
Labs (Ken Thompson dan Dennis M. Ritchie).
Buku The C Programming Language
Bahasa C merupakan salah satu bahasa pemrograman yang paling sering
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Consists mainly of :
Preprocessor Directive
Function Definitions
Data Structures
Code programs
Function Body
3
#include <.>
#define .
int coba();
void main()
{
int a;
printf(Hello, world!\n);
a = coba();
}
int coba(){
..
}
Preprocessor
Comments are good
9. Keywords of C
Flow control (6) if, else, return, switch, case, default
Loops (5) for, do, while, break, continue
Common types (5) int, float, double, char, void
Structures (2) struct, typedef
Sizing things (1) sizeof
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Rare but still useful types (7) extern, signed, unsigned, long, short,
static, const
Evil keywords which we avoid (1) goto
10. Variable
Kita harus mendeklarasikan tipe data setiap variabel pada C.
5
Setiap varibel punya tipe data dan namanya.
Variabel adalah unik, tidak boleh berupa keyword, dimulai dengan huruf
atau underline, maks 32 karakter
int a,b;
double d;
/* This is
a bit cryptic */
int start_time;
int no_students;
double course_mark;
/* This is a bit better */
int main()
{
char a, b;
a= 'x'; /* Set a to the character x */
printf ("a is %c\n",a);
b= '\n'; /* This really is one character*/
printf ("b is %c\n",b);
return 0;
}
/* Prints 6 sets i to 7 */
Note this important difference
int i= 6;
printf ("%d\n",++i);
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Data type
Description
%d
Int
Decimal number
%x
Int
Hexadecimal number
%b
Int
%c
Int
%f
float
%s
char array
IF / IF ELSE
SWITCH
if ( true ) {
DoFirstThing();
DoSecondThing();
};
if ( true )
DoSomething();
else
switch ( key ) {
case a:
case A:
DoFirstThing();
DoSecondThing();
break;
case b:
DoSomething();
break;
default:
break;
};
DoSomethingElse()
;
Teknik Informatika
Universitas Muhammadiyah Ponorogo
FOR
WHILE
int i, j;
for (i=0; i<5; i++)
for (j=5; j>0; j--) {
// i counts up
// j counts down
printf(%i %j\n, i, j);
};
int i = 0;
int StayInLoop = 1;
while ( StayInLoop ) {
i+=2;
// Make sure you have
// exit condition!
if ( i > 200 )
StayInLoop = 0;
};
The
++ / -- is shortcut
used
to
decrement
increment
value
of
/
int
+= increments by n
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
11
1. Pengantar
Bagaimana cara mengatasi masalah implementasi program dengan 12
komputer?
Pemahaman masalah secara menyeluruh dan persiapan data
Keputusan operasi-operasi yang dilakukan terhadap data
Penyimpanan data-data pada memori sehingga tersimpan dan
terstruktur secara logis, operasinya efisien
Pengambilan keputusan terhadap bahasa pemrograman mana yang
paling cocok untuk jenis data yang ada
5. 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
Bentuk umum:
typedef <tipe_data_lama> <ama_tipe_data_baru>
7. Program
Contoh:
#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();
}
14
Hasil Program
tipe_data <nama_var>;
tipe_data <nama_var>;
....
8. Stuct
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
clrscr();
printf("NIM = ");scanf("%s",mhs.NIM);
printf("Nama = ");scanf("%s",mhs.nama);
printf("IPK = ");scanf("%f",&mhs.ipk);
11. Pendeklarasian dan penggunaan Struct (2) (tanpa menggunakan
typedef)
struct {
16
char NIM[8];
char nama[50];
float ipk;
} mhs;
17
}
Hasil
Berarti kita sudah mempunyai variabel mhs yang bertipe data struct seperti
diatas.
12. Cara penggunaan struct dan pengaksesan elemen-elemennya
Penggunaan/pemakaian tipe data struct dilakukan dengan membuat
suatu variabel yang bertipe data struct tersebut
Pengaksesan elemen struct dilakukan secara individual dengan
menyebutkan nama variabel struct diikuti dengan operator titik (.)
Misalnya dengan struct mahasiswa seperti contoh di atas, kita akan
akses elemen-elemennya seperti contoh berikut:
13. Program
Contoh 1
#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;
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Contoh 2
#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
Teknik Informatika
Universitas Muhammadiyah Ponorogo
lingkaran
float kelLingkaran(float j){
return 2*phi*lingkaran.jari2;
}
int main(){
clrscr();
printf("Jari-jari = ");scanf("%f",&lingkaran.jari2);
//panggil fungsi luasLingkaran
18
luasLingkaran();
//panggil fungsi keliling, nilai kembaliannya dikirim ke keliling lingkaran
asli
lingkaran.keliling = kelLingkaran(lingkaran.jari2);
//tampilkan keliling lingkaran asli
printf("\nKeliling lingkaran = %f",lingkaran.keliling);
getch();
}
};
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");
Hasil
19
Teknik Informatika
Universitas Muhammadiyah Ponorogo
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");
15. Array of Struct
#include <stdio.h>
#include <conio.h>
typedef struct Date{
int dd;
int mm;
int yyyy;
};
typedef struct Time{
int h;
int m;
int s;
};
20
Teknik Informatika
Universitas Muhammadiyah Ponorogo
16. LATIHAN
Buatlah program menu yang berisi data-data KTP penduduk yang
disimpan dalam array struct 1 dimensi dan dapat dilakukan penambahan
data, pencarian data, penampilan data dan penghapusan data.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
SEARCHING ARRAY
1. Definisi Array
Array : a finite ordered set of homogenous elements
Elemen-elemen array tersusun secara berderet dan dapat diakses secara
random di dalam memori.
Array memiliki alamat yang besebelahan/berdampingan tergantung
lebar tipe datanya.
Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi.
Elemen-elemen array bertipe data sama dan bisa berisi nilai yang sama
atau berbeda-beda.
21d2 21d4
21d6
21d8
21da
21dc
21de
21e0
21dc
21dd
21de
21df
21e0
21e1
alamat
%x adalah hexadesimal
indeks
value
21da 21db
23
value
indeks
alama
t
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
9. Inisialisasi
25
6. Contoh-contoh lain
Bagaimana menginputkan dan menampilkan array?
Manipulasi array 1 dimensi?
Array tanpa inisialisasi langsung ditampilkan?
Array inisialisasi dengan 0?
Array inisialisasi hanya 2 elemen pertama?
7. Input output array
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Tempat pencarian data dapat berupa array dalam memori, bisa juga pada
file pada external storage.
12. Ilustrasi array 2 dimensi
26
2
10
21da 21db
-2
21dc
21dd
5
11
21de
6
7
21df
21e0
indeks
100
21e1
value
alamat
14. Searching
Pada suatu data seringkali dibutuhkan pembacaan kembali informasi
(retrieval information) dengan cara searching.
Searching adalah pencarian data dengan cara menelusuri data-data
tersebut.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
12
-4
indeks
21
value
29
Terdapat 6 buah data dalam array (dari indeks 0 s/d 5) dan terdapat 1
indeks array tambahan (indeks ke 6) yang belum berisi data (disebut
sentinel)
Array pada indeks ke 6 berguna untuk menjaga agar indeks data berada
pada indeks 0 s/d 5 saja. Bila pencarian data sudah mencapai array
indeks yang ke-6 maka berarti data TIDAK ADA, sedangkan jika
pencarian tidak mencapai indeks ke-6, maka data ADA.
Program :
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Program :
31
Contoh Data:
Misalnya data yang dicari 17
01
39
11
12
15
17
23
31
35
39
11
12
15
17
23
31
35
39
11
12
15
17
23
31
35
A=B=C
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
kunci data[low]
x( high low) low
data[ high] data[low]
Kasus :
Misal terdapat data sebagai berikut :
Kode
Judul Buku
Program :
Pengarang
025
James Wood
034
Mastering Delphi 6
Marcopolo
041
Professional C#
Simon Webe
056
Pure JavaScript v2
Michael Bolton
063
David Dunn
072
088
Gunner
Christian
Antonie
096
Gloria Virginia
Penyelesaian :
Kunci Pencarian ? 088
Low ? 0
High ? 7
Posisi = (088 - 025) / (096 - 025) * (7 - 0) + 0 = [6]
Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005
Kunci Pencarian ? 060
Low ? 0
Teknik Informatika
Universitas Muhammadiyah Ponorogo
High ? 7
Posisi = (060 025) / (096 025) * (7 0) + 0 = [3]
Kunci[3] < kunci pencarian, maka teruskan
Low = 3 + 1 = 4
High = 7
Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060.
Berarti tidak ada kunci 060.
32
33
22. Soal-soal
Cari tahu tentang cara penggunaan dan teknologi dari website-website
pencari (search engine) yang ada di Internet!
Cari tahu tentang Fibonacci Search!
Teknik Informatika
Universitas Muhammadiyah Ponorogo
int t=*a;
*a=*b;
*b=t;
SORTING ARRAY
34
1. Sorting
Pengurutan data dalam struktur data sangat penting untuk data yang
beripe data numerik ataupun karakter.
Pengurutan dapat dilakukan secara ascending (urut naik) dan
descending (urut turun)
Pengurutan (Sorting) adalah proses menyusun kembali data yang
sebelumnya telah disusun dengan suatu pola tertentu, sehingga tersusun
secara teratur menurut aturan tertentu.
Contoh:
Data Acak
: 5 6 8 1 3 25 10
Ascending
: 1 3 5 6 8 10 25
Descending
: 25 10 8 6 5 3 1
2. Metode Pengurutan Data
Pengurutan berdasarkan perbandingan (comparison-based sorting)
Bubble sort, exchange sort
Pengurutan berdasarkan prioritas (priority queue sorting method)
Selection sort, heap sort (menggunakan tree)
Pengurutan berdasarkan penyisipan dan penjagaan terurut (insert and
keep sorted method)
Insertion sort, tree sort
Pengurutan berdasarkan pembagian dan penguasaan (devide and
conquer method)
Quick sort, merge sort
Pengurutan berkurang menurun (diminishing increment sort method)
Shell sort (pengembangan insertion)
4. Bubble Sort
Metode sorting termudah
Diberi nama Bubble karena proses pengurutan secara berangsurangsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung
yang keluar dari sebuah gelas bersoda.
Bubble Sort mengurutkan data dengan cara membandingkan elemen
sekarang dengan elemen berikutnya.
Pengurutan Ascending :Jika elemen sekarang lebih besar dari elemen
berikutnya maka kedua elemen tersebut ditukar.
Pengurutan Descending: Jika elemen sekarang lebih kecil dari elemen
berikutnya, maka kedua elemen tersebut ditukar.
Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke
kiri atau kiri ke kanan, tergantung jenis pengurutannya, asc atau desc.
Ketika satu proses telah selesai, maka bubble sort akan mengulangi
proses, demikian seterusnya sampai dengan iterasi sebanyak n-1.
Kapan berhentinya? Bubble sort berhenti jika seluruh array telah
diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta
tercapai perurutan yang telah diinginkan.
3. Deklarasi Array
Deklarasikan:
int data[100];
int n; //untuk jumlah data
Fungsi untuk Tukar 2 Buah Data (by reference):
void tukar(int *a,int *b){
Teknik Informatika
Universitas Muhammadiyah Ponorogo
35
Teknik Informatika
Universitas Muhammadiyah Ponorogo
36
Versi 1
Versi 2
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
38
6. Selection Sort
Merupakan kombinasi antara sorting dan searching
39
Untuk setiap proses, akan dicari elemen-elemen yang belum diurutkan
yang memiliki nilai terkecil atau terbesar akan dipertukarkan ke posisi
yang tepat di dalam array.
Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil
dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran
kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks
kedua (data[1]).
Selama proses, pembandingan dan pengubahan hanya dilakukan pada
indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir
proses.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
7. Insertion Sort
Mirip dengan cara orang mengurutkan kartu, selembar demi selembar
kartu diambil dan disisipkan (insert) ke tempat yang seharusnya.
Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika
ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert)
diposisi yang seharusnya.
Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke
belakang
41
8. Perbandingan
Tabel Perbandingan Kecepatan Metode Pengurutan Data
Untuk data sejumlah 10.000 data pada komputer Pentium II 450 MHz
Heap Sort
10. Soal
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Quick Sort
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
2. Operasi Stack
Push : digunakan untuk menambah item pada stack pada tumpukan
paling atas
Pop : digunakan untuk mengambil item pada stack pada tumpukan
paling atas
Clear : digunakan untuk mengosongkan stack
IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah
kosong
IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah
penuh
Teknik Informatika
Universitas Muhammadiyah Ponorogo
42
Teknik Informatika
Universitas Muhammadiyah Ponorogo
43
di-increment sebelumnya.
Jika tidak, outputkan Penuh
Fungsi IsEmpty :
Untuk memeriksa apakah data Stack masih kosong?
Dengan cara memeriksa top of stack, jika masih -1 maka berarti data
Stack masih kosong!
Fungsi Pop :
Untuk mengambil data Stack yang terletak paling atas (data yang
ditunjuk oleh TOS).
Tampilkan terlebih dahulu nilai elemen teratas stack dengan mengakses
indeksnya sesuai dengan top of stacknya, baru dilakukan di-decrement
nilai top of stacknya sehingga jumlah elemen stack berkurang.
45
Fungsi Push :
Untuk memasukkan elemen ke data Stack. Data yang diinputkan selalu
menjadi elemen teratas Stack (yang ditunjuk oleh ToS)
Jika data belum penuh,
Tambah satu (increment) nilai top of stack lebih dahulu setiap kali
ada penambahan ke dalam array data Stack.
Isikan data baru ke stack berdasarkan indeks top of stack yang telah
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Fungsi Print :
Untuk menampilkan semua elemen-elemen data Stack
Dengan cara me-loop semua nilai array secara terbalik, karena kita 46
harus mengakses dari indeks array tertinggi terlebih dahulu baru ke
indeks yang lebih kecil!
5. Fungsi Peek
Digunakan untuk melihat top of stack
Teknik Informatika
Universitas Muhammadiyah Ponorogo
7. Contoh lain
a+b*c-d
Stack (kosong) dan Postfik (kosong)
Scan a
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Postfik: a
Scan +
Stack: +
Scan b
Postfik: ab
Scan *, karena ToS (+) < *, maka add ke Stack
Stack: +*
Scan c
48
Postfik: abc
Scan , karena * > -, maka pop Stack, dan add ke Postfik
Stack: +
Postfik: abc*
Karena + >= -, maka pop Stack, dan add ke Postfik, karena Stack
kosong, maka push ke stack
Stack: Postfik: abc*+
Scan d
Postfik: abc*+d
Karena sudah habis, push ToS stack ke Posfix
Postfix: abc*+d8. Postfix Evaluator
Scan Postfix string dari kiri kekanan.
Siapkan sebuah stack kosong.
Jika soal adalah operand, tambahkan ke stack. Jika operator, maka pasti
akan ada minimal 2 operand pada stack
Pop dua kali stack, pop pertama disimpan dalam y, dan pop kedua
ke dalam x. Lalu evaluasi x <operator> y. Simpan hasilnya dan push
ke dalam stack lagi.
Ulangi hingga seluruh soal discan.
Jika sudah semua, elemen terakhir pada stack adalah hasilnya.
Jika lebih dari satu elemen, berarti error!
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
50
Enqueue :
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen51
selalu ditambahkan di elemen paling belakang
Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail terlebih dahulu
IsEmpty()
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala
antrian (elemen pertama dalam antrian) yang tidak akan berubahubah
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang, yaitu menggunakan nilai Tail
Dequeue() :
Digunakan untuk menghapus elemen terdepan/pertama (head) dari
Antrian
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi
Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping
Fungis IsFull :
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
11. Soal
Tambahkanlah function untuk mencari suatu elemen dalam queue &
stack
Tambahkan function untuk mengedit suatu elemen dalam queue & stack
Carilah nilai total, rata-rata, terbesar dan terkecil dari elemen-elemen
queue dalam function tersendiri
Clear() :
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail
dan Head = -1
52
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1
sehingga elemen-elemen Antrian tidak lagi terbaca
Tampil()
Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
1. Pointer
53
Pointer adalah suatu variabel penunjuk, berisi nilai yang menunjuk
alamat suatu lokasi memori tertentu.
Jadi pointer tidak berisi nilai data, melainkan berisi suatu alamat
memori atau null jika tidak berisi data.
Pointer yang tidak diinisialisasi disebut dangling pointer
Lokasi memori tersebut bisa diwakili sebuah variabel atau dapat juga
berupa nilai alamat memori secara langsung.
54
2. Ilustrasi Pointer
5. Operator Pointer
3. Contoh Program
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
6. Aturan
variabel pointer dapat dideklarasikan dengan tipe data apapun.
Pendeklarasian variabel pointer dengan tipe data tertentu digunakan 55
untuk menyimpan alamat memori yang berisi data sesuai dengan tipe
data yang dideklarasikan, bukan untuk berisi nilai bertipe data tertentu.
Tipe data digunakan sebagai lebar data untuk alokasi memori (misal
char berarti lebar datanya 1 byte, dst)
jika suatu variabel pointer dideklarasikan bertipe float, berarti
variabel pointer tersebut hanya bisa digunakan untuk menunjuk
alamat memori yang berisi nilai bertipe float juga.
7. Contoh yang salah
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Operasi aritmatika :
Pada pointer dapat dilakukan operasi aritmatika yang akan menunjuk58
suatu alamat memori baru.
Hanya nilai integer saja yang bisa dioperasikan pada variabel pointer.
Biasanya hanya operasi penambahan/pengurangan saja.
Misal pointer X bertipe int (2 bytes), maka X+1 akan menunjuk pada
alamat memori sekarang (mis. 1000) ditambah sizeof(X), yaitu 2, jadi
1002.
Lihat contoh
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Pada array, pointer hanya perlu menunjuk pada alamat elemen pertama
saja karena letak alamat array sudah berurutan pada memori.
Variabel pointer hanya perlu increment
Lihat contoh-contoh!
59
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Lihat Contoh!
65
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
21. Soal-soal
Buatlah function untuk menghitung faktorial!
Buatlah function untuk menghitung pangkat (XY)!
Buatlah function untuk mengetahui apakah suatu bilangan adalah
bilangan prima atau bukan, kemudian buatlah function untuk
menampilkan semua bilangan prima dari suatu range data tertentu dan
gunakanlah function pemeriksa bilangan prima yang sudah dibuat
sebelumnya!
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Setiap node pada linked list mempunyai field yang berisi pointer ke
node berikutnya, dan juga memiliki field yang berisi data.
Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai68
kondisi berhenti pada saat pembacaan isi linked list.
5. Pembuatan Single Linked List non Circular
Deklarasi Node
typedef struct TNode{
int data;
TNode *next;
};
Penjelasan:
Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data
bertipe integer dan field next yang bertipe pointer dari TNode
Setelah pembuatan struct, buat variabel head yang bertipe pointer dari
TNode yang berguna sebagai kepala linked list.
Digunakan keyword new yang berarti mempersiapkan sebuah node baru
berserta alokasi memorinya, kemudian node tersebut diisi data dan
pointer nextnya ditunjuk ke NULL.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
6. Cara lain alokasi pointer
Menggunakan alokasi memori secara manual
Menggunakan header stdlib.h atau malloc.h
Menggunakan fungsi:
<pointer type> *malloc(int size);
Teknik Informatika
Universitas Muhammadiyah Ponorogo
TNode *head;
69
70
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
bantu->next = baru;
}
printf("Data masuk\n);
}
71
72
Teknik Informatika
Universitas Muhammadiyah Ponorogo
73
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
}
9. SLLNC dengan HEAD & TAIL
Dibutuhkan dua buah variabel pointer: head dan tail
Head akan selalu menunjuk pada node pertama, sedangkan tail akan
selalu menunjuk pada node terakhir
76
Inisialisasi LinkedList
TNode *head, *tail;
Fungsi Inisialisasi LinkedList
void init(){
head = NULL;
tail = NULL;
}
Function untuk mengetahui kosong tidaknya LinkedList
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
Pengkaitan node baru ke linked list di depan
Penambahan data baru di depan akan selalu menjadi head.
void insertDepan(int databaru)
{
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1)
{
head=tail=baru;
tail->next=NULL;
}
else
Teknik Informatika
Universitas Muhammadiyah Ponorogo
{
baru->next = head;
head = baru;
}
printf(Data masuk\n);
else {
tail->next = baru;
tail=baru;
}
printf("Data masuk\n);
77
78
Kelebihan dari Single Linked List dengan Head & Tail adalah pada
penambahan data di belakang, hanya dibutuhkan tail yang mengikat
node baru saja tanpa harus menggunakan perulangan pointer bantu.
Function untuk menampilkan isi linked list:
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
printf(%d\n,bantu->data);
bantu=bantu->next;
}
printf(\n);
} else printf(Masih kosong\n);
}
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
79
void hapusBelakang(){
TNode *bantu,*hapus;
int d;
if (isEmpty()==0){
bantu = head;
if(head!=tail){
while(bantu->next!=tail){
bantu = bantu->next;
}
hapus = tail;
tail=bantu;
d = hapus->data;
delete hapus;
tail->next = NULL;
}else {
d = tail->data;
head=tail=NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
80
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
81
2. Ilustrasi SLLC
Setiap node pada linked list mempunyai field yang berisi pointer ke
node berikutnya, dan juga memiliki field yang berisi data.
Pada akhir linked list, node terakhir akan menunjuk ke node terdepan
sehingga linked list tersebut berputar.
3. Deklarasi dan node baru SLLC
Deklarasi node
Dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru
Teknik Informatika
Universitas Muhammadiyah Ponorogo
82
83
Teknik Informatika
Universitas Muhammadiyah Ponorogo
84
Teknik Informatika
Universitas Muhammadiyah Ponorogo
86
Teknik Informatika
Universitas Muhammadiyah Ponorogo
87
bantu->next = head;
delete hapus;
}
printf(%d terhapus\n,d);
} else printf("Masih kosong\n);
}
Teknik Informatika
Universitas Muhammadiyah Ponorogo
88
Inisialisasi SLLC
TNode *head, *tail;
Fungsi Inisialisasi SLLC
void init(){
head = NULL;
tail = NULL;
}
Function untuk mengetahui kosong tidaknya SLLC
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
Pengkaitan node baru ke linked list di depan
Penambahan data baru di depan akan selalu menjadi head.
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else {
baru->next = head;
head = baru;
tail->next = head;
}
printf("Data masuk\n);
}
Teknik Informatika
Universitas Muhammadiyah Ponorogo
89
Teknik Informatika
Universitas Muhammadiyah Ponorogo
90
Teknik Informatika
Universitas Muhammadiyah Ponorogo
91
Teknik Informatika
Universitas Muhammadiyah Ponorogo
93
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
94
2. Ilustrasi DLLNC
Setiap node pada linked list mempunyai field yang berisi data dan
pointer ke node berikutnya & ke node sebelumnya
Untuk pembentukan node baru, mulanya pointer next dan prev akan
menunjuk ke nilai NULL.
Selanjutnya pointer prev akan menunjuk ke node sebelumnya, dan
pointer next akan menunjuk ke node selanjutnya pada list.
3. Deklarasi dan node baru DLLNC
Deklarasi node
Dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
Tnode *prev;
};
Pembentukan node baru
Teknik Informatika
Universitas Muhammadiyah Ponorogo
}
else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next = baru;
baru->prev = bantu;
}
printf("Data masuk\n);
97
98
head = NULL;
99
void hapusDepan (){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
d = hapus->data;
head = head->next;
head->prev = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
printf(%d terhapus\n,d);
} else printf(Masih kosong\n);
}
Function untuk menghapus node terbelakang
void hapusBelakang(){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
while(hapus->next!=NULL){
hapus = hapus->next;
}
d = hapus->data;
hapus->prev->next = NULL;
delete hapus;
} else {
d = head->data;
Teknik Informatika
Universitas Muhammadiyah Ponorogo
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
100
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Inisialisasi DLLNC
TNode *head, *tail;
Fungsi Inisialisasi DLLNC
void init(){
head = NULL;
tail = NULL;
}
Function untuk mengetahui kosong tidaknya DLLNC
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
Tambah Depan
void insertDepan (int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
tail=head;
head->next = NULL;
head->prev = NULL;
tail->prev = NULL;
tail->next = NULL;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
}
cout<<"Data masuk\n";
}
Teknik Informatika
Universitas Muhammadiyah Ponorogo
101
Teknik Informatika
Universitas Muhammadiyah Ponorogo
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
Function untuk menampilkan isi linked list
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=tail->next){
cout<<bantu->data<<" ";
bantu=bantu->next;
}
cout<<endl;
} else cout<<"Masih kosong\n";
}
103
}
Pointer hapus tidak perlu di loop untuk mencari node terakhir. Pointer
hapus hanya perlu menunjuk pada pointer tail saja.
104
Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya
dengan menggunakan elemen prev, maka pointer prev hanya perlu diset
agar menunjuk ke NULL. Lalu pointer hapus didelete.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
2. Ilustrasi DLLC
Setiap node pada linked list mempunyai field yang berisi data dan
pointer ke node berikutnya & ke node sebelumnya
Untuk pembentukan node baru, mulanya pointer next dan prev akan
menunjuk ke dirinya sendiri.
Jika sudah lebih dari satu node, maka pointer prev akan menunjuk ke
node sebelumnya, dan pointer next akan menunjuk ke node sesudahnya.
3. Deklarasi dan node baru DLLC
Deklarasi node
Dibuat dari struct berikut ini:
typedef struct TNode{
int data;
Teknik Informatika
Universitas Muhammadiyah Ponorogo
TNode *next;
Tnode *prev;
};
106
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru
berserta alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
4. DLLC dengan HEAD
Dibutuhkan satu buah variabel pointer: head
Head akan selalu menunjuk pada node pertama
Teknik Informatika
Universitas Muhammadiyah Ponorogo
108
cout<<endl;
} else cout<<"Masih kosong\n";
d = hapus->data;
bantu->next = head;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
109
void hapusDepan (){
TNode *hapus,*bantu;
int d;
if (isEmpty()==0){
if(head->next != head){
hapus = head;
d = hapus->data;
bantu = head->prev;
head = head->next;
bantu->next = head;
head->prev = bantu;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
Function untuk menghapus node terbelakang
void hapusBelakang(){
TNode *hapus,*bantu;
int d;
if (isEmpty()==0){
if(head->next != head){
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
Teknik Informatika
Universitas Muhammadiyah Ponorogo
110
}
Diperlukan pointer bantu yang mengikuti pointer hapus yang berguna
untuk menunjuk ke node sebelum terakhir.
Kemudian pointer hapus ditunjukkan ke node setelah pointer bantu,
kemudian hapus pointer hapus dengan perintah delete.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
tail->next = tail;
tail->prev = tail;
}
}
else {
5. DLLC dengan HEAD dan TAIL
Dibutuhkan dua buah variabel pointer: head dan tail
Head akan selalu menunjuk pada node pertama, sedangkan tail akan 111
selalu menunjuk pada node terakhir.
baru->next = head;
head->prev = baru;
head = baru;
head->prev = tail;
tail->next = head;
112
}
cout<<"Data masuk\n";
}
Inisialisasi DLLNC
TNode *head, *tail;
Fungsi Inisialisasi DLLNC
void init(){
head = NULL;
tail = NULL;
}
Function untuk mengetahui kosong tidaknya DLLNC
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
void insertDepan (int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
Teknik Informatika
Universitas Muhammadiyah Ponorogo
cout<<"Data masuk\n";
113
114
Pointer hapus tidak perlu di loop untuk mencari node terakhir. Pointer
hapus hanya perlu menunjuk pada pointer tail saja.
Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya
dengan menggunakan elemen prev ke node sebelumnya. Kemudian
pointer tail akan berpindah ke node sebelumnya.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
115
RECURSIVE FUNCTION
1. Contoh fungsi yang didefinisikan secara rekursif
f(0) = 3
f(n + 1) = 2f(n) + 3
Maka :
f(0) = 3
f(1) = 2f(0) + 3 = 23 + 3 = 9
f(2) = 2f(1) + 3 = 29 + 3 = 21
f(3) = 2f(2) + 3 = 221 + 3 = 45
f(4) = 2f(3) + 3 = 245 + 3 = 93
2. Fungsi Rekursif
Fungsi yang berisi definisi dirinya sendiri
Fungsi yang memanggil dirinya sendiri
Prosesnya terjadi secara berulang-ulang
Yang perlu diperhatikan adalah stopping role
3. Plus Minus
+Karena program lebih singkat dan ada beberapa kasus yang lebih
mudah menggunakan fungsi yang rekursif
-Memakan memori yang lebih besar, karena setiap kali bagian dirinya
dipanggil, dibutuhkan sejumlah ruang memori tambahan.
-Mengorbankan efisiensi dan kecepatan
-Problem: rekursi seringkali tidak bisa berhenti sehingga memori
akan terpakai habis dan program bisa hang.
-Program menjadi sulit dibaca
Saran: jika memang bisa diselesaikan dengan iteratif, gunakanlah
iteratif!
4. Bentuk Umum Fungsi Rekursif
return_data_type function_name(parameter_list){
...
function_name(...);
...
}
Teknik Informatika
Universitas Muhammadiyah Ponorogo
116
5. Problems
Faktorial
117
5! = 5 x 4 x 3 x 2 x 1
4! = 4 x 3 x 2 x 1
Berarti 5! = 5 x 4!
Metode Iteratif
Salah satu cara untuk menghitung adalah dengan menggunakan loop,
yang mengalikan masing-masing bilangan dengan hasil sebelumnya.
Penyelesaian dengan cara ini dinamakan iteratif, yang mana secara
umum dapat didefinisikan sebagai berikut:
n! = (n)(n-1)(n-2) (1)
6. Program Iteratif
#include <stdio.h>
int fact_it (int n)
{
int i,fak;
/******************************************************
* Menghitung sebuah faktorial dengan proses looping *
******************************************************/
temp = 1;
for (i=1; i<=n; i++)
fak = fak * i;
return (fak);
}
void main()
{
int fac;
printf("Masukkan berapa faktorial : ");
scanf("%d",&fac);
printf("Hasil faktorial dari adalah : %d\n", fact_it(fac));
}
7. Faktorial Rekursif
Metode Rekursif
Cara lain untuk menyelesaikan permasalahan di atas adalah dengan cara
Teknik Informatika
Universitas Muhammadiyah Ponorogo
}
void main()
{
int fac;
printf("Masukkan berapa faktorial : ");
scanf("%d",&fac);
printf("Hasil faktorial dari adalah : %d\n", fact_rec(fac));
}
119
9. Fibonacci
Sepasang kelinci yang baru lahir (jantan dan betina) ditempatkan pada
suatu pembiakan.
Setelah dua bulan pasangn kelinci tersebut
melahirkan sepasang kelinci kembar (jantan dan betina). Setiap
pasangan kelinci yang lahir juga akan melahirkan sepasang kelinci juga
setiap 2 bulan. Berapa pasangan kelinci yang ada pada akhir bulan ke12?
8. Program Rekursif
#include <stdio.h>
int fact_rec(int n)
{
/*********************************************************
*
Menghitung sebuah faktorial secara rekursif
***********************************************************/
if (n < 0)
return 0;
else if (n == 0)
return 1;
else if (n == 1)
return 1;
else
return n * fact_rec(n-1);
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
else{
return result[n];
for(int i=2;i<=n;i++){
fibo = f1 + f2;
f1 = f2;
f2 = fibo;
}
}
return fibo;
}
11. Fibo Rekursif
int fibo_r (int n){
if(n==1) return 1;
else if(n==2) return 1;
else return fibo_r(n-1) + fibo_r(n-2);
}
12. Bilangan Fibonacci
Untuk N = 40, FN melakukan lebih dari 300 juta pemanggilan rekursif.
F40 = 102.334.155
Berat!!!
Aturan: Jangan membiarkan ada duplikasi proses yang mengerjakan
input yang sama pada pemanggilan rekursif yang berbeda.
Ide: simpan nilai fibonacci yang sudah dihitung dalam sebuah array
13. Dynamic Programming
Dynamic Programming menyelesaikan sub-permasalahan dengan
menyimpan hasil sebelumnya.
int fibo2 (int n){
if (n <= 1) return n;
int result[10];
result[0] = 1;
result[1] = 1;
for (int ii = 2; ii <= n; ii++) {
result[ii] = result[ii - 2]
+ result[ii - 1];
}
Teknik Informatika
Universitas Muhammadiyah Ponorogo
120
121
m>n
m<n
m>n
m<n
m>n
m<n
m>n
m=0
Teknik Informatika
Universitas Muhammadiyah Ponorogo
122
Algoritma:
Jika n==1, pindahkan pringan dari A ke C
123
Jika tidak:
Pindahkan n-1 piringan dari A ke B menggunakan C sebagai
tampungan
Pindahkan n-1 piringan dari B ke C menggunakan A sebagai
tampungan
Program :
#include <stdio.h>
void towers(int n, char awal, char akhir, char antara)
{
if(n==1)
printf("Pindahkan piringan 1 dari %c ke %c\n", awal,akhir);
else{
towers(n-1, awal, antara, akhir);
printf("Pindahkan piringan %d dari %c ke %c\n", n, awal, akhir);
towers(n-1, antara, akhir, awal);
}
}
void main()
{
int n;
printf("Berapa piringan ? ");scanf("%d", &n);
towers(n, 'A', 'C', 'B');
}
19. Capture Tower of Hanoi
Teknik Informatika
Universitas Muhammadiyah Ponorogo
22. Pemangkatan
Teknik Informatika
Universitas Muhammadiyah Ponorogo
125
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
TREE MANIPULATION
4. Tree Example
1. Tree Manipulation
126
Kumpulan node yang saling terhubung satu sama lain dalam suatu
kesatuan yang membentuk layakya struktur sebuah pohon.
Struktur pohon adalah suatu cara merepresentasikan suatu struktur
hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun
pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke
bawah.
Suatu struktur data yang tidak linier yang menggambarkan hubungan
yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.
Tree Statik : isi node-nodenya tetap karena bentuk pohonnya sudah
ditentukan.
Tree Dinamik : isi nodenya berubah-ubah karena proses penambahan
(insert) dan penghapusan (delete)
127
2. Node Root
Node root dalam sebuah tree adalah suatu node yang memiliki hiarki
tertinggi dan dapat juga memiliki node-node anak. Semua node dapat
ditelusuri dari node root tersebut.
Node root adalah node khusus yang tercipta pertama kalinya.
Node-node lain di bawah node root saling terhubung satu sama lain dan
disebut subtree
3. Implementasi Tree
Contoh penggunaan struktur pohon :
Silsilah keluarga
Parse Tree (pada compiler)
Struktur File
Pertandingan
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
5. Representasi Tree
7. Terminologi Tree
128
129
8. Sebuah Tree
6. Latihan
9. Jenis Tree
Binary Tree
Suatu tree dengan syarat bahwa tiap node hanya boleh memiliki
maksimal dua subtree dan kedua subtree tersebut harus terpisah.
Tiap node dalam binary tree hanya boleh memiliki paling banyak
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
dua child.
130
131
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
133
Insert: menambah node ke dalam Tree secara rekursif. Jika data yang
akan dimasukkan lebih besar daripada elemen root, maka akan
diletakkan di node sebelah kanan, sebaliknya jika lebih kecil maka akan
diletakkan di node sebelah kiri. Untuk data pertama akan menjadi
elemen root.
Find: mencari node di dalam Tree secara rekursif sampai node tersebut
ditemukan dengan menggunakan variable bantuan ketemu. Syaratnya
adalah tree tidak boleh kosong.
Traverse: yaitu operasi kunjungan terhadap node-node dalam pohon
dimana masing-masing node akan dikunjungi sekali.
Count: menghitung jumlah node dalam Tree
Height : mengetahui kedalaman sebuah Tree
Find Min dan Find Max : mencari nilai terkecil dan terbesar pada Tree
Child : mengetahui anak dari sebuah node (jika punya)
13. Jenis Transverse
PreOrder: cetak node yang dikunjungi, kunjungi left, kunjungi right
InOrder: kunjungi left, cetak node yang dikunjungi, kunjungi right
PostOrder: kunjungi left, kunjungi right, cetak node yang dikunjungi
Teknik Informatika
Universitas Muhammadiyah Ponorogo
baru->data = databaru;
baru->left = NULL;
baru->right = NULL;
(*root) = baru;
(*root)->left = NULL;
(*root)->right = NULL;
}
else if(databaru < (*root)->data)
tambah(&(*root)->left,databaru);
else if(databaru > (*root)->data)
tambah(&(*root)->right,databaru);
else if(databaru == (*root)->data)
printf("Data sudah ada!");
134
135
}
16. Ilustrasi Kunjungan
Kunjungan LevelOrder :
Hasil kunjungan: ABCDEFGHI
Algoritma:
Siapkan antrian yang kosong
Inisialisasi: masukkan root ke dalam antrian
Iterasi: selama Antrian tidak kosong, lakukan:
Kunjungi elemen pada antrian
Masukkan node->kiri dan node->kanan ke dalam antrian asal
node tersebut tidak NULL.
Keluarkan elemen pertama pada antrian
17. Level Order
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
136
Pencarian dilakukan secara rekursif, dimulai dari node root, jika data
yang dicari lebih kecil daripada data node root, maka pencarian
137
dilakukan di sub node sebelah kiri, sedangkan jika data yang dicari lebih
besar daripada data node root, maka pencarian dilakukan di sub node
sebelah kanan, jika data yang dicari sama dengan data suatu node berarti
kembalikan node tersebut dan berarti data ditemukan.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
138
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Pada graph berarah, simpul v disebut adjacent dengan simpul w bila ada
busur dari w ke v.
140
Teknik Informatika
Universitas Muhammadiyah Ponorogo
141
143
Define struct untuk sebuah simpul yang dapat digunakan sebagai vertex
maupun edge.
typedef struct tipeS {
tipeS *Left;
int INFO;
tipeS *Right;
};
tipeS *FIRST, *PVertex, *PEdge;
Contoh : untuk vertex A, memiliki 2 edge yang terhubung yaitu e1 dan
e2.
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo
145
ISI BUKU
Struktur Data........................................................... 1
Pengantar Tipe Data, Obyek Data & Struktur Data . 12
Searching Array....................................................... 22
Sorting Array .......................................................... 34
Array Stack Dan Queue .......................................... 42
Pointer Dan Function .............................................. 53
Single Linked List Non Circular................................. 67
Single Linked List Circular........................................ 82
Hasil :
Teknik Informatika
Universitas Muhammadiyah Ponorogo
146
Teknik Informatika
Universitas Muhammadiyah Ponorogo
Teknik Informatika
Universitas Muhammadiyah Ponorogo