Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Bina Sarana Informatika

Presentasi serupa


Presentasi berjudul: "Bina Sarana Informatika"— Transcript presentasi:

1 Bina Sarana Informatika
Tujuan Mata Kuliah Mempelajari dasar-dasar ilmu komputer agar dapat melakukan Perancangan dan pemilihan struktur data yang sesuai, implementasi, dan melakukan analisis secara umum pada algoritme yang dibuat. Tentunya, melatih diri dalam ‘programming’ 3. Mahasiswa juga mampu membuat program dengan meng-gunakan salah satu bahasa pemrograman generasi ke-3 (C/C++/Pascal) untuk membuat berbagai macam struktur data (pointer, linked list, sorting, dan searching) yang baik, efisien, dan cepat. 22 September 2018 Bina Sarana Informatika

2 Bina Sarana Informatika
Mengapa data itu disimpan? Supaya bisa diakses/diproses di kemudian waktu Mengapa dalam penyimpanan data diperlukan sebuah struktur ? Supaya lebih mudah/efisien dalam pengaksesan/pemrosesan data tersebut 22 September 2018 Bina Sarana Informatika

3 Bina Sarana Informatika
Mengapa kuliah ini penting ? Moral story: Pemilihan struktur data yang tepat, dapat membuat program lebih terstruktur (elegan) dan efesien Tentunya, penggunaan algoritme yang baik dapat membuat program lebih efesien dan mungkin lebih elegan Contoh Aplikasi: Mencari jarak terpendek antara dua kota - Menggunakan struktur data Graph Sistem basis data (Oracle, SQL Server, dll) - Menggunakan struktur data B+Tree, Hash tables Menghitung ekspresi: (5 + 2) * 7 - Menggunakan struktur data Stack/Tree 22 September 2018 Bina Sarana Informatika

4 Bina Sarana Informatika
Mengapa perlu belajar membuat struktur data ? 􀂄 Supaya kita dapat mengetahui struktur data yang tepat, tentunya kita harus mengetahui kelebihan dan kekurangan dari masing-masing struktur data. 􀂄 Cara yang terbaik untuk benar-benar dapat memahami masing-masing struktur data adalah membuatnya. Topik-Topik yang Dibahas 􀂄 Pengantar Struktur Data Tipe Data Abstrak (Abstract Data Type - ADT) 􀂄 Pelacakan (searching) 􀂄 Pengurutan (sorting) 􀂄 Model data linear: Array, Linked List 􀂄 Stack, Queue 􀂄 Model data hirarkis: Tree 􀂄 Graph 􀂄 Hash Tables 22 September 2018 Bina Sarana Informatika

5 Bina Sarana Informatika
Peraturan Kuliah 􀂄 Persentasi kehadiran - Dihimbau pada perkuliahan supaya HP di Nonaktifkan Kejujuran Akademis 􀂄 Kecurangan - Setiap bentuk kecurangan akan mendapatkan sanksi dengan tegas sesuai dengan peraturan akademis. • Kecurangan saat ujian (menyontek jawaban teman atau bekerjasama) • Kecurangan dalam tugas (menyalin & memodifikasi hasil pekerjaan yang lain) • Kecurangan dalam pencatatan kehadiran (titip tanda tangan) - Sanksi akan dikenakan baik pada si pelaku maupun yang memberi kesempatan. 22 September 2018 Bina Sarana Informatika

6 Pengantar Struktur Data
Fakta, hasil pengukuran atau statistic, untuk digunakan sebagai dasar perhitungan, atau untuk disajikan sebagai informasi. Struktur Pengaturan atau hubungan antar elemen dalam suatu sistem. Nilai data (Data Values) Suatu data yang dipandang sebagai kesatuan tunggal (single entity) Tipe Data Kombinasi antara : Himpunan nilai data (Set of Value) Himpunan operasi terhadap nilai nilai data tersebut (Set of operation) 22 September 2018 Bina Sarana Informatika

7 Pengantar Struktur Data
Tipe Data dapat dikelompokkan menjadi 2 kelas : Tipe Data Atomik Tipe Data Berstruktur / struktur Data Data Atomik Suatu data yang dipandang sebagai satu kesatuan tunggal dan tidak dapat dipecah-pecah lagi (non decomposable entity) Contoh : Integer, Char, dll. Struktur Data Tipe data yang nilai-nilainya : Dapat didekomposisi menjadi satu atau beberapa tipe berstruktur atau tipe atomic. Menyertakan suatu himpunan asosiasi atau relationship antara elemen-elemennya. 22 September 2018 Bina Sarana Informatika

8 KONSEP DASAR Struktur Data + Algoritma Program 22 September 2018
Bina Sarana Informatika

9 Bina Sarana Informatika
TIPE DATA ABSTRAKSI ( ADT ) Tipe data abstrak Tipe data yang ada sebagai hasil dari imajinasi Tipe data virtual Tipe data yang ada dalam virtual processor, misalnya dalam bahasa pemrograman. Tipe data physical Tipe data yang ada secara physic / nyata di dalam main processor. Tipe data native Tipe data yang tersedia pada bahasa pemrograman 22 September 2018 Bina Sarana Informatika

10 Bina Sarana Informatika
TIPE DATA ABSTRAK Karakteristik Modular Penyembunyian Informasi ( Information hiding ) Keuntungan Implementation Independence (kebebasan pengimplementasian) Perlindungan Data Integrasi Penyederhanaan Masalah (Simplicity) Langkah langkah menerjemahkan TIPE DATA ABSTRAK --> VIRTUAL 22 September 2018 Bina Sarana Informatika

11 Bina Sarana Informatika
TIPE DATA ABSTRAK Langkah langkah menerjemahkan TIPE DATA ABSTRAK --> VIRTUAL Pilih bahasa pemrograman yang akan digunakan, Misalnya : Pascal, C,…. Dll. Pilih cara merepresentasikan datanya, Misal : Array, Record, set…dll. Tulis program untuk mengimplementasikan program yang telah dijelaskan dalam tipe data abstrak. 22 September 2018 Bina Sarana Informatika

12 Bina Sarana Informatika
Tipe Data dan Variabel - Suatu identifier harus diberi nama yang unik dan memiliki tipe/jenis data yang dapat diterima dan dioperasikan olehnya. - Identifier dibagi menjadi 2 jenis, yaitu: 1. Konstanta Konstanta adalah identifier yang nilainya tetap selama program berjalan (dieksekusi). Cara untuk mengubah nilai konstanta adalah hanya melalui source code saja. 2. Variabel Variabel adalah identifier yang nilainya dapat diubah selama program berjalan (dieksekusi), biasanya melalui inputan atau operasi dinamis. 22 September 2018 Bina Sarana Informatika

13 Bina Sarana Informatika
Tipe Data dan Variabel - Tipe data adalah jenis data yang dapat digunakan di dalam komputer. Pada banyak bahasa pemrograman pada umumnya, dikenal tipe data yang rata-rata hampir sama. Deklarasi Tipe Data Variabel Deklarasi tipe data variabel di C: <tipe data> <nama_variabel>; Contoh : int umur; 22 September 2018 Bina Sarana Informatika

14 Bina Sarana Informatika
Tipe Data dan Variabel Deklarasi Tipe Data Konstanta Deklarasi konstanta di C: #define <nama_konstanta> <nilai> Tanda # disebut sebagai Prepocessor Directive, yaitu instruksi yang dilakukan sebelum eksekusi program utama dilakukan. 22 September 2018 Bina Sarana Informatika

15 Bina Sarana Informatika
Tipe Data dan Variabel Escape Character 22 September 2018 Bina Sarana Informatika

16 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER 1. Tidak boleh sama dengan nama keyword reserved, function, dan harus unik. 2. Maksimum 32 karakter. Bila lebih, maka karakter selebihnya tidak akan diperhatikan oleh komputer. 3. Case sensitive : membedakan huruf besar dan kecil 4. Karakter pertama harus huruf atau underscore (_), selebihnya boleh angka. 5. Tidak boleh mengandung spasi / blank 22 September 2018 Bina Sarana Informatika

17 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Operator 22 September 2018 Bina Sarana Informatika

18 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Operator Kondisional Tabel Operator Logika 22 September 2018 Bina Sarana Informatika

19 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Beberapa ungkapan: - X / Y berarti X dibagi Y - X = 10 berarti X diisi nilainya dengan 10 - Y = Y + 1 berarti nilai Y diisi dengan nilai Y sebelumnya ditambah 1 - Y = X berarti nilai Y diisi dengan nilai X - X += Y berarti akan sama dengan X = X + Y - X /= Y berarti akan sama dengan X = X / Y 22 September 2018 Bina Sarana Informatika

20 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER OUTPUT di C/C++ - Untuk menampilkan sesuatu ke layar, seperti printf() atau puts() atau putc(), kita membutuhkan header file stdio.h - Pada C++ dapat pula digunakan perintah cout<<, yang menggunakan file header iostream.h Contoh di C: #include <stdio.h> void main(){ char nama[50] = “anton”; printf(“Hallo saya bernama %s, saya sedang belajar C!”,nama); } 22 September 2018 Bina Sarana Informatika

21 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER OUTPUT di C/C++ Contoh di C++: #include <iostream.h> void main(){ char nama[20] = "anton"; cout<<"Hallo, saya bernama "<<nama<<” saya sedang belajar C++"<<end; } 22 September 2018 Bina Sarana Informatika

22 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER 22 September 2018 Bina Sarana Informatika

23 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER INPUT DI C/C++ Memasukkan data terformat berarti data yang diterima akan diatur bentuk dan lebarnya dengan kode-kode format dengan menggunakan fungsi scanf(). 22 September 2018 Bina Sarana Informatika

