Disusun Oleh:
TEKNIK INFORMATIKA
i
TAHUN 2017
HALAMAN PENGESAHAN
AII241
Tanggal : ……………………
Dikaji ulang oleh : Ketua Jurusan Teknik Informatika
Disetujui oleh : Wakil Direktur 1 Bidang Akademik
Disiapkan Oleh:
Koordinator Team Teaching, Anggota, Anggota,
ii
KATA PENGANTAR
Segala puji dan syukur penulis panjatkan ke hadirat Allah Swt. Alhamdulillahi
Rabbil’Aalamin, atas limpahan rahmat dan karunia-Nya penulis dapat menyelesaikan
penyusunan modul ini. Shalawat dan salam dengan ucapan Allahumma sholli ’ala Muhammad
wa ’ala ali Muhammad penulis sampaikan untuk junjungan kita Nabi besar Muhammad Saw.
Modul Praktikum Algoritma dan Pemrograman 2 ini disusun untuk memenuhi kebutuhan
pendidikan dalam kegiatan Praktikum mata kuliah Pemrograman Visual.
Seperti layaknya sebuah modul, maka pembahasan dimulai dengan menjelaskan tujuan
yang hendak dicapai dan disertai dengan latihan yang mengukur tingkat penguasaan materi
setiap topik. Dengan demikian pengguna modul ini secara mandiri dapat mengukur tingkat
ketuntasan yang dicapainya.
Penulis menyadari sepenuhnya bahwa modul ini tentu punya banyak kekurangan. Untuk
itu penulis dengan berlapang dada menerima masukan dan kritikan konstruktif dari berbagai
pihak demi kesempurnaannya di masa yang akan datang. Akhirnya kepada Allah jualah penulis
bermohon semoga semua ini menjadi amal saleh bagi penulis dan bermanfaat bagi pembaca.
iii
TATA TERTIB PRAKTIKUM
1. Mahasiswa peserta praktikum berpakaian sopan dan pantas, dan tidak diperkenankan
memakai alas kaki ke dalam ruang praktikum,
2. Sebelum kegiatan praktikum dimulai mahasiswa diharapkan untuk mempersiapkan diri
terlebih dahulu perihal materi perkuliahan yang akan dibahas.
3. Mahasiswa dilarang untuk memasuki ruangan sebelum dijinkan oleh dosen / instruktur /
asisten / staff / kepala laboratorium komputer.
4. Mahasiswa masing-masing menempati komputer yang telah disediakan
5. Mahasiswa menyiapkan buku modul praktek yang telah dibagikan
6. Mahasiswa mengerjakan materi dan tugas praktikum sesuai modul praktek
7. Mahasiswa dilarang berbicara, bercakap-cakap apabila tidak diperintahkan oleh Dosen /
Instruktur Laboratorium Komputer baik sebelum maupun selama kegiatan berlangsung,
8. Mahasiswa mengisi absensi kehadiran praktikum yang telah disediakan
9. Selama kegiatan perkuliahan berlangsung mahasiswa diwajibkan untuk menjaga
ketertiban di dalam ruangan laboratorium komputer, mahasiswa mematikan komputer
setelah selesai kegiatan perkuliahan lab.
10. Mahasiswa peserta praktikum dilarang main game, arogan, merokok, makan atau minum
di dalam ruangan laboratorium komputer, mahasiswa yang main game, arogan, makan,
atau minum akan langsung dikeluarkan dari laboratorium komputer.
11. Mahasiswa dilarang mengoperasikan (menggunakan, memindahkan peralatan
laboratorium), sebelum mendapat izin dari dosen / instruktur / asisten / staff / kepala
laboratorium komputer.
12. Apabila mahasiswa tidak mengerti cara mengoperasikan alat yang tersedia, agar
menanyakan kepada Dosen / Instruktur / Asisten / Staff Laboratorium Komputer.
13. Mahasiswa tidak mengganggu kegiatan belajar-mengajar. (Seperti : mengobrol, atau
menggunakan Telepon Seluler), keluar dan masuk Laboratoirum Komputer tanpa
meminta ijin terlebih dahulu kepada dosen yang bersangkutan.
14. Apabila kegiatan Laboratorium sudah selesai, mahasiswa diharuskan untuk
mengembalikan semua peralatan pada posisi semula,
15. Apabila terjadi kerusakan peralatan, agar mahasiswa segera melaporkan kepada Dosen /
Instruktur / Asisten / Staff / Kepala Laboratorium Komputer, adapun jika kerusakan
disebabkan oleh kelalaian mahasiswa maka yang bersangkutan diharuskan mengganti
kerusakan tersebut,
16. Apabila mahasiswa tidak mengikuti ketentuan diatas maka akan dikenakan sanksi baik
administrasi maupun akademik
iv
DAFTAR ISI
v
Praktikum ke-1
1. Judul Materi
Mahasiswa dapat menggunakan struktur data pada pemrograman C++ secara benar (C3,
A3, P4)
4. Teori Singkat
Sebuah struktur data adalah sekelompok elemen data yang dikelompokkan bersama
di bawah satu nama. Berbeda dengan array yang harus bertipe sama, unsur-unsur data
(dikenal sebagai elemen struktur atau field) dapat memiliki tipe data dan panjang yang
berbeda. Selain itu, array diakses melalui indeksnya sedangkan struktur diakses melalui
identifier atau nama variabel. Walaupun field-field tersebut berada dalam satu kesatuan,
masing-masing field tersebut tetap dapat diakses secara individual. Field-field tersebut
digabungkan menjadi satu dengan tujuan untuk kemudahan dalam operasinya.
Misalnya Anda ingin mencatat data-data mahasiswa dan pelajar dalam sebuah
program, Untuk membedakannya Anda dapat membuat sebuah record mahasiswa yang
terdiri dari field nim, nama, alamat dan ipk serta sebuah record pelajar yang terdiri dari
field-field nama, nourut, alamat dan jumnilai. Dengan demikian akan lebih mudah untuk
membedakan keduanya.
Deklarasi
Struktur data dapat dinyatakan dalam C ++ menggunakan sintaks berikut:
struct nama_struktur nama struktur, kata struct harus ada
{
tipe_data1 elemen1;
tipe_data2 elemen2;
tipe_data3 elemen3; elemen dari struktur/field
…
…
identifier yang digunakan untuk mengakses
} nama_objek;
struktur
1
atau sintaks berikut:
struct nama_struktur
{
tipe_data1 elemen1;
tipe_data2 elemen2;
…
…
} ;
struct nama_struktur nama_objek;
Enumerasi
Enumerasi adalah tipe data yang mempunyai elemen-elemen bertipe konstanta
dengan urutan yang sudah ditentukan. Nilai-nilai dari konstanta ini berupa nilai-nilai integer
yang diwakili oleh pengenal yang ditulis di antara tanda kurung kurawal “{ “ dan “}”. Tipe
ini dideklarasikan dengan kata kunci enum.
5. Pelaksanaan Praktikum
6. Latihan
Contoh 1 merupakan contoh struktur data pada pemrograman C++ dalam codeblocks, baik
contoh struktur data dengan tipe data yang sama maupun struktur data dengan tipe data yang
berbeda. Contoh 1 merupakan contoh sederhana, yang memuat proses penginputan dan
proses menampilkan struktur data. Contoh 1 merupakan contoh pemrograman dari kasus
2
penginputan data diri mahasiswa meliputi nama, nim, semester, dan ipk, serta tanggal
penginputan data diri tersebut.
Contoh 1
#include <iostream>
struct mahasiswa
{
char nim[10];
Contoh struktur dengan tipe
char nama[25];
int semester; data berbeda
float ipk;
};
int main()
{
struct tanggal
{ Contoh struktur dengan tipe
int tanggal, bulan, tahun; data sama
}tgl;
// program mengakses field
cout << "Data inputan mahasiswa\n";
cout << "Tanggal\t: "; cin >> tgl.tanggal;
cout << "Bulan\t: "; cin >> tgl.bulan;
cout << "Tahun\t: "; cin >> tgl.tahun;
3
Sebutkan komponen dari pendeklarasian struktur data mahasiswa dan tanggal, serta
cara mengaksesnya!
Buatlah sebuah source code yang memuat struktur data dari permasalahan kehidupan
sehari-hari!
Contoh 2 merupakan contoh penggunaan enumerasi dalam struktur data pada codeblocks.
Contoh 2
#include <iostream>
int main ()
{
struct siswa
{
int nis;
string nama;
j_kel kelamin;
} A;
A.nis = 123;
A.nama = "Riri";
A.kelamin = wanita;
7. Tugas
4
- spp var Rp 50.000/sks
2) Buat program untuk menghitung jumlah nilai akhir mahasiswa menggunakan struktur
dengan ketentuan :
Nilai akhir = (10%*tugas) + (20%*kuis) + (30%*mid) + (40%*uas)
Nilai Huruf :
Nilai akhir >85 : A
85 >= nilai akhir > 70 : B
70 >= nilai akhir > 55 : C
55 >= nilai akhir > 40 : D
Nilai akhir <=40 : E
5
Praktikum ke-2
1. Judul Materi
Struktur Array
4. Teori Singkat
Array adalah suatu struktur yang terdiri dari sejumlah elemen yan memiliki tipe data
yang sama. Elemen-elemen array tersusun secara sekuensial dalam memori komputer. Array
dapat berupa 1 dimensi, 2 dimensi, tiga dimensi ataupun multi dimensi. Ukuran array
dideklarasikan terlebih dahulu di awal, dimana ukuran array menandakan jumlah elemen
yang terkandung di dalam Array. Akibatnya array bersifat statis karena memiliki batasan
alokasi memori (ukuran).
Array dalam struktur adalah suatu komponen dalam struktur yang berbentuk array,
dapat berupa elemen berbentuk array, objek berbentuk array, ataupun elemen dan objek
sekaligus berbentu array.
struct nama_struktur
{
tipe_data1 elemen1[5];
tipe_data2 elemen2[5];
…
} nama_objek ;
struct nama_struktur
{
tipe_data1 elemen1;
tipe_data2 elemen2;
…
} nama_objek[10] ;
6
Sintaks dari elemen dan objek berbentuk array.
struct nama_struktur
{
tipe_data1 elemen1[5];
tipe_data2 elemen2[5];
…
} nama_objek[10] ;
5. Pelaksanaan Praktikum
6. Latihan
Buatlah pemrograman yang memuat array tentang penginputkan data diri yang
meliputi nama dan umur!
Contoh penggunaan elemen struktur data berupa array dapat dilihat pada Contoh 1.
Contoh 1
#include <iostream>
struct orang
{
char nama[5][30]; int umur[5];
};
7
main()
{
struct orang divisi;
int i;
Buatlah program yang memuat elemen struktur data berupa array dari kasus
pendataan isi ruangan pada Gedung perkuliahan Teknik Informatika!
Contoh penggunaan objek struktur data berupa array dapat dilihat pada Contoh 2.
Contoh 2
#include <iostream>
using namespace std;
struct orang
{
char nama[30]; short umur;
}divisi[10];
main()
{
int i;
for (i=0; i<=9;i++)
{
cout << "\nData ke-" << i+1;
cout << "\nNama : "; cin >> divisi[i].nama;
8
cout << "Umur : "; cin >> divisi[i].umur;
}
Buatlah program yang memuat objek struktur data berupa array dari kasus
pendataan isi ruangan pada Gedung perkuliahan Teknik Informatika!
Contoh penggunaan objek struktur data berupa array dapat dilihat pada Contoh 3.
Contoh 3
#include <iostream>
using namespace std;
struct orang
{
char nm_divisi[30];
char nama[5][30]; short umur[5];
}divisi[10];
main()
{
int i, j;
for (i=0; i<=9;i++)
{
cout << "\nData Divisi ke-" << i+1;
cout << "\nNama Divisi: "; cin >> divisi[i].nm_divisi;
cout << "\nAnggota divisi ke-“ << i+1:
for (j=0;j<=4;j++)
{
cout << "\nNama : "; cin >> divisi[i].nama[j];
cout << "Umur : "; cin >> divisi[i].umur[j];
}
}
9
}
Buatlah program yang memuat elemen dan objek struktur data berupa array dari
kasus pendataan isi ruangan pada Gedung perkuliahan Teknik Informatika!
7. Tugas
2) Buat program untuk menghitung jumlah nilai akhir mahasiswa menggunakan elemen dan
objek struktur array dengan ketentuan :
Nilai akhir = (10%*tugas) + (20%*kuis) + (30%*mid) + (40%*uas)
Nilai Huruf :
Nilai akhir >85 : A
85 >= nilai akhir > 70 : B
70 >= nilai akhir > 55 : C
55 >= nilai akhir > 40 : D
Nilai akhir <=40 : E
3) Buatlah program menghitung durasi rental warnet menggunakan objek struktur array,
dengan ketentuan perhitungannya:
30 detik = Rp. 130,-
Satuan waktu yang diinputkan dalam jam : menit : detik
10
11
Praktikum ke-3 dan Praktikum ke-4
1. Judul Materi
Pointer
4. Teori Singkat
Pointer merupakan variabel yang digunakan untuk menunjukkan suatu alamat memori
komputer.
Operator pointer:
&nama_pointer menunjukkan alamat nama_pointer
Pada pointer terdapat 3 jenis operator, yaitu operator penugasan, operator aritmatika, dan
operator logika.
a. Operator Penugasan
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.
b. Operator Aritmatika
Pada pointer dapat dilakukan operasi aritmatika, yaitu operasi penambahan dan
pengurangan. Namun operasi ini hanya terbatas untuk tipe data integer saja.
c. Operator Logika
Pada pointer dapat digunakan operator logika, yaitu
if (pernyataan)
{
perintah;
…
}
12
else
{
perintah;
…
}
Structure of Pointer
Pointer dapat diakses dengan struktur. Variabel pointer dari struktur dapat
dideklarasikan sebagai berikut.
struct nama_struktur
tipe_data1 elemen1;
tipe_data2 elemen2;
Pengaksesan Struktur
Elemen dari struktur melalui pointer dapat diakses dengan dua cara:
a. Merujuk pointer ke alamat lain untuk mengakses memori
Deklarasi untuk mengakses anggota stuktur melalui pointer dapat dilihat pada cara
berikut.
struct nama_struktur
tipe_data1 elemen1;
tipe_data2 elemen2;
…..
}*nama_pointer, nama_objek;
atau
struct nama_struktur
tipe_data1 elemen1;
tipe_data2 elemen2;
…..
};
13
main()
atau
struct nama_struktur
tipe_data1 elemen1;
tipe_data2 elemen2;
…..
nama_pointer = (cast-type*)malloc(byte-size)
5. Pelaksanaan Praktikum
6. Latihan
Contoh 1
#include <iostream>
using namespace std;
main()
{
int a, b;
a = 30;
b = a - 5;
int *ubah;
ubah = &a;
*ubah = 20;
ubah = &b;
*ubah = 10;
Contoh penggunaan operator penugasan pada pointer dapat dilihat pada Contoh 2.
Contoh 2
float nilai,*p1,*p2; nilai = 14.54;
cout << "nilai = “ << nilai <<", alamatnya "<<&nilai;
p1 = &nilai;
p2 = p1;
cout << "\n nilai p1 = “ << *p2 <<", p1 menunjuk alamat "<<p1;
cout << "\n nilai p2 = “ << *p2 <<", p2 menunjuk alamat" <<p2;
Buatlah penjelasan mengenai alur program pada Contoh 2 dan buatlah contoh lain
untuk operato penugasan!
Contoh penggunaan operator aritmatika pada pointer dapat dilihat pada Contoh 3.
Contoh 3
#include <iostream>
using namespace std;
15
void main(){
int nilai[5], *penunjuk; clrscr();
nilai[0] = 125; nilai[1] = 345;
nilai[2] = 750; nilai[3] = 800;
nilai[4] = 900;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk<<" ada di alamat memori "<<penunjuk;
cout<<"\nNilai "<<*(penunjuk+1)<<" ada di alamat memori"<<penunjuk+1;
cout<<"\nNilai "<<*(penunjuk+2)<<" ada di alamat memori"<<penunjuk+2;
cout<<"\nNilai "<<*(penunjuk+3)<<" ada di alamat memori"<<penunjuk+3;
cout<<"\nNilai "<<*(penunjuk+4)<<" ada di alamat memori"<<penunjuk+4;
}
Contoh penggunaan operator logika pada pointer dapat dilihat pada Contoh 4.
Contoh 4
#include <iostream>
using namespace std;
void main()
{
int *pa, *pb, a = 100, b = 10;
clrscr();
pa = &a; pb = &b;
if (*pa < *pb)
{
cout<<"pa menunjuk ke memori lebih RENDAH dari pb\n";
}
else if (*pa == *pb)
{
cout<<"pa menunjuk ke memori yang SAMA dengan pb\n";
}
else
{
cout<<"pa menunjuk ke memori lebih TINGGI dari pb\n";
}
}
main()
16
{
void *ptr; //pointer tidak bertipe
main()
{
int tgl_lahir[]={24, 6, 1965};
int *ptgl;
ptgl = tgl_lahir;
cout << "Nilai yang ditunjuk oleh ptgl: " << *ptgl << endl;
cout << "\nPengaksesan menggunakan Pointer dengan jumlah elemen array dihitung
otomatis\n";
for (int i=0; i< sizeof (tgl_lahir)/sizeof(int); i++)
cout << * (ptgl+i) << endl;
17
}
}
main()
{
int nilai = 90;
cout << "Nilai mula-mula " << nilai << endl;
ubah_nilai (nilai);
cout << "Nilai sekarang " << nilai << endl;
}
struct Tanggal
{
int tgl, bln, thn;
};
struct Data
{
char nama [8];
struct Tanggal *Lahir,a;
}mhs;
main ()
{
mhs.Lahir = &mhs.a;
//struct Tanggal a;
//struct Data mhs = {&a};
18
cout << "Masukkan nama : "; cin >> mhs.nama;
cout << "Masukkan Tanggal = "; cin>> mhs.Lahir->tgl;
cout << "Masukkan Bulan = "; cin >> mhs.Lahir->bln;
cout << "Masukkan Tahun = "; cin >> mhs.Lahir->thn;
7. Tugas
Berikut adalah beberapa tugas untuk praktikum ke-3 dan praktikum ke-4.
1) Buatlah program untuk menghitung spp mahasiswa menggunakan struktur pointer, jika
diketahui
a. D3
- spp tetap Rp 500.000
- spp var Rp 25.000/sks
b. S1
- spp tetap Rp 750.000
- spp var Rp 50.000/sks
2) Buat program untuk menghitung jumlah nilai akhir mahasiswa menggunakan struktur
pointer dengan ketentuan :
Nilai akhir = (10%*tugas) + (20%*kuis) + (30%*mid) + (40%*uas)
Nilai Huruf :
Nilai akhir >85 : A
85 >= nilai akhir > 70 : B
70 >= nilai akhir > 55 : C
55 >= nilai akhir > 40 : D
Nilai akhir <=40 : E
3) Buatlah program menghitung durasi rental warnet menggunakan struktur pointer, dengan
ketentuan perhitungannya:
30 detik = Rp. 130,-
Satuan waktu yang diinputkan dalam jam : menit : detik
19
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat pada praktikum ke-5.
20
Praktikum ke-5 dan Praktikum ke-6
1. Judul Materi
Stack
4. Teori Singkat
Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data
yang lain. Stack menggunakan konsep LIFO. LIFO merupakan salah satu konsep yang
efektif untuk menyimpan dan mengambil data, yaitu "terakhir masuk sebagai yang
pertama keluar" (Last In First Out). Hal ini berarti, pengambilan data akan berkebalikan
urutannya dengan penyimpanan data.
Ada beberapa istilah yang harus diketahui dalam stack, yaitu:
a. Top, yaitu bagian atas dari stack
b. Push, yaitu meletakkan sebuah elemen pada Top
c. Pop, yaitu menghapus/memindahkan elemen pada Top
d. IsEmpty, yaitu fungsi yang digunakan untuk mengecek apakah stack kosong
e. IsFull, yaitu fungsi yang digunakan untuk mengecek apakah stack sudah penuh
5. Pelaksanaan Praktikum
6. Latihan
Buatlah Algoritma Push dan Pop pada Stack dalam bentuk flowchart!
Stack dapat dinyatakan dalam array dengan mendefinisikan ukuran array sebagai
batas maksimum stack. Adapun deklarasi stack adalah sebagai berikut.
21
#define MAXSTACK 5
typedef struct{
char item[MAXSTACK]; //array yang berisi data tumpukan
int top; //indeks data yang teratas
} Stack;
b. IsFull, fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh
int IsFull(Stack &s){
if (s.top == MAXSTACK)
return 1;
else
return 0;
}
c. Push, fungsi yang menambahkan sebuah elemen ke dalam stack dengan syarat stack tidak
penuh.
d. IsEmpty, fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong
int IsEmpty(Stack &s){
if (s.top == 0)
return 1 ;
else
return 0;
}
22
Jelaskan fungsi IsEmpty dan sebutkan cara pengaksesannya!
e. Pop, fungsi yang mengeluarkan sebuah elemen dari stack dengan syarat stack tidak
kosong
char pop(Stack &s){
if (IsEmpty (s) == 1)//stack kosong
cout << "Stack masih kosong!";
else
{
-- (s.top);
return (s.item[s.top]);
}
}
Jelaskan fungsi Pop dan sebutkan cara pengaksesannya!
7. Tugas
23
Praktikum ke-7 dan Praktikum ke-8
1. Judul Materi
Queue
4. Teori Singkat
Queue adalah konsep penyimpanan sekumpulan data yang sering digunakan. Pada
antrian data dapat disimpan dalam array atau linked list. Pada queue, penunjuk posisi depan
dan belakang harus disimpan. Apabila akan menambah data pada antrian maka
menaikkan penunjuk belakang dan meletakkan data pada posisi tersebut. Apabila akan
menghapus data pada antrian maka dihapus pada posisi depan dan menaikkan penunjuk
depan. Queue menggunakan konsep FIFO (First In First Out), artinya yang pertama masuk
maka yang pertama keluar.
Ada beberapa istilah yang harus diketahui dalam queue, yaitu:
a. Head/Front, yaitu elemen terdepan dari queue
b. Tail/Rear, yaitu elemen terakhir dari queue
c. Enqueue, yaitu meletakkan sebuah elemen pada Tail/Rear
d. Dequeue, yaitu menghapus/mengeluarkan elemen pada Head/Front
e. IsEmpty, yaitu fungsi yang digunakan untuk mengecek apakah queue kosong
f. IsFull, yaitu fungsi yang digunakan untuk mengecek apakah queue sudah penuh
5. Pelaksanaan Praktikum
6. Latihan
Buatlah Algoritma Enqueue dan Dequeue pada Queue dalam bentuk flowchart!
24
Queue dapat dinyatakan dalam array dengan mendefinisikan ukuran array sebagai
batas maksimum queue. Adapun deklarasi queue adalah sebagai berikut.
#define MAXQUEUE 5
typedef struct{
char item[MAXQUEUE]; //array yang berisi data tumpukan
int head; //indeks data yang terdepan
int tail; //indeks data yang terakhir
} Queue;
b. IsFull, fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh
int IsFull(Queue &s){
if (s.tail== MAXQUEUE)
return 1;
else
return 0;
}
c. Enqueue, fungsi yang menambahkan sebuah elemen ke dalam queue dengan syarat queue
tidak penuh.
d. IsEmpty, fungsi yang melakukan pengecekan apakah queue dalam kondisi kosong
25
int IsEmpty(Queue &s){
if (s.head == s.tail)
return 1 ;
else
return 0;
}
e. Dequeue, fungsi yang mengeluarkan sebuah elemen dari queue dengan syarat queue tidak
kosong
char dequeue(Queue &s){
if (IsEmpty (s) == 1)//Queue kosong
cout << "Queue masih kosong!";
else
{
++ (s.head);
return (s.item[s.head]);
}
}
Jelaskan fungsi Dequeue dan sebutkan cara pengaksesannya!
7. Tugas
26
Praktikum ke-10
1. Judul Materi
4. Teori Singkat
Secara konseptual, linked list merupakan deretan elemen yang berdampingan. Akan
tetapi, karena elemen-elemen tersebut dialokasikan secara dinamis (menggunakan malloc),
sangat penting untuk diingat bahwa kenyataannya, linked list akan terpencar-pencar di
memori. Pointer dari elemen ke elemen berarti sebagai penjamin bahwa semua elemen dapat
diakses.
Single linked list atau biasa disebut linked list terdiri dari elemen-elemen individu,
dimana masing-masing dihubungkan dengan pointer tunggal. Masing-masing elemen terdiri
dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer next.
Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan cara
menunjuk pointer next suatu elemen ke elemen yang mengikutinya. Pointer next pada
elemen terakhir merupakan NULL, yang menunjukkan akhir dari suatu list. Elemen pada
awal suatu list disebut head, dan elemen terakhir dari suatu list disebut tail.
Double linked list dibentuk dengan menyusun sejumlah elemen sehingga pointer next
menunjuk ke elemen yang mengikutinya dan pointer back menunjuk ke elemen yang
mendahuluinya. Info adalah data yang digunakan dalam simpul, back adalah pointer yang
menunjuk pada simpul sebelumnya, dan next adalah pointer yang menunjuk pada simpul
sesudahnya
5. Pelaksanaan Praktikum
27
6. Latihan
a. Link List
i. Insert
Insert sebagai node awal dari linked list
void insertashead(list insert)
{
insert->next=head;
head = insert;
}
28
ii. Delete
Buatlah program yang memuat:
Delete sebagai simpul pertama
Delete sebagai simpul tertentu
Delete sebagai simpul terakhir
b. Double Link List
Source code untuk double link list LIFO
struct DoubleLinkedNode {
int bil;
struct DoubleLinkedNode *back;
struct DoubleLinkedNode *next;
};
void bentuk_awal() {
struct DoubleLinkedNode *awal; int j=0;char jawab;
while(1){
awal=(struct DoubleLinkedNode*) malloc(sizeof (struct
DoubleLinkedNode));
cout<<"Masukkan bilangan :"; cin>>awal->bil;
if(j==0){
awal->next=NULL;
awal->back=NULL;
head = awal;
tail = awal;
}
else{
tail->next=awal;
awal->next=NULL;
awal->back=tail;
tail = awal;
}
cout<<"Ada data lagi(y/t): "; cin>>jawab;
if(jawab=='Y'||jawab=='y'){
j++;
continue;
}
else if(jawab=='T'||jawab=='t'){
//cout<<"Oke";
break;
}
else{
29
cout<<"Salah";
j++;
continue;
}
}
}
void tampil_list_lifo(){
struct DoubleLinkedNode *lifo;
cout<<endl<<"=========="<<endl;
cout<<"Data LIFO"<<endl;
cout<<"=========="<<endl;
lifo = tail;
while(lifo!=NULL){
cout<<lifo->bil<<endl;;
lifo=lifo->back;
}
cout<<"=========="<<endl;
}
void hapus_LIFO()
{
cout<<endl<<endl<<"!!!HAPUS LIFO!!!"<<endl<<endl;
if((head!=NULL)&&(head->next==NULL))
{
head->next=NULL;
cout<<"Data Kosong..."<<endl;
}
if(head!=NULL)
{
hapus=head;
head=hapus->next;
}
free(hapus);
hapus=NULL;
}
main(){
bentuk_awal();
tampil_list_lifo();
hapus_LIFO();
getch();
}
Jelaskan alur program source code di atas!
7. Tugas
30
prestasi. Buatlah fungsi-fungsi untuk membangun single linked list, menelusuri,
menambah simpul, menghapus simpul
2) Tambahkan tampilan di output setelah anda mengerjakan percobaan di atas dengan
penghitungan indeks prestasi rata-rata, dimana iprata=total/jumlah_siswa;
total didapatkan dari menambahkan IP yang didapat tiap mahasiswa.
3) Implementasikan Double Linked List ini untuk memvisualisasikan antrian mobil
(menampilkan dengan metode FIFO) yang ada pada sebuah perparkiran. Data yang
digunakan adalah : no plat nomor, merk mobil, nama pemilik. Data ditambahkan dan
dikurangi berdasarkan no plat nomor.
31
Praktikum ke-11 dan Praktikum ke-12
1. Judul Materi
Searching
4. Teori Singkat
Ada dua macam teknik pencarian yaitu pencarian sekuensial (sequential search) dan
pencarian biner (binary search). Perbedaan dari dua teknik ini terletak pada keadaan data.
Pencarian sekuensial digunakan apabila data dalam keadaan acak atau tidak terurut.
Sebaliknya, pencarian biner digunakan pada data yang sudah dalam keadaan urut.
5. Pelaksanaan Praktikum
32
6. Latihan
a. Sequential Search
i. Manual
Algoritma pencarian dapat dijelaskan sebagai berikut : pencarian dimulai dari data
paling awal, kemudian ditelusuri dengan menaikkan indeks data, apabila data
sama dengan kunci pencarian dihentikan dan diberikan nilai pengembalian true,
apabila sampai indeks terakhir data tidak ditemukan maka diberikan nilai
pengembalian false.
Ilustrasi dari algoritma sequential search adalah sebagai berikut :
Kunci=3
ii. Program
#include <iostream.h>
#include <conio.h>
int main(){
int A[]={1,2,3,4,5,6,7,8,9,10};
int i, ketemu = 0, n = sizeof(A)/sizeof(A[0]);
int cari; cout<<"Masukkan data yang dicari : ";cin>>cari;
for(i=0; i<n;i++){
if (A[i]==cari){
ketemu=!ketemu;
break;
}
}
33
if(ketemu>=0)
cout<<"Data ditemukan di posisi : "<<i+1;
else
cout<<"Data tidak ditemukan";
getch();
}
Ubahlah program di atas menjadi program Sequential Search dengan Fungsi.
b. Binary Search
#include <iostream.h>
#include <conio.h>
int main(){
int Data[]={1,2,3,4,5,6,7,8,9,10};
int n = sizeof(Data);
int cari; cout<<"Masukkan data yang dicari : ";cin>>cari;
int ketemu = BinarySearch(Data, cari, n);
if(ketemu>0)
cout<<"Data ditemukan di posisi : "<<ketemu;
else
cout<<"Data tidak ditemukan";
getch();
}
7. Tugas
34
Data 2: 15 21 6 35 37 24 4 21, cari : 24
2) m Searching dengan kasus yang diberikan.
3) Jelaskan alur program Searching yang telah dibuat pada nomor 2
35
Praktikum ke-13 dan Praktikum ke-14
1. Judul Materi
Sorting
4. Teori Singkat
5. Pelaksanaan Praktikum
6. Latihan
36
a. Buble Sort
i. Manual
Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan data ini akan diurutkan secara
ascending dengan menggunakan bubble sort. Berikut ini adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3, 2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2, 6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai
ii. Algoritma
for (i=0;i<=n-2;i++) {
for (j=n-1;j>i+1;j--) {
if Data[j] < Data[j-1]
Buble = A[j]
A[j] = A[j-1]
A[j-1] = Buble
}
}
Ubahlah algoritma di atas menjadi sebuah program Buble sort yang lengkap.
b. Quick Sort
i. Manual
37
ii. Algoritma
/* partition */
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
38
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
Ubahlah algoritma di atas menjadi sebuah program Quick sort yang lengkap.
7. Tugas
39
Praktikum ke-15
1. Judul Materi
Tree
4. Teori Singkat
Pohon biner dapat disajikan secara berurutan dengan menggunakan array atau file dan
list.
5. Pelaksanaan Praktikum
6. Latihan
Penyajian pohon biner secara berurutan dalam sebuah array adalah sebagai berikut. Akar
pohon (simpul tingkat pertama) selalu menempati elemen pertama array. Simpul-simpul tingkat
2 diletakkan sebagai elemen ke-2 dan 3. Simpul-simpul pada tingkat 3 diletakkan sebagai
elemen ke-4, 5, 6, 7. Simpul-simpul tingkat 4 diletakkan sebagai elemen ke-8 sampai ke-15.
40
Simpul dalam pohon biner dapat disajikan dengan list sebagai berikut:
Pohon Biner
41
7. Tugas
42
Praktikum ke-16
1. Judul Materi
Graph
4. Teori Singkat
Sebuath graph G=<V,E> terdiri dari sekumpulan titik (nodes atau vertices) V dan
sekumpulan garis (arcs atau edges) E. Sebuah garis menghubungkan dua titik u dan v; v
dikatakan adjacent to u. Pada graph berarah (directed graph), setiap garis mempunyai arah
dari u ke v dan dituliskan sebagai pasangan <u,v> atau u->v. Pada graph tak berarah
(undirected graph), garis tidak mempunyai arah dan dituliskan sebagai pasangan {u,v} atau
u<->v. Graph tak berarah merupakan graph berarah jika setiap garis tak berarah {u,v}
merupakan dua garis berarah <u,v> dan <v,u>.
Sebuah jalur (path) pada G adalah sekumpulan titik <v0, v1, v2, …, vn> sehingga
<vi, vi+1> (atau {vi, vi+1}), untuk setiap I dari 0 ke n-1 adalah garis pada G. Jalur menjadi
sederhana jika tidak ada dua titik yang identik. Jalur merupakan sebuah siklus jika v0=vn.
Jalur merupakan siklus yang sederhana jika v0=vn dan tidak ada dua titik yang identik.
Graph banyak digunakan untuk menggambarkan jaringan dan peta jalan, jalan kereta
api, lintasan pesawat, system perpipaan, saluran telepon, koneksi elektrik, ketergantungan
diantara task pada sistem manufaktur dan lain-lain. Terdapat banyak hasil dan struktur
penting yang didapatkan dari perhitungan dengan graph.
5. Pelaksanaan Praktikum
6. Latihan
43
Berikan penjelasan tentang macam-macam graph!
Salah satu penerapan graph adalah algoritma djikstra. Berikut source code algoritma djikstra
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<string.h>
#include<math.h>
#define IN 10000
#define N 9
start = source;
selected[start]=1;
dist[start] = 0;
while(selected[target] ==0)
{
min = IN;
m = 0;
for(i=1;i< N;i++)
{
d = dist[start] +cost[start][i];
if(d< dist[i]&&selected[i]==0)
{
dist[i] = d;
prev[i] = start;
}
if(min>dist[i] && selected[i]==0)
{
min = dist[i];
m = i;
}
}
start = m;
selected[start] = 1;
}
start = target;
44
j = 0;
while(start != -1)
{
path[j++] = start+65;
start = prev[start];
}
path[j]='\0';
strrev(path);
//printf("%s", path);
return dist[target];
}
int main()
{
int cost[N][N],i,j,w,ch,co;
int source, target,x,y;
printf("\t****Lintaan Algoritma Terpendek (DIJKSRTRA's ALGORITHM)****\n\n");
for(i=1;i< N;i++)
for(j=1;j< N;j++)
cost[i][j] = IN;
for(x=1;x< N;x++)
{
for(y=x+1;y< N;y++)
{
printf(" Masukkan nilai dari jalur antara simpul %d dan %d: ",x,y);
scanf("%d",&w);
cost [x][y] = cost[y][x] = w;
}
printf("\n");
}
printf("\n Masukkan asal simpul: ");
scanf("%d", &source);
printf("\n Masukkan target simpul: ");
scanf("%d", &target);
co = dijsktra(cost,source,target);
printf("\n Jalur Terpendek: %d",co);
getch();
return(0);
}
Jelaskan alur program dari source code di atas!
7. Tugas
45
a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, hasil pengerjaan manual, listing program,
hasil running, dan alur jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat sebelum UAS.
46
DAFTAR PUSTAKA
Davis, Stephen Randy. 2004. C++ For Dummies 5th Edition. Indiana: Wiley Publishing, Inc
Kadir, Abdul. 2012. Algoritma dan Pemrograman Menggunakan Java. Yogyakarta: Andi.
Kadir, Abdul. 2013. From Zero to A Pro Pemrograman C++. Yogyakarta: Andi.
Sitorus, Lamhot & Sembiring, David J.M. 2012. Konsep dan Implementasi Struktur Data
dengan C++. Yogyakarta: Andi.
http://www.cplusplus.com/
47