Fathoni m bahan ajar_if2018_prak.struktur data

11,422 views
11,213 views

Published on

Modul Praktikum Struktur Data

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,422
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
460
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Fathoni m bahan ajar_if2018_prak.struktur data

  1. 1. BAHAN AJAR Praktek Struktur Data PENGAJAR : FATHONI MAHARDIKA SEMESTER : II (Genap) TEKNIK INFORMATIKASEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK SUMEDANG 2011 Disusun oleh: Fathoni Mahardika
  2. 2. LEMBAR PENGESAHANJUDUL : BAHAN AJARTOPIK BAHAN AJAR : Praktikum Struktur DataNAMA : FATHONI MAHARDIKA, S.KomNIP/NIK : 0416068401 SUMEDANG, 27 JANUARI 2012 Mengetahui : Pembimbing, KETUA STMIK SUMEDANG, PEMBANTU KETUA I, Dady Mulyadi, Drs., M.M. Dwi Yuniarto, Sos., M.Kom. NIK. 00010001 NIK. 05010020 Disusun oleh: Fathoni Mahardika
  3. 3. BAHAN AJAR SESSI/PERKULIAHAN KE 1 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan salah satu bahasa (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami silabus, sap mata kuliah praktikum struktur data 2. Memahami dasar hubungan algoritma dengan struktur data 3. Mengenal dan memahami dasar struktur data Pokok Bahasan : Pengenalan Praktikum Struktur Data Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari ruang lingkup, memahami dasar hubungan algoritma dengan struktur data, serta kategori materi struktur data secara garis besar yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta Disusun oleh: Fathoni Mahardika
  4. 4. Pengantar Struktur DataBagaimana cara mengatasi masalah implementasi program dengan komputer? 1. Pemahaman masalah secara menyeluruh dan persiapan data 2. Keputusan operasi-operasi yang dilakukan terhadap data 3. Penyimpanan data-data pada memori sehingga tersimpan dan terstruktur secara logis, operasinya efisien 4. Pengambilan keputusan terhadap bahasa pemrograman mana yang paling cocok untuk jenis data yang adaPerbedaan Tipe data, Objek data, dan Struktur Data 1. Tipe data adalah jenis data yang mampu ditangani oleh suatu bahasa pemrograman pada komputer. 2. Tiap-tiap bahasa pemrograman memiliki tipe data yang memungkinkan: 3. Deklarasi terhadap variabel tipe data tersebut 4. Menyediakan kumpulan operasi yang mungkin terhadap variabel bertipe data tersebut 5. Jenis obyek data yang mungkin 6. Contoh tipe data di C? Java? Pascal? .NET? Disusun oleh: Fathoni Mahardika
  5. 5. BAHAN AJAR SESSI/PERKULIAHAN KE 2 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan salah satu bahasa (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep fungsi, dan kegunaan array dalam bahasa C++/Pascal 2. Memahami konsep fungsi, dan kegunaan struct dalam bahasa C++/Pascal 3. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan array dan struct 4. Pokok Bahasan : Pengenalan Struktur Data Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan array dalam bahasa C/Pascal, mempelajari fungsi dan kegunaan struct, membuat program sederhana yang di dalamnya terdapat array dan struct yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta Disusun oleh: Fathoni Mahardika
  6. 6. ARRAYArray adalah suatu tipe data terstruktur yang berupa sejumlah data sejenis (bertipedata sama) yang jumlahnya tetap dan diberi suatu nama tertentu.Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi.DEKLARASItipe_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 :Int nilai[6];INISIALISASIMenginisialisasi array sama dengan memberikan nilai awal array pada saatdidefinisikan.int nilai[6] = {8,7,5,6,4,3};Contoh diatas berarti berarti anda memesan tempat di memori komputer sebanyak6 tempatdengan indeks dari 0-5, dimana indeks ke-0 bernilai 8, ke-1 bernilai 7, dst, dandimana semua elemennya bertipe data integer.PENGAKSESANnama_var_array [indeks];Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan denganmengeset nilai atau menampilkan nilai pada indeks yang dimaksud. Pengaksesanelemen array dapat dilakukan berurutan atau random berdasarkan indeks tertentusecara langsung.Contoh :#include <stdio.h>void main (){ int billy [] = {16, 2, 77, 40, 12071}; int n, result=0; for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } printf("%d",result);} Disusun oleh: Fathoni Mahardika
  7. 7. Contoh :#include <stdio.h>#include <conio.h>void main (){ int A [5]={20,9,1986,200,13},n,edit; clrscr(); printf("Data yang laman"); for (n=0;n<5;n++) { printf("%i ",A[n]); } printf("nData yang baru : n"); A[0]=4; A[1]=2; A[2]=1; A[3]=3; A[4]=5; for (n=0;n<5;n++) { printf("%i ",A[n]); }}Contoh :#include <stdio.h>#include <conio.h>void main (){ int A [5]={20,9,1986,200,13},n; clrscr(); printf("Data yang laman"); for (n=0;n<5;n++) { printf("%i ",A[n]); } printf("nData yang baru : n"); for (n=0;n<4;n++) { printf("%i ",A[n]); }}Contoh :#include <stdio.h>#include <conio.h>void main (){ int A [5]={20,9,1986,200,13},n,hapus; clrscr(); printf("Data yang laman"); for (n=0;n<5;n++) Disusun oleh: Fathoni Mahardika
  8. 8. { printf("%i ",A[n]); } printf("data yang ingin dihapus : "); scanf("%i",&hapus); printf("nData yang baru : n"); for (n=hapus-1;n<5-1;n++) { A[n]=A[n+1]; } for (n=0;n<4;n++) { printf("%i ",A[n]); }}LATIHAN 1. Buatlah fungsi untuk array 1 dimensi untuk ADD, EDIT, DELETE, dan VIEW.STRUCT  Bentuk struktur data yang dapat menyimpan variabel-variabel dalam 1 nama, namun memiliki tipe data yang berbeda ataupun sama. Variable- variabel tersebut memiliki kaitan satu sama yang lain.Bentuk umum :typedef struct nama_struct{tipe_data <nama_var>;tipe_data <nama_var>;....};Ada 2 cara pendeklarasian struct, yaitu :Deklarasi 1:typedef struct Mahasiswa {char NIM[8];char nama[50];float ipk;};Deklarasi 2 :struct {char NIM[8];char nama[50];float ipk;} mhs; Disusun oleh: Fathoni Mahardika
  9. 9. contoh#include <stdio.h>#include <iostream.h>void main(){ struct orang { char nama[40]; short umur; }saya; printf("nama : "); cin.getline(saya.nama,40); printf("umur :" ); scanf("%i",&saya.umur); printf("%s berumur %i",saya.nama,saya.umur);}ARRAY OF STRUCTApabila hendak menggunakan 1 struct untuk beberapa kali, ada 2 cara : 1. Deklarasi manual Contoh : #include <stdio.h> typedef struct Mahasiswa { char NIM[8]; char nama[50]; float ipk; }; void main() { Mahasiswa a,b,c; …… …… …… } artinya struct mahasiswa digunakan untuk 3 variabel, yaitu a,b,c 2. Array of struct Contoh : #include <stdio.h> typedef struct Mahasiswa { char NIM[8]; char nama[50]; float ipk; }; void main() { Mahasiswa mhs[3]; …… …… ……} Disusun oleh: Fathoni Mahardika
  10. 10. artinya struct mahasiswa digunakan untuk mhs[0], mhs[1], dan mhs[2]Contoh :#include <stdio.h>#include <iostream.h>#include <conio.h>typedef struct orang{ char nama[30]; short umur; };void main(){ orang saya[5]; int i,x; for(i=0;i<=4;i++) { printf("nama ke-%i : ",i+1); cin.getline(saya[i].nama,30); printf("umur ke-%i : ",i+1); scanf("%i",saya[i].umur); printf("%s berumur %i",saya[i].nama,saya[i].umur); } for(x=0;x<=4;x++) { printf("nama %s berumur %d",saya[x].nama,saya[x].umur); } }LATIHAN 1. Buat struct untuk data buku yang berisi tentang : kode buku, nama buku, tahun terbit, pengarang, dan harga. Gunakan array of struct. 2. Buatlah fungsi untuk soal no 1, agar dapat dimanipulasi untuk ADD, EDIT, HAPUS, dan TAMPIL 3. Cari 2 contoh kasus lain disekitar anda yang dapat menggunakan struct, selain KTP, KTM, SIM, buku. Disusun oleh: Fathoni Mahardika
  11. 11. BAHAN AJAR SESSI/PERKULIAHAN KE 3 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep fungsi, dan kegunaan Searching array dalam bahasa C++/Pascal 2. Memahami konsep fungsi, dan kegunaan Sequential Search, Binary Search, Interpolation Search, Array Eclipse/Explode dalam bahasa C++/Pascal 3. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan array dan struct Pokok Bahasan : 4. Searching Array Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Searching array dalam bahasa C/Pascal, mempelajari fungsi dan kegunaan Sequential Search, Binary Search, Interpolation Search, Array Eclipse/Explode membuat program sederhana yang di dalamnya terdapat Searching Array yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta Disusun oleh: Fathoni Mahardika
  12. 12. SEARCHING ARRAYSesuai dengan judulnya, dalam modul ini kita akan membahas proses pencarian /searching data pada suatu array / barisan data. Jika diketahui ada sebuah array /barisan data bernama A yang menampung 10 data yang bertipe integer sbbA={1,2,3,4,8,5,7,9,6,0} dan kita diberi tugas untuk mencari beberapa data misal: Jika data yang akan dicari dalam array A adalah 6, maka dengan cepat dapat kita ketahui bahwa data 6 ada dalam array A pada index ke-9 (index pada array dimulai dari 0) Sedangkan jika data yang akan dicari dalam array A adalah 12, maka dapat disimpulkan bahwa array A tidak memiliki data 12 tersebut.Nah, kita sudah memahami proses pencarian data yang sederhana tersebut dalampikiran kita, sekarang permasalahannya adalah bagaimanamengimplementasikannya kedalam program ?Pada umumnya dikenal dua metode searching antara lain : Sequensial search danbinary search, Untuk lebih memahami kedua metode ini lebih baik kita mulai darimetode yang paling sederhana terlebih dahulu yaitu sequensial search.Sequensial searchDisebut juga sebagai metode pencarian urut adalah metode pencarian yang palingmudah. Bayangkan saja jika anda dihadapkan pada sebuah rak buku, dan andadiberi tugas untuk mencari sebuah buku dari rak tersebut. Sudah tentu anda akanmulai mencarinya satu – persatu entah itu dari atas atau dari bawah sampai bukuyang dimaksud ketemu.Singkatnya sequential search memiliki proses sebagai berikut: Tentukan banyaknya data yang akan di olah, missal banyak data adalah N. Tentukan data apa yang akan dicari, missal data yang akan dicari adalah C. Deklarasikan sebuah counter untuk menghitung banyak data yang ditemukan, missal counternya adalah K. Inisialisasikan K =0 Lakukanlah perulangan sebanyak N kali Disusun oleh: Fathoni Mahardika
  13. 13.  Dalam tiap proses perulangan tersebut periksalah apakah data yang sedang diolah sama dengan data yang dicari. Jika ternyata sama K=K+1 Jika tidak, lanjutkan proses perulangan . Setelah proses perulangan berhenti, periksalah nilai K. Jika nilai K lebih dari 0, artinya data yang dicari ada dalam data /array dan tampilkan nilai K ke layer sebagai jumlah data yang ditemukan. Jika nilai K=0, artinya data yang dicari tidak ditemukan dalam data / array dan tampilkan ke layar bahwa data tidak ditemukan Proses selesai.Dapat disimpulkan bahwa sequential search, akan mencari data dengan caramembandingkannya satu-persatu dengan data yang ada. Prosesnya tentu sajaakan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolahbanyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja. Disusun oleh: Fathoni Mahardika
  14. 14. Coding Program Sequential Search untuk dicoba #include<stdio.h> void main() { //deklarasi variabel int A[10],index[10], i,j,k; //proses penginputan data for(i=0;i<10;i++) { printf("Data ke-%d:",i+1); scanf("%d",&A[i]); } //memasukkan data yang akan dicari ke dalam K printf("Masukkan data yang akan anda cari:"); scanf("%d",&k); //proses pencarian data j=0; for (i=0;i<10;i++) { if(A[i]==k) { index[j]=i; j++; } } //jika data ditemukan dalam array if (j>0) { printf("Data %d yang dicari ada %d buahn",k,j); printf("Data tersebut terdapat dalam index ke :"); for(i=0;i<j;i++) { printf(" %d ",index[i]); } printf("n"); } //jika tidak ditemukan else { printf("Data tidak ditemukan dalam arrayn"); } }GAMBARAN KERJAPada program diatas jumlah data yang akan diolah berjumlah 10 data dandisimpan kedalam array A[10] yang bejenis integer, array index[10] digunakanuntuk mencatat index pada array A dimana data ditemukan daya tampung arraysama dengan array A karena ada kemungkinan data yang akan dicari adalah Disusun oleh: Fathoni Mahardika
  15. 15. semua data yang ada dalam array A. sedangkan variable I digunakan sebagaicounter dalam proses perulangan, variable j digunakan sebagai counter untukmenghitung jumlah data yang ditemukan dan variable k digunakan untukmenyimpan data yang akan dicari.Proses pertama adalah memasukkan data-data yang akan diolah ke dalam array Adan data yang akan dicari ke dalam variable K. setelah itu akan dilakukanperulangan sebanyak data yang ada dalam array A untuk mencari apakah ada datadalam variable K didalam array A, jika ada maka counter j akan mencatatjumlahnya dan array index akan mencatat pada index ke berapa data tersebutditemukan. Setelah proses perulangan selesai, tampilkanlah hasil yang terdapatpada variable j dan array index ke layer.Gambaran kerja program (Perhatikan koding diatas agar lebih jelas)Misalkan pada perulangan yang pertama kita masukkan data sebagai berikut:Array A (berisi data yang akan diolah)ISI 1 3 5 8 6 5 7 11 9 0INDEX 0 1 2 3 4 5 6 7 8 9Data yang akan dicari K=5Proses pencarian / proses perulangan yang kedua Array A (berisi data yang akan diolah)ISI 1 3 5 8 6 5 7 11 9 0INDEX 0 1 2 3 4 5 6 7 8 9Data ditemukan ketika i = 2Maka K++ menjadi 1, artinya ada 1 data dalam array AArray index akan menyimpan index tempat data tersebut ditemukan pada array AArray index (berisi index data yang ditemukan pada array A) Disusun oleh: Fathoni Mahardika
  16. 16. ISI 2INDEX 0 1 2 3 4 5 6 7 8 9Data ditemukan ketika i = 5Maka K++ menjadi 2, artinya ada 2 data dalam array AArray index akan menyimpan index tempat data tersebut ditemukan pada array AArray index (berisi index data yang ditemukan pada array A)ISI 2 5INDEX 0 1 2 3 4 5 6 7 8 9Proses pencarian data selesai dan tampilkan hasil outputData 5 yang dicari ada 2 buah  ambil dari variable KData tersebut terdapat dalam index ke: 2 5  ambil dari array index.Binary searchProses pencarian binary search hanya dapat dilakukan pada kumpulan data yangsudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan dolah, datayang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar daridata yang dicari maka akan dilakukan pembagian data menjadi dua bagian.Kemudian ujung data pada setiap bagian dibandingkan lagi dengan nilai yangakan dicari. Disusun oleh: Fathoni Mahardika
  17. 17. Coding Program Binary Search untuk dicoba #include<stdio.h> void main() { //deklarasi variabel int A[10], i,j,k,tkr,top,bottom,middle,tm; //proses penginputan data for(i=0;i<10;i++) { printf("Data ke-%d:",i+1); scanf("%d",&A[i]); } printf("Masukkan data yang akan anda cari:"); scanf("%d",&k); //proses pengurutan data for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if (A[i]>A[j]) { tkr=A[i]; A[i]=A[j]; A[j]=tkr; } } } //proses pencarian data tm=0; top=9; bottom=0; while(top>=bottom) { middle=(top+bottom)/2; if(A[middle]==k) { tm++; } if(A[middle]<k) { bottom=middle+1; } else { top=middle-1; } } if (tm>0) { printf("Data %d yang dicari ada dalam arrayn",k); } //jika tidak ditemukan else { printf("Data tidak ditemukan dalam arrayn"); } } Disusun oleh: Fathoni Mahardika
  18. 18. Contoh kasus:Ada 12 data 11 13 15 18 23 27 29 31 54 58 59 61Data yang akan dicari : 13 Proses 1 11 13 15 18 23 27 29 31 54 58 59 61  lebih besar dengan data yg akan dicari , lakukan pembagian data Proses 2 11 13 15 18 23 27 lebih besar dari data yang dicari, bagi 2 29 31 54 58 59 61 Proses 3 11 13 15 lebih besar dari data yang dicari, bagi 2 18 23 27 29 31 54 58 59 61 Proses 4 11 lebih kecil dari data yang dicari, abaikan saja 13 15 lebih besar dari data yang dicari, bagi 2 18 23 27 29 31 54 58 59 61 Proses 5 11 13  sesuai data yang dicari 15 lebih besar dari data yang dicari 18 23 27 29 31 54 58 59 61 Dari proses diatas dapat disimpulkan bahwa binary search akan membagi-bagi sekumpulan data menjadi 2 bagian sampai data yang dicari ditemukan. KesimpulanSequential search lebih efektif jika digunakan pada sekumpulan data yang sedikit,sedangkan binary search efektif jika digunakan pada sekumpulan data yangberjumlah banyak.Sequential search dapat digunakan pada sekumpulan data yang urut ataupun tidakurut, sedangkan binary search harus pada data yang sudah urut. Disusun oleh: Fathoni Mahardika
  19. 19. Interpolation searchProses pencarian data ini hampir sama dengan proses pencarian binary search,pencarian ini juga dilakukan pada kumpulan data yang sudah urut. Akan tetapijika pada binary search kita membagi data menjadi 2 bagian tiap prosesnya, padainterpolation search kita akan membagi data menurut rumus sebagai berikut:Posisi = ( kunci – data[low] / data[high] – data[low] ) * ( high – low ) + lowSingkatnya proses pencarian interpolation search hampir mirip dengan prosespencarian kata dikamus, yaitu kita mencari data yang dimaksud dengan caramemperkirakan letak data.Misal terdapat data sebagai berikut:Kode Judul Buku Pengarang025 The C++ Programming James Wood034 Mastering Delphi 6 Marcopolo041 Professional C# Simon Webe056 Pure JavaScript v2 Michael Bolton063 Advanced JSP & Servlet David Dunn072 Calculus Make it Easy Gunner Christian088 Visual Basic 2005 Express Antonie096 Artificial Life : Volume 1 Gloria VirginiaKunci Pencarian ? 088Low ? 0High ? 7Posisi = (088 - 025) / (096 - 025) * (7 - 0) + 0 = [6]Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005Kunci Pencarian ? 060Low ? 0High ? 7Posisi = (060 – 025) / (096 – 025) * (7 – 0) + 0 = [3]Kunci[3] < kunci pencarian, maka teruskan Disusun oleh: Fathoni Mahardika
  20. 20. Low = 3 + 1 = 4High = 7Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060.Berarti tidak ada kunci 060.Coding Program Interpolation Search untuk dicoba #include<stdio.h> void main() { //deklarasi variable int A[10], i,j,k,tkr,low,high,pos,tm; //proses penginputan data for(i=0;i<10;i++) { printf("data ke-%d:",i+1); scanf("%d",&A[i]); } //Input data yang akan dicari printf("Masukkan data yang akan anda cari:"); scanf("%d",&k); //proses pengurutan data for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if (A[i]>A[j]) { tkr=A[i]; A[i]=A[j]; A[j]=tkr; } } } //proses pencarian data tm=0; high=9; low=0; do { pos = ((k - A[low]) / (A[high] - A[low]))*(high-low) + low; if (A[pos] == k) { tm++; break; } if (A[pos] > k) high = pos-1; else if (A[pos] < k) low = pos + 1; } while(k >= A[low] && k <= A[high]); if (tm>0) { printf("data %d yang dicari ada dalam arrayn",k); } //jika tidak ditemukan else { printf("data tidak ditemukan dalam arrayn"); } } Disusun oleh: Fathoni Mahardika
  21. 21. Array Splice/ExplodeSecara harafiah, dapat diartikan sebagai metode untuk memecah-mecah array.Pemecahan array itu sendiri, tergantung berdasarkan apa array akan dipecah. Agarlebih jelas, lihat ilustrasi array splice pada gambar berikut :Char P A K A N T O NIndeks 0 1 2 3 4 5 6 7 8 Char P A K A N T O NIndeks1 0 0 0 1 1 1 1 1Indeks2 0 1 2 0 1 2 3 4Ada pemecahan dari array of character 1 dimensi menjadi array of character 2dimensi berdasarkan spasi pada inputan stringnya.Coba coding array explode dan searchingnya berikut ini : Disusun oleh: Fathoni Mahardika
  22. 22. #include <stdio.h>#include <string.h>void main(){ char str[100],cari[100]; char hasil[100][100]; int n,i,j,t,a,b,c,d,e; printf("Masukkan string: "); gets(str); n=strlen(str); j=0; for(i=0;i<n;i++) { if (i!=(n-1)) { if(str[i]==32) j++; } else if(i==(n-1)) j++; } t=0; for(i=0;i<j;i++) { e=0; for(a=t;a<n;a++) { if(str[a]!=32) { hasil[i][e]=str[a]; printf("Indeks [%d][%d] =%cn",i,e,hasil[i][e]); //untuk melihat hasil splice e++; } else { t=a+1; break; } } printf("n"); } printf("Kata yang ingin dicari : "); gets(cari); b=strlen(cari); printf("Panjang kata cari %in",b); c=-1; d=0; for(i=0;i<j;i++) { t=e=0; for(a=0;a<n;a++) { if(hasil[i][a]<=0 && cari[e]<=0) break; else { if(cari[e]==hasil[i][a]) t++; } e++; } if(t==b) { c=i; break; } } if(c!=-1) { printf("Kata %s yang dicari ada di indeks [%d][%d] sampai[%d][%d]n",cari,c,0,c,a-1); } else printf("Kata tidak ada dalam string!n");} Disusun oleh: Fathoni Mahardika
  23. 23. Pengembangan: Ganti coding program diatas agar array yang ada bisa ditentukan ukurannya oleh user (array dinamis) [gunakan template program yang telah ada] Buat menu searching untuk menggabungkan ketiga metode searching tersebut. Dibuat dalam bentuk fungsi! Buat array explode untuk memecah input NIM menjadi seperti berikut:  Input = 22053752  Output = 22 05 3752 (dipisah berdasarkan kode jurusan, angkatan dan nomor mahasiswa)Soal:Buat array rekening bank dengan ketentuan : - Gunakan Struct (int no_rek, char nama[100], long saldo)Buatlah fungsi-fungsi sebagai berikut : - Add - Edit - Cari (Sequential) - Setor - Ambil - Transfer - Tutup Rekening (Delete) Disusun oleh: Fathoni Mahardika
  24. 24. BAHAN AJAR SESSI/PERKULIAHAN KE 4 - 5 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep penggunaan Sorting Array dalam bahasa C++/Pascal 2. Memahami konsep fungsi dan kegunaan Bubble sort, Exchange sort, Selection sort, Insertion sort, Quick Sort 3. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan Sorting Array 4. Pokok Bahasan : Sorting Array Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Sorting array dalam bahasa C/Pascal, mempelajari Memahami konsep fungsi dan kegunaan Bubble sort, Exchange sort, Selection sort, Insertion sort, Quick Sort.. membuat program sederhana yang di dalamnya terdapat Sorting Array yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 Disusun oleh: Fathoni Mahardika
  25. 25. SORTING ARRAYSorting Salah satu bagian penting dari struktur data adalah proses pengurutan data-data itu sendiri. Data akan terkadang akan berada dalam bentuk yang tidakberpola ataupun dengan pola tertentu yang tidak kita inginkan, namun dalampenggunaanya, kita akan selalu ingin menggunakan data-data tersebut dalambentuk yang rapi atau berpola sesuai dengan yang kita inginkan. Maka dari ituproses sorting adalah proses yang sangat penting dalam struktur data, terlebihuntuk pengurutan data yang bertipe numerik ataupun karakter. Sorting adalah proses menyusun kembali data yang sebelumnya telahdisusun dengan suatu pola tertentu ataupun secara acak, sehingga menjaditersusun secara teratur menurut aturan tertentu. Pada umumnya ada 2 macam pengurutan, yaitu: o Pengurutan secara ascending (urut naik). o Pengurutan secara descending (urut turun). Algoritma untuk melakukan sorting juga ada berbagai macam, antara lain: o Teoretis : Computational complexity theory, Big O notation, Total order, Stability, Comparison sort. o Exchange sorts : Exchange sort, Bubble sort, Cocktail sort, Comb sort, Gnome sort, Quick sort. o Selection sorts : Selection sort, Heap sort, Smooth sort. o Insertion sorts : Insertion sort, Shell sort, Tree sort, Library sort, Patience sorting. o Merge sorts : Merge sort. o Non-comparison : Radix sort, Bucket sort, Counting sort, Pigeonhole sort. o Others : Topological sorting, Sorting network. Algoritma-algoritma ini tentu saja akan mempunyai efek yang berbedadalam setiap prosesnya, ada yang mudah digunakan, ada yang mempunyai prosesyang sangat cepat, dan sebagainya. Pemilihan algoritma untuk sorting ini tidak hanya asal saja dipilih.Pemilihian ini semestinya berdasarkan kebutuhan yang diperlukan. Tidak semuaalgortima yang pendek itu buruk dan tidak semua algoritma yang super cepat jugaakan baik dalam semua kondisi. Misal: algoritma Quick Sort adalah algoritmasorting yang tercepat dalam proses pencariannya, namun jika data yang akandiurutkan ternyata sudah hampir terurut atau tidak terlalu banyak, maka algoritmaini malah akan memperlama proses pengurutan itu sendiri, karena akan banyakperulangan tidak perlu yang dilakukan dalam proses sorting ini. Hal yang umum dilakukan dalam proses sorting adalah proses pertukaranantara 2 elemen atau lebih (analogi memindah air dalam gelas). Untuk melakukanproses pertukaran akan diperlukan adanya variable baru yang digunakan sebagaivariable penampung. Disusun oleh: Fathoni Mahardika
  26. 26. //fungsi penukar data void tukar (int a[], int I, int j) { int tampung = a[i]; a[i] = a[j]; a[j] = tampung; }Sorting Algorithm o Bubble Sort  Metode sorting paling mudah, namun paling lambat dibandingkan dengan yang lain.  Bubble sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya.  Bisa dilakukan baik dari kepala array maupun ekor array.  Proses yang berlangsung, jika:  Ascending: jika elemen sekarang lebih besar daripada elemen berikutnya, maka kedua elemen tersebut ditukar.  Descending: jika elemen sekarang lebih kecil daripada elemen berikutnya, maka kedua elemen tersebut ditukar.  Hal ini akan terlihat seperti penggeseran angka, perbandingan, kemudian jika memenuhi syarat kemudian tukar.  Proses penukaran ini akan terus dilakukan hingga seluruh array telah diperiksa.  Contoh fungsi bubble sort: //Bubble Sort void bubble (int a[], int n) { int i,j; for (i=n;i>=1;i--) { for (j=2;j<i;j++) if(a[j-1]>a[j]) tukar (a,j-1,j); } } o Exchange Sort  Mirip dengan bubble sort. Disusun oleh: Fathoni Mahardika
  27. 27.  Perbedaannya: dalam exchange sort ada elemen yang berfungsi sebagai pusat (pivot), pertukaran hanya akan dilakukan jika diperlukan saja dari pivot tersebut.  Sedangkan bubble sort akan membandingkan elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya, kemudian elemen sebelum/sesudahnya itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya.  Contoh fungsi exchange sort: //Exchange Sort void exchange (int a[], int n) { int i,j; for (i=0;i<=n-1;i++) { for (j=(i+1);j<n;j++) if(a[i]>a[j]) tukar (a,i,j); } }o Selection Sort  Kombinasi sorting dan searching.  Untuk setiap proses, akan dilakukan dengan mencari elemen dari posisi yang belum diurutkan dan kemudian memilih elemen yang memiliki nilai terkecil atau terbesar yang akan ditukarkan ke posisi yang tepat di dalam array.  Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini akan ditempatkan pada indeks terkecil, pada putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua, negitu seterusnya hingga tidak ada data yang dicari lagi.  Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir proses.  Contoh fungsi selection sort: //Selection Sort void selection (int a[],int n) { int i,j,pos; for (i=1;i<n;i++) { pos=i; for (j=i+1;j<=n;j++) if(a[j]<a[pos]) pos=j; tukar(a,pos,i); } } Disusun oleh: Fathoni Mahardika
  28. 28. o Insertion Sort  Analogi pengurutan kartu.  Proses dilakukan dengan membandingkan data ke-I dengan data yang sebelum-sebelumnya.  Misal ascending: pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan dimasukkan di posisi yang seharusnya.  Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang.  Contoh fungsi insertion sort: //Insertion Sort void insertion (int a[],int n) { int i,j,v; for (i=2;i<=n;i++) { v=a[i]; j=1; while (a[j-1]>v) { a[j]=a[j-1] j--; a[j=v]; } }o Quick Sort  Bersifat divide&conquer.  Merupakan metode pencarian yang sangat cepat (saat ini tercepat).  Pertama-tama deret dibagi menjadi dua bagian, misal, semua elemen pada bagian b (bagian pertama) mempunyai kurang dari atau sama dengan semua elemen pada bagaian c (bagian kedua -- membagi). Kemudian kedua bagian tersebut dilakukan proses sorting dengan rekursif secara terpisah dengan prosedur yang sama(coquer). Kemudian gabungkan lagi kedua bagian terpisah tersebut. Disusun oleh: Fathoni Mahardika
  29. 29.  Langkah:  Memilih sebuah elemen pembanding (pivot), misal x.  Semua elemen dari deret tersebut yang kurang dari x diletakkan pada bagian pertama.  Kemudian semua elemen dari yang lebih besar dari x diletakkan pada bagian kedua.  Untuk elemen yang sama dengan x bias diletakkan di mana saja bahkan bisa juga di antara kedua bagian tersebut. Algoritma partisi: Input : sequence a0, ..., an-1 with n elements Output : permutation of the sequence such that all elements a0, ..., aj are less than or equal to all elements ai, ..., an-1 (i > j) Method : choose the element in the middle of the sequence as comparison element x let i = 0 and j = n-1 while i j search the first element ai which is greater than or equal to x search the last element aj which is less than or equal to x if i j exchange ai and aj let i = i+1 and j = j-1 Disusun oleh: Fathoni Mahardika
  30. 30.  setelah mempartisi, prosedur sorting akan dilakukan secara rekursif. Hingga proses rekursif tersebut akan berhenti saat sebuah bagian hanya tinggal terdapat satu elemen saja.  Tidak baik digunakan jika elemen-elemen yang akan diurutkan hanya ada sedikit atau sudah hamper terurut, karena jika menggunakan metode ini justru akan melakukan perulangan yang tidak berguna dan lama.  Mempunyai algoritma dan program yang cukup kompleks.  Contoh fungsi quick sort: //Quick Sort void quicksort (int a[],int l,int r) { int i,j,v; if(r>1) { v=a[r];i=l-1;j=r; for(;;) { while(a[++i]<v); while(a[--j]>v); if(i>=j) break; tukar(a,i,j) } tukar(a,i,r); quicksort(a,l,i-1); quicksort(a,i+1,r); } }Pengembangan: o Dari potongan-potongan fungsi sorting di atas, buatlah sebuah program yang dapat menampilkan semua hasil sorting dalam berbagai versi! o Dari program tersebut tambahkanlah bagian program yang dapat menampilkan proses sorting yang sebenarnya terjadi (tidak hanya hasil akhirnya saja)! Sehingga Anda pun akan lebih mudah memahami proses yang terjadi dalam suatu sorting… o Buat program yang dapat mengurutkan sebuah urutan alphabet!Soal: o Buat program dengan inputan NIM (empat digit terakhir), nama, dan fakultas untuk beberapa mahasiswa, kemudian lakukan sorting terhadap inputan berdasarkan NIMnya! o Buat sebuah program database pabrik, merk, CC dan harga sepeda motor kemudian hasil tersebut bisa diurutkan berdasarkan harga dan CCnya (secara ascending dan descending)! Misal:  Yamaha >> Mio >> 135CC >> 12.000.000  Honda >> Revo >> 100CC >> 13.000.000  Viar >> ViarX >> 125CC >> 7.000.000 Disusun oleh: Fathoni Mahardika
  31. 31. BAHAN AJAR SESSI/PERKULIAHAN KE 6 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep penggunaan stack dalam bahasa C++/Pascal 2. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan stack Pokok Bahasan : Array Stack Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Stack dalam bahasa C/Pascal. membuat program sederhana yang di dalamnya terdapat Stack yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta Disusun oleh: Fathoni Mahardika
  32. 32. ARRAY STACK STACK STACK atau TUMPUKAN adalah suatu struktur data yang seolah-olah terlihat seperti data yang tersusun secara „menumpuk‟, dimana ada data yang terletak diatas data yang lainnya. Bersifat LIFO (Last In First Out), berarti data yang masuk terakhir akan keluar pertama. Operasi pada Stack : IsFull  mengecek apakah STACK sudah penuh IsEmpty  mengecek apakah STACK sudah kosong Push  menambah data pada STACK pada tumpukan paling atas Pop  mengambil data pada STACK pada tumpukan paling atas Tampil  mencetak semua data dalam tumpukan Contoh program untuk dicoba: #include <stdio.h> #include <conio.h> //deklarasi STACK dengan struct dan array typedef struct STACK { int data[5]; int atas; }; //deklarasi variabel tumpuk dari struct STACK tumpuk; void main() { clrscr(); int pilihan,baru,i; //inisialisasi awal tumpuk.atas=-1; do { clrscr(); printf("1.Push Datan"); printf("2.Pop Datan"); printf("3.Print Datan"); printf("nPilihan = "); scanf("%i",&pilihan); switch(pilihan) { case 1: { if(tumpuk.atas==5-1) { printf("Tumpukan penuh"); Disusun oleh: Fathoni Mahardika
  33. 33. getch(); } else { printf("Data yang akan di-push= "); scanf("%d",&baru); tumpuk.atas++; tumpuk.data[tumpuk.atas]=baru; } break; } case 2: { if(tumpuk.atas==-1) { printf("Tumpukan kosong"); getch(); } else { printf("Data yang akan di-pop =%d", tumpuk.data[tumpuk.atas]); tumpuk.atas--; getch(); } break; } case 3: { if(tumpuk.atas==-1) { printf("Tumpukan kosong"); getch(); } else { printf("Data = "); for(i=0; i<=tumpuk.atas; i++) { printf("%d",tumpuk.data[i]); } getch(); } break; } default: { printf("nTidak ada dalam pilihan"); } } }while(pilihan>=1 && pilihan<=3); getch();} Disusun oleh: Fathoni Mahardika
  34. 34. JAWABLAH! - Kapan tumpukan dinyatakan kosong? - Kapan tumpukan dinyatakan penuh? - Bagaimana cara untuk mengosongkan semua data dalam tumpukan (CLEAR)? SOAL LATIHAN 1. Ubahlah contoh program stack diatas dalam bentuk fungsi-fungsi yang terpisah dari program utama (fungsi IsFull, IsEmpty, Push, Pop, Tampil)! 2. Buatlah program kalkulator sederhana (pengoperasian 2 bilangan aritmatika sederhana)! Operasi aritmatika tersebut (dalam notasi infiks), harus diubah kedalam bentuk notasi postfiks.Contoh: INFIKS POSTFIKS 3+7 37+ 2–9 29- 8*7 87* 9/3 93/Misal algoritma: 3 7 + indeks stack Process 2 + Add 1 7 push operand 0 3 push operand Disusun oleh: Fathoni Mahardika
  35. 35. BAHAN AJAR SESSI/PERKULIAHAN KE 7 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep penggunaan antrian array (Queue) dalam bahasa C++/Pascal 2. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan antrian (Queue) Pokok Bahasan : Penggunaan Antrian Array Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Antrian Array dalam bahasa C/Pascal. membuat program sederhana yang di dalamnya terdapat Antrian Array yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta 1
  36. 36. ANTRIAN DENGAN ARRAYPengertianAntrian (Queue) dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihatseperti ada data yang diletakkan di sebelah data yang lain seperti pada gambar 01.Pada gambar, data masuk melalui lorong di sebelah kanan dan masuk dari terowongansebelah kiri. Hal ini membuat antrian bersifat FIFO (First In First Out), beda denganstack yang berciri LIFO. A B C D E F F Gambar 01Antrian dapat dibuat baik dengan array maupun dengan struct. Pada pembuatanantrian dengan array, antrian yang disajikan bersifat statis. Ini disebabkan oleh jumlahmaksimal array sudah ditentukan sejak deklarasi awal.Algoritma PUSHSalah satu algoritma untuk proses memasukkan data (PUSH) adalah sebagai berikut: 0. Masukkan inputan (x) 1. Jika variabel cek = max (Nilai maksimal array), kerjakan langkah 2. Jika tidak, kerjakan langkah 3. 2. Cetak “ANTRIAN PENUH” lalu selesai. 3. Selama cek kurang dari max, maka c  c +1 dan data [c]  x.Algoritma POPSalah satu algoritma untuk proses mengeluarkan data (POP) adalah sebagai berikut: 0. Jika cek = 0, cetak “ANTRIAN KOSONG” kemudian selesai. Jika tidak, lakukan langkah 2. 1. mulai x=0, selama x kurang dari cek, lakukan langkah 2 dan 3. 2. data[x]  data [x+1]. 3. data[cek-1]  NULL. 4. cek  cek – 1Contoh program yang mengimplementasikan algoritma di atas :#include<stdio.h>#include<conio.h>void main(){ int cek=0, data[20], x, hapus; char pil; do { 2
  37. 37. clrscr(); printf("1. Tambah Antriann"); printf("2. Hapus Antriann"); printf("3. Lihat Antriann"); printf("4. Keluarn"); printf("Silahkan masukkan pilihan anda... "); pil=getche(); if(pil!=1 && pil !=2 && pil !=3 && pil!=4 ) printf("nnAnda salah mengetikkaninputan...n"); else { if(pil==1) //PUSH { if(cek==20) printf("nAntrian Penuhnn"); else { printf("nMasukkan nilai-->");scanf("%i",&x); data[cek]=x; cek++; } } else { if(pil==2) //POP { if(cek==0) printf("nAntriankosongnn"); else { hapus=data[0]; for(int v=0;v<cek;v++) data[v]=data[v+1]; data[cek-1]=NULL; cek--; printf("nData dgn nilai=%iterhapus.",hapus); } getch(); } else { if(pil==3) //CEK DATA { if(cek==0) printf("nAntrianKosong.nn"); else { printf("n"); 3
  38. 38. for(intz=0;z<cek;z++) { printf(" | "); printf("%i",data[z]); printf(" | "); } } getch(); } } } } }while(pil!=4);}Pengembangan : 1. Buatlah program untuk simulasi antrian registrasi UKDW. Yang tercatat adalah nim mahasiswa. 2. Kembangkan program tersebut sehingga bisa menyimpan keterangan nim, nama, dan prodi mahasiswa tersebut. 3. Tambahkan fitur untuk mengetahui urutan antrian dari nim tertentu.Soal :Buat pengembangan program dari latihan di atas dengan beberapa fitur : 1. Bisa melihat urutan untuk prodi tertentu ataupun secara keseluruhan. 2. Bisa POP melompati urutan. Jadi misalkan urutan nomor 2 keluar (POP) lebih dulu daripada urutan pertama. 4
  39. 39. BAHAN AJAR SESSI/PERKULIAHAN KE 9 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep fungsi dan penggunaan pointer dalam bahasa C++/Pascal 2. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan pointer Pokok Bahasan : Penggunaan Pointer Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Pointer dalam bahasa C/Pascal. membuat program sederhana yang di dalamnya terdapat Pointer yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta 5
  40. 40. POINTERPointer adalah suatu variabel penunjuk yang menunjuk pada suatu alamat memorikomputer tertentu. Pointer merupakan variabel level rendah yang dapat digunakanuntuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipedata lain yang didukung oleh bahasa C. Variabel biasa, sifatnya statis dan sudah pasti,sedangkan pada pointer sifatnya dinamis dan dapat lebih fleksibel. Variabel pointeryang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL, dan disebutsebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi.Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya,sedangkan untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, jugadigunakan operator * (tanda asterisk). Jika diinginkan untuk menampilkan alamattempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakanoperator & (tanda ampersand).Pada suatu tipe data array, variabel pointer hanya perlu menunjuk pada nama variabelarraynya saja tanpa perlu menggunakan tanda ampersand, atau menunjuk pada namavariabel array pada indeks yang ke nol nya. Untuk lebih jelasnya, silahkan lihatcontoh berikut:Pendeklarasian variabel biasa dan pointer://variabel biasaint nilai1 = 4;float nilai2 = 3.5;char nama[10] = “anton”; //array of char (string)//variabel pointerint *nilai_p1; //dangling pointerint *nilai_p2 = &nilai1; //menunjuk ke tipe data intchar *nilai_p3 = nama; //menunjuk ke tipe data array of charchar *nilai_p4 = &nama[0];Ilustrasi Pointer: 6
  41. 41. nilai1 4 nilai_p1 ff4c 4 int nilai_p2 3.5 ff4a nilai2 3.5 float nilai_p3 anton ff47 nama “anton” charContoh program untuk dicoba:#include <stdio.h>#include <conio.h>int main(){ int nilai1 = 4; int nilai2 = 5; float nilai3 = 3.5; char nama[11] = "abcdefghij"; int *nilai_p1 = &nilai1; int *nilai_p2 = &nilai2; char *nilai_p4 = nama; float *nilai_p3= &nilai3; printf("nilai 1 = %d, alamat1 = %p, ukuran%dn",*nilai_p1,&nilai_p1,sizeof(nilai1)); printf("nilai 2 = %d, alamat2 = %p, ukuran%dn",*nilai_p2,&nilai_p2,sizeof(nilai2)); printf("nilai 3 = %f, alamat3 = %p, ukuran%dn",*nilai_p3,&nilai_p3,sizeof(nilai3)); printf("nilai 4 = %s, alamat4 = %p, ukuran%dn",nama,&nilai_p4,sizeof(nama)); getch(); return 0;}Operasi pointer: 1. Operasi Pemberian nilai Contoh 1: #include <stdio.h> #include <conio.h> 7
  42. 42. int main(){ float nilai,*p1,*p2; nilai = 14.54; printf("nilai = %2.2f, alamatnya %pn",nilai,&nilai); p1 = &nilai; printf("nilai p1 = %2.2f, p1 menunjuk alamat%pn",*p1,p1); //pada awalnya p2 masih dangling pointer printf("mula-mula nilai p2 = %2.2f, p2 menunjuk alamat%pn",*p2,p2); p2 = p1; //operasi pemberian nilai, berarti alamat x2sama dengan x1 printf("sekarang nilai p2 = %2.2f, p2 menunjuk alamat%pn",*p2,p2); getch();}Contoh 2:#include <stdio.h>#include <conio.h>int main(){ int *p,a=25,b; //p masih dangling printf("nilai a = %d di alamat a = %p,n",a,&a); printf("nilai p di alamat = %pn",p); p = &a; printf("nilai p = %d di alamat %pn",*p,p); //b diisi dengan nilai yang berasal dari nilai //variabel a yang ditunjuk oleh pointer p b = *p; printf("nilai b = %d di alamat %pn",b,&b); getch();}Contoh 3:#include <conio.h>#include <stdio.h>int main(){ int a=25,b=12,t; int *p,*q; p = &a; q = &b; printf("nilai yang ditunjuk p = %d di alamat %pn",*p,p); printf("nilai yang ditunjuk q = %d di alamat %pn",*q,q); //Contoh kasus, penukaran nilai 2 variabel dengan pointer 8
  43. 43. t = *p; *p = *q; *q = t; printf("nilai yang ditunjuk p sekarang = %d di alamat %pn",*p,p); printf("nilai yang ditunjuk q sekarang = %d di alamat %pn",*q,q); getch(); } Contoh 4: #include <stdio.h> #include <conio.h> int main(){ int a,*p; p=&a; *p=25; printf("nilai a = %d",a); } 2. Operasi Aritmatika #include <stdio.h> #include <conio.h> int main(){ int a,b=10,*p,*q; p=&a; *p=25; printf("nilai a = %dn",a); printf("alamat p = %pn",p); q=&b; printf("alamat q = %pn",q); printf("nilai a + b = %dn",(*p+*q)); //posisi alamat p menjadi bergeser, nilai berubah p=p+1; printf("nilai p = %d, alamat = %pn",*p,&p); q=q-1; printf("nilai q = %d, alamat = %pn",*q,&q); getch(); }Pointer pada array 1 dimensi:#include <stdio.h>#include <conio.h>int main(){ char S[] = "anton"; char *p; //cara 1 //langsung menunjuk nama array. p=S; for(int i=0;i<5;i++){ printf("%c",*p); p++; } printf("n"); 9
  44. 44. //cara 2 p=&S[0]; for(int i=0;i<5;i++){ printf("%c",*p); p++; } printf("n"); //Membalik kalimat p--; for(int i=0;i<5;i++){ printf("%c",*p); p--; } printf("n"); getch();}Pointer pada Struct:#include <stdio.h>#include <conio.h>typedef struct{ int nim; int umur; float ipk;} Mahasiswa;Mahasiswa m;Mahasiswa *p = &m;int main(){ //struct biasa m.nim=123; m.ipk=3.2; m.umur=23; printf("nim = %dn",m.nim); printf("ipk = %fn",m.ipk); printf("umur = %dn",m.umur); //struct pointer p->ipk = 3.5; p->nim = 321; p->umur = 32; printf("nim = %dn",p->nim); printf("ipk = %fn",p->ipk); printf("umur = %dn",p->umur); //mengacu pada variabel aslinya printf("nim = %dn",m.nim); printf("ipk = %fn",m.ipk); printf("umur = %dn",m.umur); getch(); 10
  45. 45. }Pengembangan:Buatlah sebuah program untuk mengecek apakah suatu kata palindrom atau bukan,tanpa memperhatikan spasi dan huruf besar/kecilnya. Program dibuat denganmenggunakan template struct sebagai berikut:typedef struct{ char elemen[30]; int jml_kata;} Kata;Kata kata;Kata *p_kata=&kata;Lanjutkanlah program berikut agar hasilnya sesuai dengan soal di atas:#include <stdio.h>#include <conio.h>typedef struct{ char elemen[30]; int jml_kata;} Kata;Kata kata;Kata *p_kata=&kata;int main(){ char kalimat[30]; p_kata->jml_kata=0; char *p = p_kata->elemen; printf("Masukkan kata : ");gets(kalimat); fflush(stdin); printf("Kalimat : %sn",kalimat); for(int i=0;i<kalimat[i];i++){ *p=kalimat[i]; p_kata->jml_kata++; p++; } p=p_kata->elemen; //tampilkan kembali kalimat tersebut for(int i=0;i<=p_kata->jml_kata;i++){ printf("%c ",*p); p++; } //kembangkan…. getch();}Soal:Buatlah program data KTP, dengan menggunakan pointer pada struct KTP sebagaiberikut: 11
  46. 46. typedef struct{ int tgl; int bln; int th;}Tanggal;typedef struct{ char noID[5]; char nama[30]; char jenis_kelamin; //‟L‟ atau „P‟ Tanggal t;}KTP;typedef struct{ KTP ktp; int jml;}Data_KTP;Data_KTP data_ktp;Data_KTP *p;Buatlah fungsi untuk: 1. Menambah data 2. Mencari data berdasarkan tahun kelahiran tertentu 3. Menampilkan data berdasarkan L dan P 4. Mengedit dataSemua pengaksesan dilakukan dengann menggunakan pointer. 12
  47. 47. BAHAN AJAR SESSI/PERKULIAHAN KE 10 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep fungsi dan penggunaan senarai tunggal (Linked List) 2. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan Linked List Pokok Bahasan : Kegunaan Linked List Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Linked List dalam bahasa C/Pascal. membuat program sederhana yang di dalamnya terdapat Linked List yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta 13
  48. 48. SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR(SINGLE LINKED LIST NON CIRCULAR)DEKLARASI LINKED LIST Sebelum membuat sebuah senarai (Link List) kita harus mendeklarasikan tipedata dan pointer yang akan kita gunakan. Selain itu kita juga harusmendeklarasikan list -list yang nantinya akan kita gunakan. Sebagai contoh:#include “stdio.h”typedef struct Gerbong //membuat sebuah tipe data baru yangterdiri dari 2 field{ int data; //field data bertipe integer Gerbong *next; //field next merupakan pointer dari list};Gerbong *baru; //variable baru bertipe pointer darilistGerbong *kepala; //variable kepala bertipe pointer dari listGerbong *ekor; //variable ekor bertipe pointer darilistGerbong *bantu; //variable bantu bertipe pointer dari listGerbong *hapus; //variable hapus bertipe pointer dari listcatatan:  Gerbong diatas merupakan nama dari tipe data bentukan.  kepala, ekor, baru, bantu,hapus merupakan variable pointer yang berisi alamat memori.  kepala merupakan node paling awal dan selalu tetap(tidak boleh berpindah).  ekor merupakan node paling akhir jadi ketika terjadi penambahan sebuah node yang diletakan di belakang maka pointer dari ekor akan ikut berpindah.  baru merupakan nama untuk node yang diciptakan atau ditambahkan.  bantu, hapus digunakan untuk memudahkan operasi edit dan delete sebuah node.ILUSTRASI Senarai berantai dapat diilustrasikan seperti satu kesatuan rangkaian kereta api.Kereta api terdiri dari beberapa gerbong, masing-masing dari gerbong itulah yangdisebut struct / tipe data bentukan. Agar gerbong-gerbong tersebut dapat salingbertaut dibutuhkan minimal sebuah kait yang dinamakan sebagai pointer. Setelah mendeklarasikan tipe data dan pointer pada list, selanjutnya kita akanmencoba membuat senarai / linked list tunggal tidak berputar atau sebuah gerbong. Adabeberapa operasi yang dapat kita buat pada senarai tersebut, diantaranya: tambah, hapusdan edit dari gerbong tersebut.Inti dari linked list adalah proses (tambah, edit, hapus) dari gerbong / node danbagaimana rnenyambungkan antar gerbong / node tersebut. 14
  49. 49. Gambar diatas dilustrasikan sebuah rangkaian kereta api dengan 4 buahgerbong. Gerbong A akan disebut sebagai kepala / head (walaupun penamaan ini bebas)dan gerbong D adalah ekor / tail. Tanda panah merupakan kait atau pointer yangmenghubungkan satu gerbong dengan yang lainnya. Pointer yang dimiliki D menuju ke NULL,inilah yang membedakan antarasenarai berputar dengan yang tidak berputar. Kalau senarai berputar maka pointer dariD akan menuju ke A lagi.PEMBENTUKAN NODE (GERBONG) Digunakan keyword new yang berarti mempersiapkan sebuah node baruberserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnyaditunjuk ke NULL. Pembentukan node tidak dapat dilakukan sekaligus namun harussatu persatu, hal ini berkaitan dengan bagaimana cara menyambungkan antar nodetersebut.kepala= new Gerbong; //membuat sebuah node dengan nama kepalakepala->next==NULL; //pointer milik kepala diarahkan ke NULLkepala->data=101; //isi field data dengan 101 Kode diatas apabila dicompile maka akan membentuk sebuah node bertipeGerbong dengan nama kepala. Karena bertipe list maka kepala juga memiliki 2 fieldseperti list yaitu field data dan field next. Bila diasumsikan dengan gerbong maka padaproses ini dibentuk gerbong A. Setelah membentuk sebuah node dengan nama kepala, maka langkahselanjutnya adalah membentuk gerbong yang lain (gerbong B dan selanjutnya).baru=new Gerbong; //membuat sebuah node dengan nama barubaru->data=5;//Tambah Depanif (kepala->next==NULL){ baru-->next=kepala; //rnenyambung node bare dengannode kepala kepala=baru; //memindahkan kepala ke node baru}//Tambah Belakange k or -> n ex t= b ar u; //menyambung node paling akhir/ekor kenode baruekor=baru; //meniindahkan ekor ke node terakhir yaitunode baru .ekor->next=NULL; 15
  50. 50. Tambah belakang berarti node baru yang terbentuk akan diletakan di posisi palingbelakang.PENGHAPUSAN NODE Pada senarai berkepala, penghapusan sebuah list dilakukan jika ada list lain yangbukan list "kepala" dalam barisan senarai tersebut. Dengan kata lain, list yang digunakansebagai "kepala" tidak boleh dihapus, "kepala harus dipindahkan terlebih dahulu.Keyword yang digunakan adalah delete. Contoh://Hapus Depanif(kepala->next!=NULL){ if(kepala->next==ekor) { hapus=kepala; kepala=kepala->next; delete hapus; }}else{ kepala=NULL;}//Hapus Belakangif(head->next!=NULL){ bantu=kepala; while(bantu->next->next!=NULL) { bantu=bantu->next; } hapus=bantu->next; bantu->next = NULL; delete hapus;}else{ head =NULL;} 16
  51. 51. MENAMPILKAN ISI NODEUntuk menampilkan isi suatu node dengan cara mengakses field yang ada di dalam nodetersebut. Yaitu dengan  Contoh :bantu =head;while(bantu!=NULL){ printf(“%i ”,bantu->data); bantu=bantu->next;}LATIHAN 1. Buatlah sebuah linked list non circular yang berisi nim anda dan nama lengkap anda. 2. Buat fungsi untuk menambahkan node single linked list non circular dimana tiap node mengandung informasi nim dan nama. Peletakan posisi node urut berdasar nim secara ascending, jadi bisa tambah depan, belakang maupun tambah di tengah. Isikan data nim dan nama lengkap teman sebelah kiri dan kanan anda!!! 3. Buatlah fungsi untuk menampilkan data 3 buah node yang telah anda bentuk sebelumnya. Contoh tampilan NIM Nama Lengkap 22053766 Hernawan 22053768 Andrew S 22053791 Anthony S 4. Buatlah fungsi untuk mencari nama yang telah diinputkan dengan menggunakan NIM. Contoh tampilan: Inputkan nim yang dicari = 22053768 Nama yang tercantum Andrew S 5. Buatlah sebuah fungsi untuk menghapus nim yang diinputkan oleh user. Contoh tampilan: NIM yang mau dihapus = 2205376 NIM dengan nama Andrew S ditemukan dan telah dihapus 6. Buatlah sebuah program dengan menggunakan single linked list non circular dengan fungsi-fungsi:  menambah data(dari depan dan dari belakang)  search data yang telah diinputkan  menghapus data( dari depan dan dari belakang)  mencetak data Buat dengan menggunakan menu ya….. 7. (soal extended) Dengan menggunakan soal no 6 tambahkan 4 fungsi tambahan: 17
  52. 52.  menambah data(di tengah)  menghapus data tertentu(berada di tengah)  mengurutkan data acak secara acending  mengurutkan data acak secara decending SELAMAT MENGERJAKANSENARAI BERANTAI TUNGGAL BERPUTAR(SINGLE LINKED LIST CIRCULAR) Perbedaan Single Linked list Circular dengan Non Circular Pada saat kita membahas Single Linked List non Circular telah dijelaskan bahwa kita membutuhkan sebuah kait untuk menghubungkan node-node / gerbong-gerbong data yang ada. Perbedaan dengan Single Linked List Circular adalah pada node terakhir/ ekor yang semula menunjuk ke NULL diganti menunjuk kembali ke kepala atau head. Contoh Struct Single Link List Circular Dengan melihat gambar kita dapat membayangkan bahwa setiap node akan membentuk lingkaran, dan semakin banyak node lingkaran akan semakin besar. Pada intinya tail akan selalu terhubung dengan head. Membuat Single Linked List Circular berkepala berputar Untuk menginisialisasikan Single Linked List Circular berkepala berputar cukup mudah karena kita hanya seperti memberikan label pada suatu list. Cara mendeklarasikanna seperti contoh dibawah ini: #include “stdio.h” typedef struct Tnode { int data; Tnode *next; }; Tnode *bantu; //mendeklarasikan pointer bantu Tnode *baru; //mendeklarasikan pointer baru Tnode *head; //mendeklarasikan pointer head Tnode *tail; //mendeklarasikan pointer tail void main() { head=new Tnode; head ->next=head; } //memasukkan data Single Linked list Circular berkepala berputar head -> data = 50; //menambah simpul baru dan menghubungkannya dengan simpul kepala baru = new Tnode; baru -> data = 20; apakah perintah ini masih dapat digunakan untuk penambahan baru -> next = head; simpul berikutnya??? 18
  53. 53. head ->next = head; //menambah simpul baru dan membuat ekor pada akhir senarai tail = baru; baru = new Tnode; baru -> data = 30; apakah perintah ini masih dapat digunakan untuk penambahan baru ->next=head; simpul berikutnya??? tail -> next=baru; tail = baru; Pada senarai berantai seperti gambar di bawah: Bagaimana cara meletakkan data baru 40 diantara simpul dengan data 50 dan 20?? Tambahkan pada program diatas: baru=new Tnode; baru->data=40; baru->next=head->next; head->next=baru; Mengedit / update data Misalnya kita ingin mengganti data pada ekor menjadi 25, caranya adalah sebagaiberikut: tail->data=25; Membaca senarai Tambahkan pada program diatas bantu=head; printf(“%d”, bantu); bantu=bantu->next; while(bantu!=head) { printf(“%d”, bantu); bantu=bantu->next; } Menghapus Simpul ekor Tambahkan pada program diatas: bantu=head; while(bantu->next!=tail) { bantu=bantu->next; } bantu->next=head; delete tail; tail=bantu; 19
  54. 54.  Menghapus Simpul kepala/head Tambahkan pada program diatas: bantu=head->next; delete head; head = bantu; Latihan 1. Buatlah sebuah Single Linked List Circular yang mcmpunyai 5 buah simpul seperti pada contoh dibawah ini a. Tuliskan listing program untuk membaca data dari seluruh simpul dengan menggunakan perulangan (for/while) b. TuIiskan listing program untuk menambah sebuah simpul baru dengan data 5 yang diletakan diantara data 30 dan data 20. c. Tuliskan listing program untuk menghapus simpul dengan data 20 tanpa merusak senarai. d. Tuliskan listing program untuk menghapus semua simpul dengan menggunakan variabel bantu dengan menggunakan perulangan (while/for). 2. Buat lah program Single Linked List Circular yang fleksibel dan dinamis. Dimana user dapat menambah simpul baru beserta datanya, membaca semua data pada senarai, menghapus simpul dengan data yang ditentukan oleh user, dan dapat menghapus semua simpul yang ada. Jangan Iupa membuat trapping errornya. 3. (soal extended) Buatlah sebuah link list berisi data-data identitas ktp(nama, alamat, no KTP) buatlah menu sebagai berikut: a. Input entry ktp ( input akan langsung terurutkan berdasarkan no ktp asending ) b. Delete file yang diinginkan user. c. Searching entry ktp d. Cetak semua entry ktp e. Cetak entry ktp tertentu 4. (soal extended) Buatlah 3 link list yang merepresentasikan jam(1-12), menit(1- 60) dan detik(1-60). Mintalah inputan dari user berupa jumlah detik. 20
  55. 55. Konversikan jumlah detik tersebut dan masukkan ke dalam link list (gunakanpointer jam,menit,detik) kemudian cetak jam yang tertera di link list tersebut. 21
  56. 56. BAHAN AJAR SESSI/PERKULIAHAN KE 11 TujuanInstruksionalUmum Pada akhir pertemuan ini mahasiswa diharapkan mampu : Memahami sistem pengorganisasian data pada memori komputer dan file (berkas) pada media penyimpanan. Mengimplementasikannya dalam program dengan menggunakan bahasa pemrograman (Bahasa C/Pascal) untuk membuat berbagai macam struktur data (array, tree, struct) dengan teknik-teknik tertentu (linked list, stack, dan queue) serta manipulasinya (sorting dan searching) secara baik, efisien, dan cepat. Tujuan Instruksional Khusus : Pada akhir pertemuan ini anda diharapkan mampu : 1. Memahami konsep fungsi dan penggunaan senarai ganda (Double Linked List) 2. Membuat program sederhana sebagai solusi atas suatu masalah tertentu yang di dalamnya menggunakan Double Linked List Pokok Bahasan : Double Linked List Deskripsi Singkat : Dalam pertemuan ini anda akan mempelajari fungsi dan kegunaan Double Linked List dalam bahasa C/Pascal. membuat program sederhana yang di dalamnya terdapat Double Linked List yang merupakan pembelajaran lanjutan dari praktikum algoritma dan pemrograman pada semester sebelumnya.I. Buku / bacaan wajib (bw) 1. Algoritma dan Pemrograman EDISI 3 (Rinaldi Munir;2004) 2. Algoritma dan Struktur Data dengan C# (Adi Nugroho;2009) 3. Anonim, Algoritma dan Pemrograman II, Penerbit Gunadarma, Jakarta, 1990 4. Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005 5. Dwi Sanjaya, Asyiknya Belajar Struktur Data di Planet C++, PT. Elex Media Komputindo, Jakarta, 2005 6. Abdul Kadir, Pemrograman Turbo PASCAL untuk IBM PC Versi 5.0 dan 5.5, Penerbit PT. Elex Media Komputindo, Jakarta 22
  57. 57. Double Linked List Tidak jauh berbeda dengan materi sebelumnya yakni Single Linked List.Materi ini hanya menambahkan satu pointer (yang nantinya dapat dikembangkandengan banyak pointer). Bila kita lihat lagi penggambaran dari Single Linked List :typedef struct TNode { data int data; TNode *next; pointer next }; Sedangkan pada materi yang ada sekarang, kita akan menambahkan satu lagipointernya. Sehingga bila kita lihat ilustrasinya :typedef struct TNode{ data int nim; TNode *next; TNode *prev; pointer prev pointer next }; Untuk setiap pembuatan node yang baru kita mempergunakan keyword new. TNode *baru; baru = new TNode; baru ->data = databaru; baru ->next = NULL; baru-> prev = NULL; Sama seperti Single Linked List, kita juga membagi materi ini dalam dua jenis,yakni : a. Non Circular b. Circular Dimana tiap-tiap juga akan terdiri dari linked list yang terdiri dari Head saja dan Head dengan Tail. A. Non Circular 1. Dengan Head - Menggunakan 1 pointer head - Head selalu menunjuk node pertama Sebelumnya kita harus mendeklarasikan dulu pointer head : TNode *head; Setelah kita mendeklarasikan pointer head, kita belum bisa secara langsung mendeklarasikan node yang dituju. Sehingga pointer head harus dibuat bernilai null terlebih dahulu : 23
  58. 58. head = NULL;untuk mengetahui apakah suatu Linked List kosong atau tidak, kita dapatmengetahuinya dengan mengecek nilai dari pointer Head-nya. int isEmpty() { if(head==NULL) return 1; else return 0; }Contoh program :  Penambahan didepan void tambahdata (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; } printf(”data masuk”); }Penggambaran : head NULLSetelah dibuat node baru dan jika diketahui head==NULL : head baruBila kita membuat node baru lagi maka 24
  59. 59. baru head head baru head head Penambahan di belakangvoid insertBelakang (int databaru){ TNode *baru,*bantu; //digunakan untuk mengetahui data terbelakang 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; } printf(”data masuk”);} 25
  60. 60.  Tampilvoid tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ printf(“%i “,bantu->data); bantu=bantu->next; } printf(“n”); } else printf(“Masih Kosong”);} Hapus di depanvoid 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; } prinf(“%i terhapus”,d); } else printf(“Masih Kosong”);} Hapus di belakangvoid 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; } 26
  61. 61. printf(“%i terhapus”,d); } else printf(“Masih Kosong”); } latihan :  Buatlah ilustrasi dari masing-masing potongan program.  Buat program lengkap dari potongan-potongan program yang ada diatas! Buat agar menjadi seperti menu.  Buat program untuk memasukkan node baru tetapi diantara node yang sudah ada. Tentukan node yang baru akan berada pada antrian keberapa.2. Dengan Head dan tail - Menggunakan 2 pointer, head dan tail. - Head selalu menunjuk node pertama dan tail selalu menunjuk node terakhirSebelumnya kita harus mendeklarasikan dulu pointer head : TNode *head, *tail;Setelah kita mendeklarasikan pointer head, kita belum bisa secara langsungmendeklarasikan node yang dituju. Sehingga pointer head harus dibuat bernilainull terlebih dahulu : head = NULL; tail = NULL;untuk mengetahui apakah suatu Linked List kosong atau tidak, kita dapatmengetahuinya dengan mengecek nilai dari pointer Tail-nya. int isEmpty() { if(tail==NULL) return 1; else return 0; } 27
  62. 62. Contoh program :  Penambahan di depan void tambahdata (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->next=NULL; tail->prev=NULL; } else { baru->next=head; head->prev=baru; head=baru; } printf(”data masuk”); }Penggambaran : head tail NULLSetelah dibuat node baru dan jika diketahui tail==NULL : head tail baruBila kita membuat node baru lagi maka : baru head tail 28
  63. 63. head tail baru head tail head tail Penambahan di belakangvoid 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; } printf(“Data sudah masukn”);} Tampilvoid tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=tail->next){ prinrf(“%i ”,bantu->data); bantu=bantu->next; } cout<<endl; } else printf(“masih kosongn”); } 29

×