24 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Fungsi scanf() menggunakan pengiriman nilai secara acuan, yang dalam bahasa C pengiriman secara acuan dilakukan dengan pointer, oleh karena itu variabel-variabel yang dipakai harus berupa variabel pointer (diawali dengan “&”) Memasukkan Data dengan cin Obyek cin (baca C in) dapat dipakai untuk membaca data dari standard input (keyboard), untuk memekai obyek ini dibutuhkan header file iostream.h (#include <iostream.h>). 22 September 2018 Bina Sarana Informatika

25 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Contoh: #include <iostream.h> #include <iomanip.h> void main() { int p, l, Luas; cout << “Panjang = “; cin >> p; cout << “Lebar = “; cin >> l; Luas = p * l; cout << “Luas Segi Empat = “ << Luas << endl; } Hasilnya : Panjang = 15 Lebar = 25 Luas Segi Empat = 375 22 September 2018 Bina Sarana Informatika

26 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Sintaks umum IF sederhana: if (<kondisi>) <statement_jika_benar>; Contoh: x = 100; Y = 10; if (X > Y) { printf("X lebih besar dari Y"); } 22 September 2018 Bina Sarana Informatika

27 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Sintaks umum IF dengan ELSE: if (<kondisi>) <statement_jika_benar>; else <statement_jika_salah>; Contoh: x = 100; y = 10; if (x > y) { printf (“%d lebih besar dari %d”,x,y); } else printf (“%d tidak lebih besar dari %d,x,y); 22 September 2018 Bina Sarana Informatika

28 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Struktur while() { ... } Karakteristik while() { ... } adalah: Dilakukan pengecekan kondisi terlebih dahulu sebelum dilakukan perulangan. Jika kondisi yang dicek bernilai benar (true) maka perulangan akan dilakukan. Blok statement tidak harus ada. Struktur tanpa statement akan tetap dilakukan selama kondisi masih true. 22 September 2018 Bina Sarana Informatika

29 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Struktur while() { ... } Bentuk umum: <inisialisasi>; while (<kondisi>) { <pernyataan yang akan dijalankan> <perubahan kondisi> } Contoh : i=1; while (i <= 5) { cout << i << endl; i++; } 22 September 2018 Bina Sarana Informatika

30 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Struktur do ... while() Karakteristik do ... while() adalah: Perulangan akan dilakukan minimal 1x terlebih dahulu, kemudian baru dilakukan pengecekan terhadap kondisi, jika kondisi benar maka perulangan masih akan tetap dilakukan. Perulangan dengan do...while() akan dilakukan sampai kondisi false. 22 September 2018 Bina Sarana Informatika

31 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Struktur do ... while() Bentuk umum: <inisialisasi> do { <pernyataan yang akan dijalankan> <perubahan kondisi> } while (<kondisi>) Contoh: i = 1; do { cout << i << endl; i++; }while(i <= 5); 22 September 2018 Bina Sarana Informatika

32 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Struktur For() Karakteristik: Digunakan untuk perulangan yang batasnya sudah diketahui dengan jelas, misalnya dari 1 sampai 10. Memerlukan 2 buah variabel awal dan akhir perulangan. Nilai variabel penghitung akan secara otomatis bertambah atau berkurang tiap kali sebuah pengulangan dilaksanakan 22 September 2018 Bina Sarana Informatika

33 Bina Sarana Informatika
ATURAN PENULISAN IDENTIFIER Struktur For() Bentuk umum: for (<nilai_awal>; <kondisi>; <penambahan/penurunan>) { <pernyataan yang akan dijalankan> } Contoh : for(i = 3; i <= 7; i++) { cout << "Indonesia Tanah Airku" << endl; } 22 September 2018 Bina Sarana Informatika

34 Bina Sarana Informatika
DEFINISI ARRAY Array adalah suatu tipe data terstuktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya bisa statis ataupun dinamis dan diberi suatu nama tertentu. Elemen-elemen array tersusun secara berderet dan sekuensial di dalam memori sehingga memiliki alamat yang besebelahan/ berdampingan. Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi. 22 September 2018 Bina Sarana Informatika

35 Bina Sarana Informatika
ARRAY KARAKTERISTIK Hubungan antar elemen adalah linier Penempatan di memory secara PHYSICAL dan LOGICAL serupa. Selalu terdiri dari index dan komponen, hubungan index dengan komponen adalah one to one. Semua komponen mempunyai tipe sama (homogeneous) Cara access : Random. OPERASI Retrieve (s,k,i) Mengambil nilai yang ke-i dari array s dan di assign ke var k. Pada bahasa C -> k = s [i] 22 September 2018 Bina Sarana Informatika

36 Bina Sarana Informatika
ARRAY Update (s,k,i) Mengubah nilai yang ke-i dari array s dengan nilai dari var k Pada bahasa C -> s[i] = k; DIMENSI Array 1- Dimensi List Vektor Array 2- Dimensi Tabel Matriks 22 September 2018 Bina Sarana Informatika

37 Bina Sarana Informatika
ARRAY Array Multidimensional Secara teoritis; jumlah dimensi tidak terbatas, hanya dibatasi oleh besarnya memory PENCAPAIAN / ACCESS DATA Positional Access Access berdasarkan nilai indexnya Associative Access Access berdasarkan nilai / isi komponennya ACCESS BERDASARKAN INDEX Alamat (address) komponen di dalam memory dapat dihitung berdasarkan nilai indexnya. Untuk array dengan d dimensi, diperlukan d penjumlahan dan d perkalian Kecepatan perhitungan tidak tergantung kepada besarnya dimensi. 22 September 2018 Bina Sarana Informatika

38 Bina Sarana Informatika
ARRAY PARAMETER ARRAY 1. Base Address (b) Alamat (byte pertama) dari array yang di assign pada saat binding time. Binding time adalah waktu dimana array diassign pada suatu lokasi / address di memory, bisa pada sat compile, execute, dll. 2. Component Length (L) Panjangnya memory untuk meyimpan satu komponen. L tergantung dari tipe komponen dan bahasa pemrograman misalnya pada Turbo Pascal 7.0 tipe integer mempunyai L = 2, Turbo C 2.0 tipe integer L=2, visual C++ 5.0, integer L = 4. 22 September 2018 Bina Sarana Informatika

39 Bina Sarana Informatika
ARRAY 3. Lower Bound (Lk) dan Upper Bound (Uk) Lower Bound (Lk) adalah nilai index yang terkecil sedangkan Upper Bound (Uk) adalah nilai index yang terbesar. Contoh : int S[10] Maka Lk => 0 Uk => 9 4. Dimension (d) besarnya dimensi dari suatu array Contoh : int S[10][20]; = maka d = 2 int S[9]; = maka d = 1 22 September 2018 Bina Sarana Informatika

40 Bina Sarana Informatika
ARRAY ARRAY MAPPING FUNCTION (AMF) Fungsi untuk memetakan nilai index (i) ke alamat (address) dari komponen Fungsi mapping / pemetaan : Row-major Order Cara penyimpanan array di dalam bahasa pemrograman Virtual atau Virtual Base Nilai constant C0 (lokasi dari komponen dengan index 0) dalam AMF. 22 September 2018 Bina Sarana Informatika

41 Bina Sarana Informatika
ARRAY Rumus dalam AMF addr (S[i1][i2]…[id]) = C0 + C1 * i1 + C2 * i2 + … + Cd * id dimana : Cd = L Ct - 1 = (Ut – Lt + 1 ) * Ct dan L < t < = d C0 = b – (C1 * L1) - … (Cd * Ld) 22 September 2018 Bina Sarana Informatika

42 Bina Sarana Informatika
ARRAY Rumus perhitungan besarnya memory (M): M = L * (U1 – L1 + 1 ) *…* (Ud - Ld + 1) Contoh perhitungan AMF untuk array 1-dimensi int S[5]; jika diketahui : b = 500, L= 2. Jawab : L1 = 0, U1 = 4 C1 = L = 2 C0 = b – (C1* L1) = 500 – ( 2 * 0) = 500 22 September 2018 Bina Sarana Informatika

43 Bina Sarana Informatika
ARRAY (Catatan : dalam bahasa C karena index array selalu dimulai dari 0, maka C0 = b) addr (S[i]) = C0 + C1 * i1 addr (S[3]) = * 3 = 506 addr (S[1]) = * 1 = 502 Maka mapping tablenya adalah : Index Address 1 2 3 4 500 502 504 506 508 22 September 2018 Bina Sarana Informatika

44 Bina Sarana Informatika
ARRAY Besarnya memory yang dibutuhkan : M = L * (U1 – L1 + 1) M = 2 * (4 – 0 + 1) M = 10 Byte 22 September 2018 Bina Sarana Informatika

45 Bina Sarana Informatika
DEKLARASI ARRAY 1 DIMENSI tipe_data nama_var_array[ukuran]; tipe_data : menyatakan jenis tipe data elemen larik (int, char, float, dll) nama_var_array : menyatakan nama variabel yang dipakai. ukuran : menunjukkan jumlah maksimal elemen larik. Contoh: char huruf[9]; int umur[10]; int kondisi[2] = {0,1} int arr_dinamis[] = {1,2,3} 22 September 2018 Bina Sarana Informatika

46 Bina Sarana Informatika
DEKLARASI ARRAY 1 DIMENSI #include <stdio.h> #include <conio.h> void main() { int nilai[5], x; clrscr(); printf(“Memasukkan nilai :\n”); for(x=0;x<5;x++) { printf(“Nilai Angka : “); scanf(“%d”,&nilai[x]); } printf(“\n”); printf(“Membaca nilai :\n”); printf(“Nilai Angka : %d“,nilai[x]); getch(); Contoh 22 September 2018 Bina Sarana Informatika

47 Bina Sarana Informatika
STRUCTURE Structure pada C identik dengan Record pada Pascal Structure merupakan kumpulan dari satu atau beberapa variable yang mempunyai tipe sama atau berbeda (Heterogeneous) Variable dalam structure sering disebut dengan nama komponen, field, elemem atau members. Bentuk umum delklarasi structure pada C: Struct < struct_name> { <type><elemen_name1>; <type><elemen_name2>; - } <structure_variabel; 22 September 2018 Bina Sarana Informatika

48 Bina Sarana Informatika
STRUCTURE Contoh struct Mahasiswa{ char nama[20]; float ip; int semester; }; Untuk mendefenisikan variable X dengan tipe struct Mahasiswa adalah sbb : struct Mahasiswa X; Satu atau beberapa variable dapat juga didefenisikan pada saat structure tersebut dideklarasikan. 22 September 2018 Bina Sarana Informatika

49 Bina Sarana Informatika
STRUCTURE Contoh: struct Mahasiswa{ char nama[20]; float ip; int semester; } X, Y; Jika dalam program dibutuhkan satu variable structure, maka deklarasi structure bisa tanpa nama. Contoh struct{ char nama[20]; float ip; int semester; } X; 22 September 2018 Bina Sarana Informatika

50 Bina Sarana Informatika
Pencarian (Searching) Pada suatu data seringkali dibutuhkan pembacaan kembali informasi (retrieval information) dengan cara searching. Searching adalah pencarian data dengan menelusuri tempat pencarian data tersebut. Tempat pencarian data tersebut dapat berupa array dalam memori, bisa juga pada file pada external storage. 22 September 2018 Bina Sarana Informatika

51 Bina Sarana Informatika
Pencarian (Searching) Teknik-teknik Searching 1. Sequential Search 2. Binary Search 3. Interpolation Search 22 September 2018 Bina Sarana Informatika

52 Bina Sarana Informatika
Pencarian (Searching) Pencarian (Searching) Sequential Search Sequential Search - Adalah suatu teknik pencarian data dalam array ( 1 dimensi ) yang akan menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu. - Kemungkinan terbaik (best case) adalah jika data yang dicari terletak di indeks array terdepan (elemen array pertama) sehingga waktu yang dibutuhkan untuk pencarian data sangat sebentar (minimal). - Kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan untuk pencarian data sangat lama (maksimal). 22 September 2018 Bina Sarana Informatika

53 Bina Sarana Informatika
Pencarian (Searching) Sequential Search Algoritma Sequential Search Void SeqSearch(LarikInt L, int N, int X, int *IDX) DEKLARASI K : integer (indeks larik) DESKRIPSI K ← 1 While (k < n && L[k] != X) K++ Endwhile { k == N or L[k] == x } If (L[k] == x) *IDX= k; Else *IDX = -1; Endif 22 September 2018 Bina Sarana Informatika

54 Bina Sarana Informatika
Pencarian (Searching) Sequential Search Contoh #include <stdio.h> #include <conio.h> void main(){ clrscr(); int data[8] = {8,10,6,-2,11,7,1,100}; int cari; int flag=0; printf("masukkan data yang ingin dicari = ");scanf("%d",&cari); for(int i=0;i<8;i++){ if(data[i] == cari) flag=1; } if(flag==1) printf("Data ada!\n"); else printf("Data tidak ada!\n"); 22 September 2018 Bina Sarana Informatika

55 Bina Sarana Informatika
Pencarian (Searching) Penggunaan Sentinel (Penjaga) Perhatikan array data berikut ini: - 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. 22 September 2018 Bina Sarana Informatika

56 Bina Sarana Informatika
Pencarian (Searching) Penggunaan Sentinel (Penjaga) Contoh #include <stdio.h> #include <conio.h> void main(){ clrscr(); int data[7] = {3,12,9,-4,21,6}; int cari,i; printf("masukkan data yang ingin dicari = ");scanf("%d",&cari); data[6] = cari; i=0; while(data[i] != cari) i++; if(i<6) printf("Data ada!\n"); else printf("Data tidak ada!\n"); } 22 September 2018 Bina Sarana Informatika

57 Bina Sarana Informatika
Pencarian (Searching) Penggunaan Sentinel (Penjaga) 22 September 2018 Bina Sarana Informatika

58 Bina Sarana Informatika
Pencarian (Searching) Binary Search - Data yang ada harus diurutkan terlebih dahulu berdasarkan suatu urutantertentu yang dijadikan kunci pencarian. - Adalah teknik pencarian data dalam dengan cara membagi data menjadi dua bagian setiap kali terjadi proses pengurutan. - Prinsip pencarian biner adalah: Data diambil dari posisi 1 sampai posisi akhir N Kemudian cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2 22 September 2018 Bina Sarana Informatika

59 Bina Sarana Informatika
Pencarian (Searching) Binary Search Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau ebih besar? Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1 Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1 Jika data sama, berarti ketemu. 22 September 2018 Bina Sarana Informatika

60 Bina Sarana Informatika
Pencarian (Searching) Binary Search Algoritma Pencarian Binary Seacrh Void BinarySeacr(Larik L, int N, int X, int *NDX) { Typedef enum{true = 1, false = 0} boolean; Int i , j ; Int k; Boolean ketemu; I = 1; J = N; Ketemu = false; 22 September 2018 Bina Sarana Informatika

61 Bina Sarana Informatika
Pencarian (Searching) Binary Search Algoritma Pencarian Binary Seacrh While (!ketemu && i <= j) { K = ( i + j ) / 2; If (L[k] == X) Ketemu = true; Else If (L[k] > X) I = k + 1; /* Cari di kanan J = k – 1; /* Cari di kiri } If (ketemu) /* X ditemukan *IDX = k; Else *IDX = -1; } 22 September 2018 Bina Sarana Informatika

62 Bina Sarana Informatika
Pencarian (Searching) Binary Search Contoh Programnya int binary_search(int cari){ int l,r,m; l = 0; r = n-1; int ktm = 0; while(l<=r && ktm==0){ m = (l+r)/2; if(data[m] == cari) ktm=1; else if (cari < data[m]) r=m-1; else l=m+1; } if(ktm==1) return 1; else return 0; 22 September 2018 Bina Sarana Informatika

63 Bina Sarana Informatika
Pencarian (Searching) Binary Search Contoh Kasus 81 76 21 18 16 13 10 7 I= =J Misalkan Elemen yang dicari adalah Xcari = 16 Langkah 1 Bagi dua Elemen Larik dengan Indeks K = (I + J) / 2 Menjadi Kiri K = ( ) / 2 = 3 81 76 21 18 16 13 10 7 Kiri Kanan 22 September 2018 Bina Sarana Informatika

64 Bina Sarana Informatika
Pencarian (Searching) Binary Search Langkah 2 L[3] = 16 ? Tidak ! Lakukan Pencarian pada bagian kanan atau kiri L[3] > 16 ? Ya ! Lakukan Pencarian pada Larik bagian Kanan I = K+1 = 4 dan J=7 16 13 10 7 I= =J Langkah 1: Indeks Elemen Tengah K = (4 + 7) / 2 = 5 22 September 2018 Bina Sarana Informatika

65 Bina Sarana Informatika
Pencarian (Searching) Binary Search 16 13 10 7 Kiri Kanan Langkah 2 : L[5] = 16 ? Tidak !, Lakukan Pencarian bagian Kanan atau bagian Kiri L[5] > 16 ? Tidak ! Lakukan Pencarian pada bagian Kiri. I= 4 (Tetap) dan J= K - 1 = 4 22 September 2018 Bina Sarana Informatika

66 Bina Sarana Informatika
Pencarian (Searching) Binary Search 16 4 Langkah 1: I = 4 dan J = 4 Indeks Elemen Tengah K = (4 + 4) / 2 = 4 16 4 Langkah 2: L[4] = 16 ? Ya ! Xcari ditemukan, Pencarian Selesai. 22 September 2018 Bina Sarana Informatika

67 Bina Sarana Informatika
Pencarian (Searching) Interpolation Search - Teknik ini dilakukan pada data yang sudah terurut berdasarkan kunci tertentu - Teknik searching ini dilakukan dengan perkiraan letak data. o Contoh ilustrasi: jika kita hendak mencari suatu nama di dalam buku telepon, misal yang berawalan dengan huruf T, maka kita tidak akan mencarinya dari awal buku, tapi kita langsung membukanya pada 2/3 atau ¾ dari tebal buku. - Jadi kita mencari data secara relatif terhadap jumlah data. 22 September 2018 Bina Sarana Informatika

68 Bina Sarana Informatika
Pencarian (Searching) Interpolation Search - Rumus posisi relatif kunci pencarian dihitung dengan rumus: 22 September 2018 Bina Sarana Informatika

69 Bina Sarana Informatika
Pencarian (Searching) Interpolation Search Contoh 22 September 2018 Bina Sarana Informatika

70 Bina Sarana Informatika
Pencarian (Searching) Interpolation Search 1. Kunci Pencarian ? 088 Low ? 0 High ? 7 Posisi = ( ) / ( ) * (7 - 0) + 0 = [6] Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005 Kunci Pencarian ? 060 Low ? 0 High ? 7 Posisi = (060 – 025) / (096 – 025) * (7 – 0) + 0 = [3] Kunci[3] < kunci pencarian, maka teruskan Low = = 4 High = 7 Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060. Berarti tidak ada kunci 060. 22 September 2018 Bina Sarana Informatika

71 Bina Sarana Informatika
Pencarian (Searching) Interpolation Search Programnya: int interpolationsearch(int key,int n){ int low,high,pos,i; low=0; high=n-1; do{ pos = (key – data[low]) * (high – low) / data[high] – data[low] + low; if (data[pos] == key) return pos; if (data[pos] > key) high = pos-1; else if (data[pos] < key) low = pos + 1; } while(key >= data[low] && key <= data[high]); return -1 } 22 September 2018 Bina Sarana Informatika

72 Bina Sarana Informatika
SORTING ( Pengurutan ) Pengurutan data dalam struktur data sangat penting terutama untuk data yang beripe data numerik ataupun karakter. Pengurutan dapat dilakukan secara ascending (urut naik) dan descending (urut turun) Pengurutan (Sorting) adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga tersusun secara teratur menurut aturan tertentu Contoh: Data Acak : Ascending : Descending : 22 September 2018 Bina Sarana Informatika

73 Bina Sarana Informatika
SORTING ( Pengurutan ) Teknik Teknik Pengurutan BUBBLE SORT SELECTION SORT INSERTION SORT QUICK SORT 22 September 2018 Bina Sarana Informatika

74 Bina Sarana Informatika
SORTING ( Pengurutan ) SORTING ( Pengurutan ) BUBBLE SORT BUBBLE SORT - Metode sorting termudah - Diberi nama “Bubble” karena proses pengurutan secara berangsur-angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda. - Bubble Sort mengurutkan data dengan cara mem-bandingkan elemen sekarang dengan elemen berikutnya. - Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar, jika pengurutan ascending. 22 September 2018 Bina Sarana Informatika

75 Bina Sarana Informatika
SORTING ( Pengurutan ) BUBBLE SORT - Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya. - Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian seterusnya. - Kapan berhentinya? Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan. 22 September 2018 Bina Sarana Informatika

76 Bina Sarana Informatika
SORTING ( Pengurutan ) BUBBLE SORT 22 September 2018 Bina Sarana Informatika

77 Bina Sarana Informatika
SORTING ( Pengurutan ) BUBBLE SORT 22 September 2018 Bina Sarana Informatika

78 Bina Sarana Informatika
SORTING ( Pengurutan ) BUBBLE SORT 22 September 2018 Bina Sarana Informatika

79 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Metode pengurutan ini disebut pengurutan pilih (Selection Sort) karena gagasan dasarnya adalah memilih elemen maksimum/minimum dari larik (Array), lalu menempatkan elemen maksimum/minimum itu pada awal atau akhir larik (elemen terujung). Selanjutnya elemen terujung tersebut “diisolasi” dan tidak disertakan pada proses selanjutnya. Proses yang sama diulang untuk elemen larik yang tersisa, yaitu memilih elemen maksimum/minimum berikutnya dan mempertukarkannya dengan elemen terujung larik sisa. Sebagaimana halnya pada algoritma pengurutan gelembung, proses memilih nilai maksimum/minimum dilakukan pada setiap pass, Jika larik berukuran N, maka jumlah pass adalah N-1. 22 September 2018 Bina Sarana Informatika

80 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Misalnya : Jumlah Pass = N – 1 Untuk setiap Pass I = 1, 2, ……Jumlah Pass lakukan: Cari elemen terbesar (maks) mulai dari elemen ke 1 sampai elemen ke N Pertukarkan maks dengan elemen ke N Kurangi N satu (karena elemen ke N sudah terurut) 22 September 2018 Bina Sarana Informatika

81 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Rincian aksi pada setiap pass adalah seperti dibawah ini : Pass 1: Cari elemen maksimum didalam L[1..N] Pertukarkan elemen maksimum dengan elemen L[N] Ukuran Larik yang belum terurut = N – 1 Pass 2 :Cari elemen maksimum didalam L[1..N-1] Pertukarkan elemen maksimum dengan elemen L[N-1] Ukuran Larik yang belum terurut = N – 2 Pass 3 :Cari elemen maksimum didalam L[1..N-2] Pertukarkan elemen maksimum dengan elemen L[N-2] Ukuran Larik yang belum terurut = N – 3 22 September 2018 Bina Sarana Informatika

82 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Pass N-1 : Tentukan elemen maksimum didalam L[1..2] Pertukarkan elemen maksimum dengan elemen L[2] Ukuran Larik yang belum terurut = 1 (elemen yang belum terurut adalah L[1], tidak perlu diurutkan karena hanya satu satunya). Contoh Urut Menaik 29 27 10 8 76 21 22 September 2018 Bina Sarana Informatika

83 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Langkah 1 : Cari elemen maksimum didalam larik L[1..5] => Maks = L[4] = 76 Pertukaran Maks dengan L[N], diperoleh: 29 27 10 8 21 76 Langkah 2 : (berdasarkan susunan larik hasil langkah 1) Cari elemen maksimum didalam larik L[1..4] => Maks = L[0] = 29 Pertukaran Maks dengan L[4], diperoleh: 22 September 2018 Bina Sarana Informatika

84 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT 21 27 10 8 29 76 Langkah 3 : (berdasarkan susunan larik hasil langkah 2) Cari elemen maksimum didalam larik L[1..3] => Maks = L[1] = 27 Pertukaran Maks dengan L[3], diperoleh: 21 8 10 27 29 76 22 September 2018 Bina Sarana Informatika

85 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Langkah 4 : (berdasarkan susunan larik hasil langkah 3) Cari elemen maksimum didalam larik L[1..2] => Maks = L[0] = 21 Pertukaran Maks dengan L[2], diperoleh: 10 8 21 27 29 76 22 September 2018 Bina Sarana Informatika

86 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT Langkah 5 : (berdasarkan susunan larik hasil langkah 4) Cari elemen maksimum didalam larik L[1..1] => Maks = L[0] = 10 Pertukaran Maks dengan L[1], diperoleh: 8 10 21 27 29 76 22 September 2018 Bina Sarana Informatika

87 Bina Sarana Informatika
SORTING ( Pengurutan ) SELECTION SORT 22 September 2018 Bina Sarana Informatika

88 Bina Sarana Informatika
SORTING ( Pengurutan ) 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-1 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. 22 September 2018 Bina Sarana Informatika

89 Bina Sarana Informatika
SORTING ( Pengurutan ) INSERTION SORT Contoh Kasus 22 September 2018 Bina Sarana Informatika

90 Bina Sarana Informatika
SORTING ( Pengurutan ) INSERTION SORT 22 September 2018 Bina Sarana Informatika

91 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Algoritma pengurutan yang tercepat dan populer sampai saat ini adalah Quick Sort. Kecepatannyalah yang membuatnya disebut sebagai QUICK SORT. QUICK SORT membandingkan suatu elemen (disebut Pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen-elemen lain yang lebih kecil daripada Pivot tersebut terletak disebelah kirinya dan elemen elemen lain yang lebih besar dari pada Pivot tersebut terletak disebelah kanannya. Dengan demikian, telah terbentuk dua sublist yang terletak disebelah kiri dan kanan dari Pivot. Sublist kiri dan Sublist kanan kita anggap sebagai list baru dan kita mengerjakan proses yang sama pada list ini. Demikian seterusnya sampai tidak terdapat sublist lagi sehingga di dalamnya telah terjadi proses rekursif. 22 September 2018 Bina Sarana Informatika

92 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Contoh Kasus Keterangan Proses. Kotak yang bukan bagian dari sublist digambarkan dengan warna pudar, sedangkan yang merupakan bagian dari sublist digambarkan dengan warna cerah. I bergerak dari sudut kiri kekanan sampai mendapatkan nilai yang lebih besar dari Pivot. J bergerak dari sudut kanan kekiri sampai menemukan nilai yang lebih kecil dari Pivot. 22 September 2018 Bina Sarana Informatika

93 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Langkah 1 22 September 2018 Bina Sarana Informatika

94 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT I berhenti pada index pertama karena langsung mendapatkan nilai yang lebih besar dari Pivot (15). J berhenti pada index 5 karena juga langsung mendapatkan nilai yang lebih kecil dari Pivot. Oleh karena I < J maka data yang ditunjuk oleh I ditukar dengan data yang ditunjuk oleh J sehingga menjadi : 22 September 2018 Bina Sarana Informatika

95 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Langkah 2. I berhenti pada index 2 (Pivot) karena tidak menemukan bilangan yang lebih besar dari Pivot. J berhenti pada index 4 menunjukkan pada nilai yang lebih kecil dari Pivot. 22 September 2018 Bina Sarana Informatika

96 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Oleh karena itu I < J maka data yang ditunjuk oleh I (Pivot) ditukar dengan data yang ditunjuk oleh J sehingga menjadi : 22 September 2018 Bina Sarana Informatika

97 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT 22 September 2018 Bina Sarana Informatika

98 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Pada akhr langkah 2, posisi I akan sama dengan J. dengan demikian proses akan dilanjutkan dengan membagi list menjadi dua pada posisi tersebut. Langkah 3. Proses yang sama seperti sebelumnya dilakukan terhadap 2 buah sublist yang baru (ditandai dengan kotak berwarna cerah/tidak transparan). 22 September 2018 Bina Sarana Informatika

99 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Jika proses telah selesai, akan dihasilkan list yang sudah terurut. Proses ini dapat juga digambarkan dalam bentuk Tree seperti di bawah ini dengan Pivot yang ditandai dengan kotak Gelap. 22 September 2018 Bina Sarana Informatika

100 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Tree 22 September 2018 Bina Sarana Informatika

101 Bina Sarana Informatika
SORTING ( Pengurutan ) QUICK SORT Algoritma Quick Sort Int I, J Int Mid I = L; J = R; Mid = Fdata[L+R) / 2]; Do { While (Fdata[i] < Mi) i++; While (Fdata[j] > Mid) J--; If ( I <= J ) { TukarData(I, J); I++; J--; } } While ( I < J ); If ( L < J ) QuickSort(L, J); If ( I < R ) QuickSort(I, R); } 22 September 2018 Bina Sarana Informatika

102 Bina Sarana Informatika
22/09/2018 L I S T Array dan Pointer 22 September 2018 Bina Sarana Informatika STMIK Mikroskil Medan

103 Bina Sarana Informatika
LIST Merupakan struktur data sederhana dan fleksibel karena dapat bertambah dan berkurang sesuai dengan kebutuhan, dan elemennya dapat diakses, ditambah atau dihapus pada posisi sembarang Secara matematis list adalah sebuah barisan nol atau lebih elemen dari tipe data tertentu (tipe data sama) List dapat diimplementasikan dengan cara alokasi statis dengan menggunakan Array (larik) atau dengan alokasi dinamis dengan menggunakan pointer (penunjuk) 22 September 2018 Bina Sarana Informatika

104 Bina Sarana Informatika
List Dengan Array Elemen-elemen disimpan dalam sel larik yang berkelanjutan. Dengan representasi ini sebuah list dengan mudah dapat telusuri dan elemen baru dapat ditambah pada ekor list setiap saat. Menyisipkan elemen ditengah list mengakibatkan pergeseran semua elemen berikutnya, begitu juga dengan penghapusan. 22 September 2018 Bina Sarana Informatika

105 Bina Sarana Informatika
List Dengan Array Posisi dalam list dipresentasikan dengan bilangan bulat positif ( 0 s/d sembarang nilai ) posisi ke-i dengan bilangan i Elemen 22 September 2018 Bina Sarana Informatika

106 Bina Sarana Informatika
Algorithma Void Makenul (Var L:list); Begin L.akh:=0; end; Void Empty (L:list) : Boolean; Empty:=(L.akh=0) Void Full (L:list) : Boolean; Full:= (L.akh=Max) 22 September 2018 Bina Sarana Informatika

107 Bina Sarana Informatika
Algorithma 4. Void Insert (X : TipeData; Posisi : Integer;Var L : List); Var I : Integer; Begin If Full(L) Then Writeln(‘Error : List sudah penuh’) Else if (P<1) Or (P>L.akhir+1)Then Writeln(‘Error : Posisi tsb tidak ada’) Else Begin For I := L.Akhir Downto P Do L.Elemen[I+1] := L.Elemen[I]; L.Akhir := L.Akhir + 1; End End; 22 September 2018 Bina Sarana Informatika

108 Bina Sarana Informatika
Algorithma 5. Void Delete (Posisi : Integer; Var L : List); Var I : Integer; Begin If Empty (L) Then Writeln (‘Error : List Kosong’) Else if (P>L.Akhir) Or (P<1) Then Writeln(‘Error : Posisi tersebut tidak ada’) Else Begin L.Akhir := L.Akhir – 1; For I = P To L.Akhir Do L.Elemen[I]:=L.Elemen [ I + 1 ] End End; 22 September 2018 Bina Sarana Informatika

109 Bina Sarana Informatika
Algorithma 6. Void Print (L: List); Var I : Integer; Begin If Empty (L) Then Writeln (‘Error : List kosong’) Else For I := 1 To L.Akhir Do Write (L.Elemen[I]); End; 22 September 2018 Bina Sarana Informatika

110 Bina Sarana Informatika
LIST Contoh Menyisipkan data baru X pada posisi P kedalam LIST (L) 22 September 2018 Bina Sarana Informatika

111 Bina Sarana Informatika
LIST Algoritma Sisip / Menambah kedalam LIST (L) Cek Penuh Cek Posisi Geser List Sisip Naikkan Akhir 22 September 2018 Bina Sarana Informatika

112 Bina Sarana Informatika
LIST Contoh Menghapus data X pada posisi P kedalam LIST (L) 22 September 2018 Bina Sarana Informatika

113 Bina Sarana Informatika
LIST Algoritma Hapus LIST (L) Cek Kosong Cek Posisi Geser Akhir : Akhir - 1 22 September 2018 Bina Sarana Informatika

114 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENGANTAR LINKED LIST Dikembangkan tahun oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence, seperti pembuatan Chess Solver. Victor Yongve di Massachusetts Institute of Technology (MIT) juga menggunakan linked list pada natural language processing dan machine transitions pada bahasa pemrograman COMMIT. 22 September 2018 Bina Sarana Informatika

115 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENGANTAR LINKED LIST Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung menyambung, dinamis dan terbatas. Linked List sering disebut juga Senarai Berantai Linked List saling terhubung dengan bantuan variabel pointer Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field. 22 September 2018 Bina Sarana Informatika

116 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR ARRAY VS LINKED LIST BENTUK NODE Pengertian: Single : artinya field pointer-nya hanya satu buah saja dan satu arah. Linked List : artinya node-node tersebut saling terhubung satu sama lain. 22 September 2018 Bina Sarana Informatika

117 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Ilustrasi Linked List - 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 NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list. PEMBUATAN SINGLE LINKED LIST typedef struct TNode{ int data; TNode *next; }; - Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari TNode 22 September 2018 Bina Sarana Informatika

118 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR 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. Pembentukan node baru Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL. 22 September 2018 Bina Sarana Informatika

119 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Contoh TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; SINGLE LINKED LIST MENGGUNAKAN HEAD - Dibutuhkan satu buah variabel pointer: head - Head akan selalu menunjuk pada node pertama Head 22 September 2018 Bina Sarana Informatika

120 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Deklarasi Pointer Penunjuk Kepala Single Linked List Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama dalam linked list (dalam hal ini adalah head). Deklarasinya sebagai berikut: TNode *head; Fungsi Inisialisasi Single LinkedList void init(){ head = NULL; } 22 September 2018 Bina Sarana Informatika

121 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR 22/09/2018 Function untuk mengetahui kosong tidaknya Single LinkedList Jika pointer head tidak menunjuk pada suatu node maka kosong int isEmpty(){ if(head == NULL) return 1; else return 0; } PENAMBAHAN DATA DEPAN Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara head ditunjukkan ke node baru tersebut. Pada prinsipnya adalah mengkaitkan node baru dengan head, Kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. 22 September 2018 Bina Sarana Informatika STMIK Mikroskil Medan

122 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DEPAN void insertDepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; } else { baru->next = head; head = baru; Contoh Ilustrasi: 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

123 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DEPAN 3. Datang data baru, misalnya 20 (penambahan di depan) 22 September 2018 Bina Sarana Informatika

124 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG Penambahan data dilakukan di belakang, namun pada saat pertama kali, node langsung ditunjuk oleh head. Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui node terbelakang, kemudian setelah itu, dikaitkan dengan node baru. Untuk mengetahui data terbelakang perlu digunakan perulangan. void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; else { bantu=head; while(bantu->next!=NULL){ bantu=bantu->next; } bantu->next = baru; 22 September 2018 Bina Sarana Informatika

125 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG Contoh Ilustrasi: 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

126 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG 3. Datang data baru, misalnya 20 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

127 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG 4. Datang data baru, misal 25 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

128 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR MENAMPILKAN DATA Function untuk menampilkan isi single linked list non circular void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ cout<<bantu->data<<" "; bantu=bantu->next; } cout<<endl; } else cout<<"Masih kosong\n"; 22 September 2018 Bina Sarana Informatika

129 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR MENAMPILKAN DATA Function di atas digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node. Penelusuran ini dilakukan dengan menggunakan suatu pointer bantu, karena pada prinsipnya pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke nilai NULL. Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. Jika head masih NULL berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

130 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR PENGHAPUSAN DATA Function untuk menghapus data terdepan - Function di atas akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan untuk menunjuk node yang akan dihapus, misalnya pointer hapus dan barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. - Sebelum data terdepan dihapus, head harus ditunjukkan ke node sesudahnya terlebih dahulu agar list tidak putus, sehingga node setelah head lama akan menjadi head baru (data terdepan yang baru). - Jika head masih NULL maka berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

131 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Function untuk menghapus data terdepan void hapusDepan (){ TNode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = head; d = hapus->data; head = head->next; delete hapus; } else { d = head->data; head = NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; } 22 September 2018 Bina Sarana Informatika

132 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Penghapusan data di belakang - Membutuhkan pointer bantu dan hapus. - Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang dihapus yang kemudian selanjutnya akan menjadi node terakhir. - Pointer bantu akan digunakan untuk menunjuk ke nilai NULL. - Pointer bantu akan selalu bergerak sampai sebelum node yang akan dihapus, baru kemudian pointer hapus diletakkan setelah pointer bantu. Setelah itu pointer hapus akan dihapus, pointer bantu akan menunjuk ke NULL. 22 September 2018 Bina Sarana Informatika

133 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Penghapusan data di belakang void hapusBelakang(){ TNode *hapus,*bantu; int d; if (isEmpty()==0){ if(head->next != NULL){ bantu = head; while(bantu->next->next!=NULL){ bantu = bantu->next; } hapus = bantu->next; d = hapus->data; bantu->next = NULL; delete hapus; } else { d = head->data; head = NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; } 22 September 2018 Bina Sarana Informatika

134 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Penghapusan data di belakang Contoh 22 September 2018 Bina Sarana Informatika

135 Bina Sarana Informatika
SINGLE LINKED LIST NON CIRCULAR Function untuk menghapus semua elemen Linked List void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; } 22 September 2018 Bina Sarana Informatika

136 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL - Dibutuhkan dua buah variabel pointer: head dan tail - Head akan selalu menunjuk pada node pertama, sedang-kan tail akan selalu menunjuk pada node terakhir. head tail Inisialisasi LinkedList TNode *head, *tail; 22 September 2018 Bina Sarana Informatika

137 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN 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; } 22 September 2018 Bina Sarana Informatika

138 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL PENAMBAHAN DATA 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 { baru->next = head; head = baru; } cout<<”Data masuk\n”; 22 September 2018 Bina Sarana Informatika

139 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Contoh 22 September 2018 Bina Sarana Informatika

140 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Penambahan Data di belakang Pada penambahan data di belakang, data akan selalu dikaitkan dengan tail, karena tail terletak di node paling belakang. Setelah dikaitkan dengan node baru, maka node baru tersebut akan menjadi tail baru. void tambahBelakang(int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; tail=baru; tail->next = NULL; } else { tail->next = baru; tail=baru; } cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

141 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Contoh Penambahan Data di belakang 22 September 2018 Bina Sarana Informatika

142 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Penambahan Data di belakang 22 September 2018 Bina Sarana Informatika

143 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL 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. 22 September 2018 Bina Sarana Informatika

144 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Function untuk menampilkan isi linked list: void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ cout<<bantu->data<<" "; bantu=bantu->next; } cout<<endl; } else cout<<"Masih kosong\n"; Pada prinsipnya sama dengan function tampil sebelumnya. 22 September 2018 Bina Sarana Informatika

145 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Function untuk menghapus data di depan - Function di atas akan menghapus data terdepan (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus pointer hapus dengan menggunakan perintah delete. - Jika tail masih NULL maka berarti list masih kosong! 22 September 2018 Bina Sarana Informatika

146 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Function untuk menghapus data di depan void hapusDepan(){ TNode *hapus; int d; if (isEmpty()==0){ if(head!=tail){ hapus = head; d = hapus->data; head = head->next; delete hapus; } else { d = tail->data; head=tail=NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; 22 September 2018 Bina Sarana Informatika

147 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Contoh 22 September 2018 Bina Sarana Informatika

148 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Function untuk menghapus data di belakang: Dengan menggunakan Single Linked List ber-Head dan Tail, pengahapusan data di belakang akan mudah dilakukan, tidak seperti pada Single Linked List hanya ber-Head saja. 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"; 22 September 2018 Bina Sarana Informatika

149 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Contoh null 22 September 2018 Bina Sarana Informatika

150 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL - Function di atas akan menghapus data terbelakang (terakhir) yang ditunjuk oleh tail pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail yang baru. Setelah itu hapus pointer hapus dengan menggunakan perintah delete. - Jika tail masih NULL maka berarti list masih kosong! 22 September 2018 Bina Sarana Informatika

151 SINGLE LINKED LIST MENGGUNAKAN
HEAD DAN TAIL Function untuk menghapus semua elemen Linked List void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; tail = NULL; 22 September 2018 Bina Sarana Informatika

152 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR PENGANTAR SINGLE LINKED LIST CIRCULAR - SLLC adalah Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya. BENTUK NODE SLLC Menempati alamat memori tertentu Pengertian: Single : artinya field pointer-nya hanya satu buah saja dan satu arah. Linked List : artinya node-node tersebut saling terhubung satu sama lain. Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar 22 September 2018 Bina Sarana Informatika

153 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR PENGANTAR SINGLE LINKED LIST CIRCULAR 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. Node terakhir akan menunjuk lagi ke head. 22 September 2018 Bina Sarana Informatika

154 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR PEMBUATAN SINGLE LINKED LIST CIRCULAR Deklarasi node dari struct berikut ini: 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. 22 September 2018 Bina Sarana Informatika

155 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR 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; SINGLE LINKED LIST CIRCULAR MENGGUNAKAN HEAD - Dibutuhkan satu buah variabel pointer: head - Head akan selalu menunjuk pada node pertama head 22 September 2018 Bina Sarana Informatika

156 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Deklarasi Pointer Penunjuk Kepala Single Linked List Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut: TNode *head; Fungsi Inisialisasi Single LinkedList void init(){ head = NULL; } Function untuk mengetahui kosong tidaknya Single LinkedList int isEmpty(){ if(head == NULL) return 1; else return 0; } 22 September 2018 Bina Sarana Informatika

157 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR PENAMBAHAN DATA Penambahan data di depan Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya. Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu. 22 September 2018 Bina Sarana Informatika

158 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penambahan data di depan void insertDepan(int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = baru; if(isEmpty()==1){ head=baru; head->next=head; } else { bantu = head; while(bantu->next!=head){ bantu=bantu->next; } baru->next = head; head = baru; bantu->next = head; cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

159 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 3. Datang data baru, misalnya 20 (penambahan di depan) 22 September 2018 Bina Sarana Informatika

160 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penambahan data di belakang Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya. Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan. void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = baru; if(isEmpty()==1){ head=baru; head->next=head; } else { bantu = head; while(bantu->next != head){ bantu=bantu->next; } bantu->next = baru; baru->next = head; cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

161 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penambahan data di belakang Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

162 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penambahan data di belakang 3. Datang data baru, misalnya 20 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

163 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penambahan data di belakang 4. Datang data baru, misal 25 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

164 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Function untuk menampilkan isi single linked list - Function ini digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node. Penelusuran ini dilakukan dengan menggunakan suatu variabel node bantu, karena pada prinsipnya variabel node head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. - Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke head lagi. Jika belum sama dengan head, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. - Jika head masih NULL berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

165 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Function untuk menampilkan isi single linked list void tampil(){ TNode *b; b = head; if(isEmpty()==0){ do{ cout<<b->data<<" "; b=b->next;} while(b!=head); cout<<endl; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

166 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Function untuk menghapus data terdepan - Function di atas akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada variabel hapus dan barulah kemudian menghapus variabel hapus dengan menggunakan perintah delete. - Sebelum data terdepan dihapus, head harus ditunjukkan ke data sesudahnya terlebih dahulu sehingga data setelah head lama akan menjadi head baru (data terdepan yang baru). - Jika head masih NULL maka berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

167 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Function untuk menghapus data terdepan void hapusDepan (){ TNode *hapus,*bantu; if (isEmpty()==0){ int d; hapus = head; d = head->data; if(head->next != head){ bantu = head; while(bantu->next!=head){ bantu=bantu->next;} head = head->next; delete hapus; bantu->next = head; } else { head=NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

168 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Function untuk menghapus data terdepan bantu head hapus bantu head bantu head 22 September 2018 Bina Sarana Informatika

169 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penghapusan data di belakang - Membutuhkan pointer bantu dan hapus. - Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang dihapus. - Pointer bantu akan digunakan untuk menunjuk ke nilai - NULL. - Pointer bantu akan selalu bergerak bersama dengan pointer hapus tapi letak pointer bantu harus selalu dibelakang pointer hapus. 22 September 2018 Bina Sarana Informatika

170 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penghapusan data di belakang void hapusBelakang(){ TNode *hapus,*bantu; if (isEmpty()==0){ int d; hapus = head; if(head->next == head){ head = NULL; }else{ bantu = head; while(bantu->next->next != head){ bantu = bantu->next; } hapus = bantu->next; d = bantu->data; bantu->next = head; delete hapus; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; 22 September 2018 Bina Sarana Informatika

171 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penghapusan data di belakang Contoh Head Head bantu Head bantu hapus Head bantu 22 September 2018 Bina Sarana Informatika

172 Bina Sarana Informatika
SINGLE LINKED LIST CIRCULAR Penghapusan semua elemen void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu->next!=head){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; 22 September 2018 Bina Sarana Informatika

173 SINGLE LINKED LIST CIRCULAR Menggunakan 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. Head Tail Inisialisasi LinkedList TNode *head, *tail; Fungsi Inisialisasi LinkedList void init(){ head = NULL; tail = NULL; } 22 September 2018 Bina Sarana Informatika

174 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
PENAMBAHAN DATA DI DEPAN Pengkaitan node baru ke linked list di depan Penambahan data baru di depan akan selalu menjadi head. 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; } cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

175 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
PENAMBAHAN DATA DI DEPAN Contoh 1. List masih kosong (head=tail=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

176 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
3. Datang data baru, misalnya 20 22 September 2018 Bina Sarana Informatika

177 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Penambahan Data di belakang Pada penambahan data di belakang, data akan selalu dikaitkan dengan tail, karena tail terletak di node paling belakang. Setelah dikaitkan dengan node baru, maka node baru tersebut akan menjadi tail. void tambahBelakang(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 { tail->next = baru; tail = baru; tail->next = head; } cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

178 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Penambahan Data di belakang Contoh 1. List masih kosong (head=tail=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

179 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
3. Datang data baru, misalnya 20 22 September 2018 Bina Sarana Informatika

180 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
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. 22 September 2018 Bina Sarana Informatika

181 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menampilkan isi linked list: void tampil(){ TNode *b; b = head; if(isEmpty()==0){ do{ cout<<b->data<<" "; b=b->next; }while(b!=tail->next); cout<<endl; } else cout<<"Masih kosong\n"; } tail head bantu Pada prinsipnya sama dengan function tampil sebelumnya. 22 September 2018 Bina Sarana Informatika

182 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus data di depan - Function di atas akan menghapus data terdepan (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus variabel hapus dengan menggunakan perintah delete. - Jika tail masih NULL maka berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

183 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus data di depan void hapusDepan(){ TNode *hapus; if (isEmpty()==0){ int d; hapus = head; d = head->data; if(head != tail){ head = head->next; tail->next = head; delete hapus; }else{ head=NULL; tail=NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; 22 September 2018 Bina Sarana Informatika

184 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus data di depan head hapus tail head hapus tail hapus head tail 22 September 2018 Bina Sarana Informatika

185 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus data di belakang: Dengan menggunakan Single Linked List ber-Head dan Tail, pengahapusan data di belakang akan mudah dilakukan, tidak seperti pada Single Linked List hanya ber-Head saja. void hapusBelakang(){ TNode *hapus,*bantu; if (isEmpty()==0){ int d; if(head == tail){ d = tail->data; head = NULL; tail = NULL; }else{ bantu = head; while(bantu->next != tail){ bantu = bantu->next; }hapus = tail; tail = bantu; d = hapus->data; tail->next = head; delete hapus; }cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; } 22 September 2018 Bina Sarana Informatika

186 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus data di belakang: - Function di atas akan menghapus data terbelakang (terakhir) yang ditunjuk oleh tail pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail yang baru. Setelah itu hapus variabel hapus dengan menggunakan perintah delete. - Jika tail masih NULL maka berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

187 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus data di belakang: head tail hapus head bantu tail hapus head tail bantu hapus 22 September 2018 Bina Sarana Informatika

188 SINGLE LINKED LIST CIRCULAR Menggunakan Head & Tail
Function untuk menghapus semua data: - Menggunakan pointer bantu yang digunakan untuk bergerak sepanjang list, dan menggunakan pointer hapus yang digunakan untuk menunjuk node-node yang akan dihapus. - Pada saat pointer hapus menunjuk pada node yang akan dihapus, pointer bantu akan bergerak ke node selanjutnya, dan kemudian pointer hapus akan didelete. void clear(){ TNode *bantu,*hapus; if(isEmpty() == 0){ bantu = head; while(bantu->next!=head){ hapus = bantu; bantu = bantu->next; delete hapus; }head = NULL; tail = NULL;} } 22 September 2018 Bina Sarana Informatika

189 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENGANTAR - Double Linked List Non Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. - Double Linked List Non Circular pointer next dan prev nya menunjuk ke NULL. - Dengan adanya 2 pointer penunjuk, next dan prev, DLLNC sangat flexible dibandingkan dengan SLLNC. BENTUK NODE DLLNC BENTUK NODE DLLNC null null 22 September 2018 Bina Sarana Informatika

190 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR BENTUK NODE DLLNC null null Pengertian: Double : artinya field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next Linked List : artinya node-node tersebut saling terhubung satu sama lain. Non-Circular : artinya pointer next dan prev-nya menunjuk ke NULL. 22 September 2018 Bina Sarana Informatika

191 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR - 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. PEMBUATAN DOUBLE LINKED LIST NON CIRCULAR Deklarasi node - Pembuatan struct bernama TNode yang berisi 3 field, yaitu field data bertipe integer dan field next & prev yang bertipe pointer dari TNode - Setelah pembuatan struct, buat variabel haed yang bertipe pointer dari TNode yang berguna sebagai kepala linked list. typedef struct TNode{ int data; TNode *next; Tnode *prev; }; 22 September 2018 Bina Sarana Informatika

192 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR 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 = NULL; baru->prev = NULL; - Untuk data pertama, pointer node baru yang prev dan next harus menunjuk ke NULL 22 September 2018 Bina Sarana Informatika

193 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD - Menggunakan 1 pointer head - Head selalu menunjuk node pertama head Deklarasi Pointer Head TNode *head; Fungsi Inisialisasi LinkedList void init(){ head = NULL; } 22 September 2018 Bina Sarana Informatika

194 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR Function untuk mengetahui kosong tidaknya LinkedList int isEmpty(){ if(head == NULL) return 1; else return 0; } PENAMBAHAN DATA DIDEPAN - Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya. - Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. 22 September 2018 Bina Sarana Informatika

195 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIDEPAN void insertDepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; baru->prev = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; head->prev = NULL; } else { baru->next = head; head->prev = baru; head = baru; } cout<<”Data masuk\n”; 22 September 2018 Bina Sarana Informatika

196 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIDEPAN Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

197 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIDEPAN 3. Datang data baru, misalnya 20 22 September 2018 Bina Sarana Informatika

198 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG - Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya. - Penambahan di belakang lebih sulit karena kita mem -butuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan. void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; baru->prev = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; head->prev = NULL;} else { bantu=head; while(bantu->next!=NULL){ bantu=bantu->next;} bantu->next = baru; baru->prev = bantu;} cout<<"Data masuk\n"; } 22 September 2018 Bina Sarana Informatika

199 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

200 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG 3. Datang data baru, misalnya 20 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

201 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENAMBAHAN DATA DIBELAKANG 4. Datang data baru, misal 25 (penambahan di belakang) head bantu baru 22 September 2018 Bina Sarana Informatika

202 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR Function untuk menampilkan isi linked list - Function ini digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node. Penelusuran ini dilakukan dengan menggunakan suatu variabel node bantu, karena pada prinsipnya variabel node head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk NULL. Jika belum NULL, maka node bantu akan berpindah ke node 22 September 2018 Bina Sarana Informatika

203 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR Function untuk menampilkan isi linked list void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ cout<<bantu->data<<" "; bantu=bantu->next; } cout<<endl; } else cout<<"Masih kosong\n"; 22 September 2018 Bina Sarana Informatika

204 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENGHAPUSAN DATA DIDEPAN - Function ini akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada pointer hapus dan barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Namun sebelumnya pointer head harus menunjuk terlebih dahulu ke node selanjutnya. - Jika head masih NULL maka berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

205 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENGHAPUSAN DATA DIDEPAN 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;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n"; } 22 September 2018 Bina Sarana Informatika

206 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENGHAPUSAN DATA DIBELAKANG - Tidak diperlukan pointer bantu yang mengikuti pointer hapus yang berguna untuk menunjuk ke NULL - Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev ke node sebelumnya, yang akan diset agar menunjuk ke NULL setelah penghapusan dilakukan. 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; head = NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

207 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENGHAPUSAN DATA DIBELAKANG Contoh head head hapus null head hapus 22 September 2018 Bina Sarana Informatika

208 Bina Sarana Informatika
DOUBLE LINKED LIST NON CIRCULAR PENGHAPUSAN DATA SEMUA void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; 22 September 2018 Bina Sarana Informatika

209 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
- Dibutuhkan dua buah variabel pointer: head dan tail - Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node terakhir. head tail Inisialisasi DLLNC TNode *head, *tail; Fungsi Inisialisasi DLLNC void init(){ head = NULL; tail = NULL; } 22 September 2018 Bina Sarana Informatika

210 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di depan Penambahan node baru akan selalu dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada tail/head nya. Sedangkan jika tidak kosong, data akan ditambahkan didepan head, kemudian node baru akan berubah menjadi head. 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";} 22 September 2018 Bina Sarana Informatika

211 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di depan Contoh 1. List masih kosong (head=tail=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

212 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di depan 3. Datang data baru, misalnya 20 (di depan) 22 September 2018 Bina Sarana Informatika

213 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di belakang Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut akan menjadi tail void insertBelakang(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 {tail->next = baru; baru->prev = tail; tail = baru; tail->next = NULL;} cout<<"Data masuk\n";} 22 September 2018 Bina Sarana Informatika

214 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di belakang Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 tail 22 September 2018 Bina Sarana Informatika

215 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di belakang 3. Datang data baru, misalnya 20 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

216 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Penambahan node baru ke linked list di belakang 4. Datang data baru, misal 25 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

217 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
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";} Perulangan dilakukan sampai dengan node terakhir (node tail) 22 September 2018 Bina Sarana Informatika

218 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Function untuk menghapus data di data terdepan - Function ini akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada pointer hapus dan barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Namun sebelumnya pointer head harus ditunjuk lebih dahulu ke node sesudahnya agar tetap menunjuk ke node terdepan. - Jika tail masih NULL maka berarti data masih kosong! 22 September 2018 Bina Sarana Informatika

219 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Function untuk menghapus data terdepan 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; tail = NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

220 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Function untuk menghapus data di belakang - 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, maka pointer prev hanya perlu diset agar menunjuk ke NULL. Lalu pointer hapus didelete. tail = tail->prev; tail->next = NULL; delete hapus; } else {d = head->data; head = NULL; tail = NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} void hapusBelakang(){ TNode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = tail; d = tail->data; 22 September 2018 Bina Sarana Informatika

221 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Function untuk menghapus data di belakang head tail hapus head tail hapus null head tail 22 September 2018 Bina Sarana Informatika

222 DOUBLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD dan TAIL
Function untuk menghapus semua elemen void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; tail = NULL; 22 September 2018 Bina Sarana Informatika

223 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR PENGANTAR - Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. - Double Linked List Circular pointer next dan prev nya menunjuk ke dirinya sendiri secara circular. BENTUK NODE DLLC 22 September 2018 Bina Sarana Informatika

224 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Pengertian: Double : artinya field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next Linked List : artinya node-node tersebut saling terhubung satu sama lain. Circular : artinya pointer next dan prev-nya menunjuk ke dirinya sendiri - 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. 22 September 2018 Bina Sarana Informatika

225 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR DOUBLE LINKED LIST CIRCULAR MENGGUNAKAN HEAD - Menggunakan 1 pointer head - Head selalu menunjuk node pertama head Function untuk mengetahui kosong tidaknya LinkedList int isEmpty(){ if(head == NULL) return 1; else return 0; } 22 September 2018 Bina Sarana Informatika

226 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR PENAMBAHAN DATA DI DEPAN Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya. Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Dibutuhkan pointer bantu yang digunakan untuk menunjuk node terakhir (head->prev) yang akan digunakan untuk mengikat list dengan node terdepan. 22 September 2018 Bina Sarana Informatika

227 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR PENAMBAHAN DATA DI DEPAN void insertDepan(int databaru){ TNode *baru, *bantu; baru = new TNode; baru->data = databaru; baru->next = baru; baru->prev = baru; if(isEmpty()==1){ head=baru; head->next = head; head->prev = head;} else { bantu = head->prev; baru->next = head; head->prev = baru; head = baru; head->prev = bantu; bantu->next = head; } cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

228 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR PENAMBAHAN DATA DI DEPAN Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

229 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR PENAMBAHAN DATA DI DEPAN 3. Datang data baru, misalnya 20 22 September 2018 Bina Sarana Informatika

230 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR PENAMBAHAN DATA DI DEPAN 4. Datang data baru, misalnya 30 22 September 2018 Bina Sarana Informatika

231 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan data di belakang Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya. Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, namun tidak diperlukan loop karena untuk mengetahui node terbelakang hanya perlu menunjuk pada head->prev saja. Kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan. 22 September 2018 Bina Sarana Informatika

232 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan data di belakang void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = baru; baru->prev = baru; if(isEmpty()==1){ head=baru; head->next = head; head->prev = head; } else { bantu=head->prev; bantu->next = baru; baru->prev = bantu; baru->next = head; head->prev = baru; } cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

233 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan data di belakang Contoh 1. List masih kosong (head=NULL) 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

234 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan data di belakang 3. Datang data baru, misalnya 20 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

235 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan data di belakang 4. Datang data baru, misal 25 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

236 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menampilkan isi linked list void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ do{ cout<<bantu->data<<" "; bantu=bantu->next; }while(bantu!=head); cout<<endl; } else cout<<"Masih kosong\n"; } 22 September 2018 Bina Sarana Informatika

237 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus data di data terdepan - Function ini akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada variabel hapus dan barulah kemudian menghapus variabel hapus dengan menggunakan perintah delete. - Jika tail masih NULL maka berarti data masih kosong! 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"; } 22 September 2018 Bina Sarana Informatika

238 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus data di data terdepan hapus head bantu head bantu 22 September 2018 Bina Sarana Informatika

239 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus node terbelakang - 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. hapus = bantu->next; d = hapus->data; bantu->next = head; delete hapus;} else { d = head->data; head = NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} void hapusBelakang(){ TNode *hapus,*bantu; int d; if (isEmpty()==0){ if(head->next != head){ bantu = head; while(bantu->next != head){ bantu = bantu->next;} 22 September 2018 Bina Sarana Informatika

240 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus node terbelakang head bantu hapus 22 September 2018 Bina Sarana Informatika

241 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR DOUBLE LINKED LIST MENGGUNAKAN HEAD dan TAIL - Dibutuhkan dua buah variabel pointer: head dan tail - Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node terakhir. head tail Function untuk mengetahui kosong tidaknya LinkedList int isEmpty(){ if(tail == NULL) return 1; else return 0; } head tail 22 September 2018 Bina Sarana Informatika

242 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Pengkaitan node baru ke linked list di depan Penambahan node baru akan selalu dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada tail/head nya. Sedangkan jika tidak kosong, data akan ditambahkan didepan head, kemudian node baru akan berubah menjadi head. 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; tail->next = tail; tail->prev = tail;} else { baru->next = head; head->prev = baru; head = baru; head->prev = tail; tail->next = head;} cout<<"Data masuk\n"; } 22 September 2018 Bina Sarana Informatika

243 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Pengkaitan node baru ke linked list di depan 1. List masih kosong (head=tail=NULL) head tail 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

244 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Pengkaitan node baru ke linked list di depan 3. Datang data baru, misalnya 20 (di depan) 22 September 2018 Bina Sarana Informatika

245 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan node di belakang Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut akan menjadi tail void insertBelakang(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; tail->next = tail; tail->prev = tail;} else { tail->next = baru; baru->prev = tail; tail = baru; tail->next = head; head->prev = tail; } cout<<"Data masuk\n"; 22 September 2018 Bina Sarana Informatika

246 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan node di belakang 1. List masih kosong (head=tail=NULL) head tail 2. Masuk data baru, misalnya 5 22 September 2018 Bina Sarana Informatika

247 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan node di belakang 3. Datang data baru, misalnya 20 (penambahan di belakang) head tail baru 22 September 2018 Bina Sarana Informatika

248 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Penambahan node di belakang 4. Datang data baru, misal 25 (penambahan di belakang) 22 September 2018 Bina Sarana Informatika

249 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menampilkan isi linked list void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ do{ cout<<bantu->data<<" "; bantu=bantu->next; }while(bantu!=tail->next); cout<<endl; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

250 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus data di data terdepan - Function ini akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list - Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada variabel hapus dan barulah kemudian menghapus variabel hapus dengan menggunakan perintah delete. - Jika tail masih NULL maka berarti data masih kosong! void hapusDepan(){ TNode *hapus; int d; if (isEmpty()==0){ if(head != tail){ hapus = head; d = hapus->data; head = head->next; tail->next = head; head->prev = tail; delete hapus; } else { d = head->data; head = NULL; tail = NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

251 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus data di data terdepan head hapus tail hapus head tail 22 September 2018 Bina Sarana Informatika

252 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus node terbelakang - 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. void hapusBelakang(){ TNode *hapus; int d; if (isEmpty()==0){ if(head != tail){ hapus = tail; d = hapus->data; tail = tail->prev; tail->next = head; head->prev = tail; delete hapus; } else {d = head->data; head = NULL; tail = NULL;} cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";} 22 September 2018 Bina Sarana Informatika

253 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus node terbelakang head tail 22 September 2018 Bina Sarana Informatika

254 Bina Sarana Informatika
DOUBLE LINKED LIST CIRCULAR Function untuk menghapus semua elemen LinkedList void clear(){ TNode *bantu,*hapus; if (isEmpty()==0){ bantu = head; while(bantu->next!=head){ hapus = bantu; bantu = bantu->next; delete hapus;} head = NULL;} } 22 September 2018 Bina Sarana Informatika

255 Bina Sarana Informatika
ARRAY STACK and QUEUE Stack with Array of Struct - Deklarasi MAX_STACK #define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9 - Deklarasi STACK dengan struct dan array data typedef struct STACK{ int top; char data[10][10]; //misalkan : data adalah array of string //berjumlah 10 data, masing-masing string //menampung maksimal 10 karakter }; - Deklarasi/buat variabel dari struct STACK tumpuk; 22 September 2018 Bina Sarana Informatika

256 Bina Sarana Informatika
ARRAY STACK and QUEUE Inisialisasi Stack - Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah KOSONG! - Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH! - Ilustrasi stack pada saat inisialisasi: 9 MAX_STACK 8 7 void inisialisasi(){ tumpuk.top = -1; } 6 5 4 3 2 1 Top = -1 22 September 2018 Bina Sarana Informatika

257 Bina Sarana Informatika
ARRAY STACK and QUEUE Fungsi IsFull - Untuk memeriksa apakah stack sudah penuh? - Dengan cara memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full - Ilustrasi: MAX_STACK 9 8 Top 7 6 int IsFull(){ if(tumpuk.top == MAX_STACK-1) return 1; else return 0; } 5 4 3 2 1 1 22 September 2018 Bina Sarana Informatika

258 Bina Sarana Informatika
ARRAY STACK and QUEUE Fungsi IsEmpty - Untuk memeriksa apakah stack masih kosong? - Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong! - Program: int IsEmpty(){ if(tumpuk.top == -1) return 1; else return 0; } 22 September 2018 Bina Sarana Informatika

259 Bina Sarana Informatika
ARRAY STACK and QUEUE Fungsi Push - Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack - Tambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack berdasarkan indeks top of stack setelah ditambah satu (diincrement) - Ilustrasinya: 9 MAX_STACK 9 MAX_STACK 8 8 Misalkan, Radio hendak masuk 7 7 6 6 5 Radio 5 4 4 Top = Top + 1 = 4 3 Top mula-mula = 3 3 2 2 1 1 22 September 2018 Bina Sarana Informatika

260 Bina Sarana Informatika
ARRAY STACK and QUEUE Fungsi Push void Push(char d[10]){ tumpuk.top++; strcpy(tumpuk.data[tumpuk.top],d); } Fungsi Pop - Untuk mengambil elemen teratas dari stack. - Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang - Ilustrasinya: 22 September 2018 Bina Sarana Informatika

261 Bina Sarana Informatika
ARRAY STACK and QUEUE Fungsi Pop MAX_STACK 9 MAX_STACK 9 8 8 7 7 Elemen Radio (teratas) hendak dihapus 6 6 Radio 5 5 4 4 Top sekarang = 4 3 3 Top = Top - 1 2 2 1 1 void Pop(){ printf("Data yang terambil = %s\n",tumpuk.data[tumpuk.top]); tumpuk.top--; } 22 September 2018 Bina Sarana Informatika

262 Bina Sarana Informatika
ARRAY STACK and QUEUE Fungsi Print - Untuk menampilkan semua elemen-elemen stack - Dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil! MAX_STACK 9 8 Jika kita ingin mengeprint elemen stack, kita harus membaca elemen array dari indeks yang ada isinya tertinggi, yaitu dari Top downto 0 Sehingga kita akan menampilkan elemen: Radio, DVD, Compo, VCD, dan TV 7 6 5 4 Top 3 2 void TampilStack(){ for(int i=tumpuk.top;i>=0;i--){ printf("Data : %s\n",tumpuk.data[i]);}} 1 22 September 2018 Bina Sarana Informatika

263 Bina Sarana Informatika
ARRAY STACK and QUEUE Contoh Kasus Gambarkan Stack atau tentukan nilai nilai dari masing masing Operasi Operasi dibawah ini secara berturut turut : Jawabnya : Kosongkan (S) CekPenuh (S) = False MAX_STACK Push (”a” , S) MAX_STACK Top = -1 Top 22 September 2018 Bina Sarana Informatika

264 Bina Sarana Informatika
ARRAY STACK and QUEUE Contoh Kasus Push (”b” , S) Pop (S) MAX_STACK MAX_STACK Top Top Cekkosong (S) = False Top (S) = ”a” 22 September 2018 Bina Sarana Informatika

265 Bina Sarana Informatika
ARRAY STACK and QUEUE Contoh Kasus Push (”c” , S) Push (”d” , S) MAX_STACK MAX_STACK Top Top Push (”e” , S) Pop (S) MAX_STACK MAX_STACK Top Top 22 September 2018 Bina Sarana Informatika

266 Bina Sarana Informatika
ARRAY STACK and QUEUE Contoh Kasus Pop (S) Top (S) = ”C” MAX_STACK Top 22 September 2018 Bina Sarana Informatika

267 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - Queue = Antrian - Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya - DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian - Antrian dapat dibuat dengan menggunakan: Liniear Array dan Circular Array 22 September 2018 Bina Sarana Informatika

268 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY 1. QUEUE DENGAN LINIEAR ARRAY - Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya - Sehingga membutuhkan variabel Head dan Tail 1 2 3 4 5 6 7 Max = 7 Head = -1 DEKLARASI QUEUE Tail = -1 #define MAX 8 typedef struct{ int data[MAX]; int head; int tail; } Queue; Queue antrian; 22 September 2018 Bina Sarana Informatika

269 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY OPERASI-OPERASI PADA QUEUE - Create() o Untuk menciptakan dan menginisialisasi Queue o Dengan cara membuat Head dan Tail = -1 1 2 3 4 5 6 7 Max = 7 Head = -1 Antrian pertama kali Tail = -1 void Create(){ antrian.head=antrian.tail=-1; } 22 September 2018 Bina Sarana Informatika

270 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - IsEmpty() o Untuk memeriksa apakah Antrian sudah penuh atau belum o Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty o Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubahubah o Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail 1 2 3 4 5 6 7 Max = 7 Antrian Kosong karena Tail = -1 Head = -1 Tail = -1 int IsEmpty(){ if(antrian.tail==-1) return 1; else return 0;} 22 September 2018 Bina Sarana Informatika

271 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - IsFull() o Untuk mengecek apakah Antrian sudah penuh atau belum o Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh 1 2 3 4 5 6 7 Max = 7 Head = 0 Tail = 7 Antrian penuh karena Tail = Max -1 int IsFull(){ if(antrian.tail==MAX-1) return 1; else return 0; } 22 September 2018 Bina Sarana Informatika

272 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - Enqueue(data) o Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang o Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail Enqueue(8) 1 2 3 4 5 6 7 Max = 7 Tail = 2 Head = 0 Tail = 3 void Enqueue(int data){ if(IsEmpty()==1){ antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]); } else if(IsFull()==0){ antrian.tail++; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]);}} 22 September 2018 Bina Sarana Informatika

273 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - Dequeue() o Digunakan untuk menghapus elemen terdepan/pertama dari Antrian o Dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. o Penggeseran dilakukan dengan menggunakan looping Dequeue() 1 2 3 4 5 6 7 Max = 7 Head = 0 Tail = 3 1 2 3 4 5 6 7 Max = 7 Head = 0 Tail = 3 Tail = 2 Maju semua, tail -- 22 September 2018 Bina Sarana Informatika

274 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - Dequeue() int Dequeue(){ int i; int e = antrian.data[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++){ antrian.data[i] = antrian.data[i+1];} antrian.tail--; return e;} - Clear() o Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 o Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca 22 September 2018 Bina Sarana Informatika

275 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - Clear() 1 2 3 4 5 6 7 Max = 7 Head = -1 Tail = -1 void Clear(){ antrian.head=antrian.tail=-1; printf("data clear"); } 22 September 2018 Bina Sarana Informatika

276 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY - Tampil() o Untuk menampilkan nilai-nilai elemen Antrian o Menggunakan looping dari head s/d tail void Tampil(){ if(IsEmpty()==0){ for(int=antrian.head;i<=antrian.tail;i++){ printf("%d ",antrian.data[i]);}} else printf("data kosong!\n"); } 22 September 2018 Bina Sarana Informatika

277 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY 2. QUEUE DENGAN CIRCULAR ARRAY Circular Array adalah Array yang menyerupai sebuah lingkaran dengan titik awal (Head) dan titik akhir (Tail) 1 2 3 4 7 6 5 public : QueueCircular() { Head = 0; Tail = Max_Queue – 1; Data = new typeQueue[Max_Queue}; };Virtual ~QueueCircular() {Clear(); Delete Data;}; Virtual typeQueue Enqueue ( typeQueue elemen); Virtual typequeue Dequeue(); Virtual void Clear(); Virtual bool IsEmpty(); Virtual bool IsFull();}; Head Tail Deklarasi Queue Class QueueCircular : public Queue { Private : typeQueue* Data; int Head; int Tail; 22 September 2018 Bina Sarana Informatika

278 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY Operasi operasi dalam Circular Array Konstruktor Berguna untuk menciptakan Queue yang baru dan kosong, dan memberikan nilai awal (head) = 0 dan nilai akhir (Tail) dengan jumlah maximal data yang akan ditampung/Array. Algoritma Kelas Konstruktor 1 2 3 4 7 6 5 Head QueueCircular : QueueCircular() { Head = 0; Tail = Max_Queue – 1; Data = new typeQueue [Max_Queue]; }; Tail=Max_Queue - 1 Head = 0; Tail = MAX_QUEUE - 1 22 September 2018 Bina Sarana Informatika

279 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY IsEmpty Berguna untuk mengecek apakah Queue masih kosong atau sudah berisi. Mengecek apakah Tail masih terletak bersebelahan dengan Head dan Tail lebih besar dari Head atau tidak. Jika benar maka Queue masih kosong. Algoritma IsEmpty. Bool QueueCircular : IsEmpty() { Return (((Tail + 1) % MAX_QUEUE) == Head); }; 1 2 3 4 7 6 5 Tail = 4 IsEmpty = true Head = 5 22 September 2018 Bina Sarana Informatika

280 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY IsFull (Penuh) Algoritma IsFull Bool QueueCircular : IsFull() { Return ((Tail + 2) % MAX_Queue == Head); }; 1 2 3 4 7 6 5 10 20 30 40 50 60 70 Head = 0 IsFull == True Tail = 6 22 September 2018 Bina Sarana Informatika

281 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY EnQueue (AddQueue) Menambah sebuah elemen kedalam Queue Tail dan Head mula mula bernilai 0. Algoritma EnQueue typeQueue QueueCircular : EnQueue(typeQueue elemen) { IF ( ! IsFull()) { Tail = (( Tail + 1) % MAX_QUEUE); }; Data[Tail] = elemen; Return elemen 22 September 2018 Bina Sarana Informatika

282 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY EnQueue (AddQueue) EnQueue (15, Q) Not Full 1 2 3 4 7 6 5 Head = 0 IsFull() == False Tail = 7 1 2 3 4 7 6 5 15 Tail = 0 Tail = (7+1) % 8; // Tail = 0 Data [0] = 15; Head = 0 22 September 2018 Bina Sarana Informatika

283 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY DeQueue Menghapus sebuah elemen dari Queue. Maka Head berpindah satu langkah kebelakang. Algoritma DeQueue. typeQueue QueueCircular : DeQueue() {typeQueue Temp; if ( ! IsEmpty()) {Temp = Data[Head]; Head = (( Head + 1) % MAX_Queue); }; Return Temp; }; 1 2 3 4 7 6 5 15 20 30 40 50 IsEmpty() == False Temp = Data[0]; Temp = 15 Head = 0 Tail = 4 22 September 2018 Bina Sarana Informatika

284 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY DeQueue () 1 2 3 4 7 6 5 15 20 30 40 50 Head = 1 Tail = 4 Head = ( ) % 7 // Head = 1 Return 15; 22 September 2018 Bina Sarana Informatika

285 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY Contoh Kasus Gambarkan Queue dengan Implementasi Array Max 6, jenis elemen adalah Char, kemudian tuliskan hasil dari Operasi berikut secara berturut-turut : MakeNull (Q) EndQueue (a, Q) EndQueue (b, Q) Penuh (Q) EndQueue (c, Q) DeQueue (Q) Front (Q) DeQueue (Q) Kosong (Q) Jawabnya : 1 2 3 4 5 MakeNull (Q) Head Tail 22 September 2018 Bina Sarana Informatika

286 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY EndQueue (a, Q) 1 2 3 4 5 Tail = Tail + 1 Tail = 0 a Head Tail EndQueue (b, Q) Tail 1 2 3 4 5 Tail = Tail + 1 Tail = 1 b a Head 22 September 2018 Bina Sarana Informatika

287 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY Penuh (Q) Tail 1 2 3 4 5 ((Tail + 2) % Max_Queue == Head) b (( ) % 5 == 0) 3 == 0 a Head Penuh == False EndQueue (c, Q) Tail 1 2 3 4 5 Tail = Tail + 1 Tail = 2 c b a Head 22 September 2018 Bina Sarana Informatika

288 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY DeQueue (Q) Tail Head = ( Head + 1) 1 2 3 4 5 Head = ( 0 + 1) c b Head = 1 a Head = 1 DeQueue (Q) Head = ( Head + 1) Tail Head = 2 Head = ( 1 + 1) 1 2 3 4 5 Front (Q) = b Head = 2 c b Front = Head a 22 September 2018 Bina Sarana Informatika

289 Bina Sarana Informatika
QUEUE DENGAN MENGGUNAKAN ARRAY Kosong (Q) ((Tail + 1) % Max_Queue) == Head ((2 + 1) % 5) == 2 3 == 2 Kosong (Q) False ((Tail + 1) % Max_Queue) == Head DeQueue (Q) ((2 + 1) % 5) == 3 Tail Head = 3 3 == 3 True 1 2 3 4 5 c b a Head = ( Head + 1) Head = ( 2 + 1) Head = 3 22 September 2018 Bina Sarana Informatika

290 Bina Sarana Informatika
POHON (TREE) PENGERTIAN TREE • 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. 22 September 2018 Bina Sarana Informatika

291 Bina Sarana Informatika
POHON (TREE) NODE ROOT - Node root dalam sebuah tree adalah suatu node yang memiliki hirarki tertinggi dan dapat juga memiliki node-node anak. - Node root adalah node khusus yang tercipta pertama kalinya. - Node-node lain di bawah node root saling terhubung satu sama lain dan disebut subtree IMPLEMENTASI Contoh penggunaan struktur pohon : - Silsilah keluarga - Hasil pertandingan yang berbentuk turnamen - Struktur organisasi dari sebuah perusahaan 22 September 2018 Bina Sarana Informatika

292 Bina Sarana Informatika
POHON (TREE) ISTILAH DALAM TREE 22 September 2018 Bina Sarana Informatika

293 Bina Sarana Informatika
POHON (TREE) GAMBAR TREE Level 1 2 3 Keterangan Size = 7 Height = 3 Root = A Leaf = D,E,F,G Degree (C) = 2 Ancestor (F) = C,A Descendant (C) = F,G Parent (D) = B Child (A) = B,C Sibling (F) = G 22 September 2018 Bina Sarana Informatika

294 Bina Sarana Informatika
POHON (TREE) Contoh Kasus Dari model expresi berikut (A(B(C(DE))F(GH(IJ))K(L(MN)O))) gambar kedalam bentuk Pohon A B F K C G H L O D E I J M N Catatan : Sebuah Node n yg berdiri sendiri adalah Pohon Jika ada k buah pohon dengan akar n1, n2, …. Nk maka kita dapat membentuk pohon baru dengan membuat n sebagai Akar dari n1, n2,..nk. 22 September 2018 Bina Sarana Informatika

295 Bina Sarana Informatika
POHON (TREE) Jawab Internal Node (Node Dalam) adalah semua node yang memiliki anak cabang, Misalnya : A, B, C, F, H, K, L Eksternal Node (Node Luar) Daun (Leaf) adalah semua node yang tidak memiliki cabang. Misalnya : D, E, G, I, J, M, N, O Lintasan (Path) adalah sebuah node dimana urutan node node mulai dari Akar sampai Node X. Misalnya : Path E : A, B, C, E Panjang Lintasan sebuah node X adalah jumlah node yang dilalui untuk mendapatkan X Misalnya Panjang Path E = 4 Tinggi Pohon adalah Panjang lintasan, Misalnya Tinggi Pohon = 4 Kedalam sebuah node adalah Panjang lintasan untuk mendapatkan node X, Misalnya Kedalam H = 3 Sibling (Saudara) adalah yang mempunyai induk yang sama Misalnya B, F, K : A 22 September 2018 Bina Sarana Informatika

296 Bina Sarana Informatika
POHON (TREE) Ancestor ( Pendahulu) semua data yang ada diatasnya Misalnya : M : L, K, A Descendent (Turunan) adalah semua data yang ada dibawahnya Misalnya : A B C D E F G H I J K L M N O 22 September 2018 Bina Sarana Informatika

297 Penulusuran Pohon (Tree Traversal)
B F K C E G H I J L M N O D Ada tiga macam traversal pada pohon biner : Preorder (depth-first order), dengan urutan pemrosesan : akar, subpohon kiri, subpohon kanan Maka : A, B, C, D, E, F, G, H, I, J, K, L, M, N, O Inorder (symmetric order), dengan urutan pemrosesan : subpohon kiri, akar, subpohon kanan Maka : D, C, E, B, A, G, F, I, H, J, M, L, N, K, O 22 September 2018 Bina Sarana Informatika

298 Penulusuran Pohon (Tree Traversal)
Postorder, dengan urutan pemrosesan : subpohon kiri, subpohon kanan, akar Maka : D, E, C, B, G, I, J, H, F, M, N, L, O, K, A Order by level (Breadth First Search : Pencarian secara melebar). Maka : A, B, F, K, C, G, H, L, O, D, E, I, J, M, N Traversel : yaitu operasi kunjungan terhadap node-node dalam pohon dimana masing-masing node akan dikunjungi sekali. 22 September 2018 Bina Sarana Informatika

299 Bina Sarana Informatika
POHON (TREE) Contoh Kasus Lakukan Penelusuran pada pohon biner berikut ini : Order by Level : A, B, C, D, E, F, G, H, I PreOrder : A, B, D, G, C, E, H, I, F InOrder : D, G, B, A, H, E, I, C, F PostOrder : G, D, B, H, I, E, F, C, A 22 September 2018 Bina Sarana Informatika

300 Bina Sarana Informatika
POHON (TREE) JENIS-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 dua child. 22 September 2018 Bina Sarana Informatika

301 Bina Sarana Informatika
POHON (TREE) Jenis Binary Tree : - Full Binary Tree: semua node (kecuali leaf) pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama. 22 September 2018 Bina Sarana Informatika

302 Bina Sarana Informatika
POHON (TREE) Jenis Binary Tree : - Complete Binary Tree: mirip dengan full binary tree, tapi tiap subtree boleh memiliki panjang path yang berbeda dan tiap node (kecuali leaf) memiliki 2 anak. 22 September 2018 Bina Sarana Informatika

303 Bina Sarana Informatika
POHON (TREE) Jenis Binary Tree : - Skewed Binary Tree: binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anak. 22 September 2018 Bina Sarana Informatika

304 Bina Sarana Informatika
POHON (TREE) IMPLEMENTASI PROGRAM TREE - Tree dapat dibuat dengan menggunakan linked list secara rekursif. - Linked list yang digunakan adalah double linked list. - Data yang pertama kali masuk akan menjadi node root. - Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan node root. 22 September 2018 Bina Sarana Informatika

305 Bina Sarana Informatika
POHON (TREE) Representasi Fisik Pohon Biner Representasi Fisik Berkait dengan Pointer Pohon biner di atas dapat direpresentasikan sebagai berikut : 22 September 2018 Bina Sarana Informatika

306 Bina Sarana Informatika
POHON (TREE) Perhatikan struktur pohon biner berikut ini : #define NIL NULL typedef ... InfoType; // tipe info terdefinisi typedef struct TNode *address; typedef address BinTree; typedef struct TNode { InfoType Info; BinTree Left; BinTree Right; } Node; 22 September 2018 Bina Sarana Informatika

307 Bina Sarana Informatika
POHON (TREE) Representasi Fisik Kontigu Secara umum simpul-simpul pohon biner dapat dinomori sebagai berikut : Contoh : 22 September 2018 Bina Sarana Informatika

308 Bina Sarana Informatika
POHON (TREE) Representasi Fisik Kontigu Karena array pada C dimulai dengan indeks 0, maka penomoran simpul-simpul pohon biner bergeser 1 : Contoh : 22 September 2018 Bina Sarana Informatika

309 Bina Sarana Informatika
POHON (TREE) Struktur pohon biner adalah sebagai berikut : #define MaxNode 100; // maksimum simpul pada complete bintree typedef ... InfoType; // tipe info terdefinisi typedef struct TNode { InfoType Info; int Used; } Node; Node BinTree[MaxNode]; 22 September 2018 Bina Sarana Informatika

310 Bina Sarana Informatika
POHON (TREE) Contoh Kasus A B C D E F G Lakukan Representasi terhadap Pohon Biner diatas : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A B C D E F G 22 September 2018 Bina Sarana Informatika

311 Bina Sarana Informatika
POHON (TREE) Deklarasi struct typedef struct Tree{ int data; Tree *left; Tree *right; } Deklarasi variabel: Tree *pohon; Ilustrasi: 22 September 2018 Bina Sarana Informatika

312 Bina Sarana Informatika
POHON (TREE) Operasi-operasi pada Tree: - Create: membentuk sebuah tree baru yang kosong. pohon = NULL; - Clear: menghapus semua elemen tree. pohon = NULL; - Empty: mengetahui apakah tree kosong atau tidak int isEmpty(Tree *pohon){ if(pohon == NULL) return 1; else return 0;} - 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. 22 September 2018 Bina Sarana Informatika

313 Bina Sarana Informatika
POHON (TREE) Operasi-operasi pada Tree: - Find: mencari node di dalam Tree secara rekursif sampai node tersebut ditemukan dengan menggunakan variable bantuan ketemu. Syaratnya adalah tree tidak boleh kosong. Ilustrasi operasi Insert: 1. Insert(root, 65) 2. Insert(left, 5) 3. Insert(right, 70) 22 September 2018 Bina Sarana Informatika

314 Bina Sarana Informatika
POHON (TREE) Operasi-operasi pada Tree: 4. Insert(left, 3) 5. Insert(right, 10) 22 September 2018 Bina Sarana Informatika

315 Bina Sarana Informatika
POHON (TREE) Operasi-operasi pada Tree: void tambah(Tree **root,int databaru){ if((*root) == NULL){ Tree *baru; baru = new Tree; 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!"); } 22 September 2018 Bina Sarana Informatika

316 Bina Sarana Informatika
POHON (TREE) Pohon Ekspresi (Expression Tree) Penguraian terhadap Exp. MM * OP A OP B c. (2 + 3) * 2 + + 2 A B 2 3 + a d. (2+3*2) * 3+3 + 2 3 * 3 + + 3 + 2 * b * 2 2 OP * 3 2 3 2 22 September 2018 Bina Sarana Informatika

317 Bina Sarana Informatika
POHON (TREE) Pohon Ekspresi (Expression Tree) Penguraian terhadap Exp. MM e. (2+2*3^2) / (4-2) * (4+3) + (5+6) 88 + 70 10 * 3 + 11 7 / 6 5 + + 20 2 4 3 2 - * 18 4 2 2 ^ 9 Note : Operator = Internal Node Operand = Eksternal Node (Daun) 3 2 22 September 2018 Bina Sarana Informatika

318 Bina Sarana Informatika
POHON (TREE) Pohon Ekspresi (Expression Tree) Penelusuran secara preorder akan menghasilkan ekspresi aritmatika dalam notasi prefix Penelusuran secara postorder akan menghasilkan ekspresi aritmatika dalam notasi postfix Penelusuran secara inorder akan menghasilkan ekspresi aritmatika dalam notasi infix tanpa tanda kurung PreOrder : (At, Kr, Kn) = Prefix InOrder : (Kr, At, Kn) = Infix (tanpa Kurung) PreOrder : (Kr, Kn, At) = PostFix 22 September 2018 Bina Sarana Informatika

319 Bina Sarana Informatika
POHON (TREE) Pohon Ekspresi (Expression Tree) Lakukan Ekpresi PreOrder, InOrder, PostOrder terhadap Pohon berikut ini : + + b * 2 a 2 * 2 3 3 2 PreOrder : + 2 3 PreOrder : + 2 * 3 2 InOrder : 2 + 3 InOrder : * 2 PostOrder : 2 3 + PostOrder : * + * PreOrder : * c. (2 + 3) * 2 + 2 InOrder : * 2 2 3 PostOrder : * 22 September 2018 Bina Sarana Informatika

320 Bina Sarana Informatika
POHON (TREE) Pohon Ekspresi (Expression Tree) Lakukan Ekpresi PreOrder, InOrder, PostOrder terhadap Pohon berikut ini : d. (2+3*2) * 3+3 + * 3 + 3 2 * 3 2 PreOrder : + * + 2 * InOrder : * 2 * 3 + 3 PostOrder : * + 3 * 3 + 22 September 2018 Bina Sarana Informatika

321 Bina Sarana Informatika
POHON (TREE) Pohon Ekspresi (Expression Tree) Lakukan Ekpresi PreOrder, InOrder, PostOrder terhadap Pohon berikut ini : e. (2+2*3^2) / (4-2) * (4+3) + (5+6) + * + / 6 5 + + 4 3 2 - * 4 2 PreOrder : + * / + 2 * 2 ^ 3 2 – 2 ^ InOrder : * 3 ^ 2 4 – 2 / * 3 2 PostOrder : ^ * / * 22 September 2018 Bina Sarana Informatika

322 Bina Sarana Informatika
POHON (TREE) Contoh Kasus : Tuliskan Expressi awal dari Pohon berikut : + + * * + * 2 * + 2 2 4 + 2 2 3 2 3 3 = ( ) * * ( ) + 2 * ( * 2 ) 22 September 2018 Bina Sarana Informatika

323 Bina Sarana Informatika
POHON (TREE) Dari Expressi awal dari Array berikut : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + * Gambar Pohon Lakukan PreOrder, InOrder, PostOrder Tuliskan Exp. Semula Hitung Nilai dengan mengevaluasi Pohon Jawab : + a. Gambar Pohon * + 2 + 3 + 5 3 4 2 22 September 2018 Bina Sarana Informatika

324 Bina Sarana Informatika
POHON (TREE) Dari Expressi awal dari Array berikut : b. Lakukan PreOrder, InOrder, PostOrder PreOrder = + * InOrder = 2 * PreOrder = * c. Tuliskan Exp. Semula = 2 * ( ) + ( ) + 3 d. Hitung Nilai dengan mengevaluasi Pohon = 24 22 September 2018 Bina Sarana Informatika

325 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) Binary Search Tree adalah pohon biner dengan kekhususan sebagai berikut : Jika P adalah sebuah akar, dan semua info yang tersimpan pada simpul selalu unik, maka : semua simpul pada subpohon kiri mempunyai nilai lebih kecil dari Info(P), dan semua simpul pada subpohon kanan mempunyai nilai lebih besar dari Info(P) Perhatikan gambar berikut ini : 22 September 2018 Bina Sarana Informatika

326 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) Struktur binary search tree adalah sebagai berikut : typedef ... InfoType; // tipe info terdefinisi type ... address; // bergantung representasi fisik, mengacu ke Node typedef address BST; typedef struct TNode { InfoType Info; BST Left; BST Right; } Node; 22 September 2018 Bina Sarana Informatika

327 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) Jika P adalah sebuah binary search tree, maka terdapat selektor sebagai berikut : Info(P) untuk mengakses info dari simpul / akar pohon P Left(P) untuk mengakses subpohon kiri dari P Right(P) untuk mengakses subpohon kanan dari P 22 September 2018 Bina Sarana Informatika

328 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) Operasi dan Fungsi Dasar SearchBST int SearchBST(BST P, InfoType X) { /* mencari apakah ada simpul dengan info = X pada pohon pencarian biner P; jika ada, akan mengembalikan nilai 1, jika tidak, mengembalikan nilai 0 */ if (P == NIL) return(0); else if (X == Info(P)) return (1); else if (X < Info(P)) return(SearchBST(Left(P),X)); else return(SearchBST(Right(P),X)); } 22 September 2018 Bina Sarana Informatika

329 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) InsertBST void InsertBST(BST *P, InfoType X) { /* I.S. P mungkin kosong F.S. X akan disisipkan sebagai elemen binary search tree P Proses : menyisipkan X menjadi elemen binary search tree */ if (*P == NIL) // Sisip { // alokasi alamat untuk simpul baru Info(*P) = X; Left(*P) = NIL; Right(*P) = NIL; } else if (X < Info(*P)) InsertBST(&Left(*P),X); else InsertBST(&Right(*P),X); 22 September 2018 Bina Sarana Informatika

330 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) Contoh : Jika inputnya adalah 21 buah bilangan integer sebagai berikut : 22 September 2018 Bina Sarana Informatika

331 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) DeleteBST Penghapusan sebuah simpul dengan info = X pada sebuah pohon pencarian biner P tidak semudah penyisipan. Kasus-kasus : tidak ada simpul dengan info = X simpul dengan info = X merupakan simpul daun, sehingga dapat langsung dihapus. Perhatikan gambar berikut ini : 22 September 2018 Bina Sarana Informatika

332 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) simpul dengan info = X hanya mempunyai satu anak (kiri xor kanan), sehingga tempatnya digantikan oleh simpul anaknya. Perhatikan gambar berikut ini : 22 September 2018 Bina Sarana Informatika

333 Bina Sarana Informatika
POHON (TREE) Binary Search Tree (Pohon Pencarian Biner) simpul dengan info = X mempunyai anak kiri dan anak kanan, sehingga akan digantikan oleh simpul terkanan dari subpohon kiri, atau simpul terkiri dari subpohon kanan. Perhatikan gambar berikut ini : 22 September 2018 Bina Sarana Informatika


Download ppt "Bina Sarana Informatika"

Presentasi serupa


Iklan oleh Google