daftar isi - unila
TRANSCRIPT
i Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Daftar Isi
ii Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Daftar Isi
Deskripsi Mata Kuliah
Mata kuliah ini memberikan pengetahuan dan ketrampilan kepada mahasiswa untuk
melakukan analisa terhadap sebuah program komputer, ditinjau atas algoritma yang
digunakan untuk memecahkan masalah serta berbagai struktur data yang
merepresentasikan pengolahan datanya.
Tujuan Perkuliahan
Setelah mengikuti perkuliahan, mahasiswa akan dapat memahami cara kerja sebuah
program komputer berdasarkan algoritma dan struktur data yang digunakan,
kemudian dapat melakukan pemrograman berbagai permasalahan.
Deskripsi Isi Perkuliahan
Bahasan dalam praktikum ini mencakup pengurutan data dalam sebuah
Penyimpanan, Pencarian Data File, Stack(Tumpukan), Queue(Antrian), Tree, Dan
Juga Graph.
iii Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Daftar Isi
Daftar Isi
Daftar Isi ............................................................................................................................ iii
Konsep Dasar Struktur Data ........................................................................................... 4
1.1 Tujuan ...................................................................................................................... 4
1.2 Percobaan ................................................................................................................. 5
1.3 Soal Latihan ............................................................................................................. 5
Algoritma Pengurutan ...................................................................................................... 7
2.1 Tujuan .................................................................................................................. 7
2.2 Percobaan ............................................................................................................. 7
2.3 Soal Latihan ....................................................................................................... 12
Algoritma Pencarian ....................................................................................................... 14
3.1 Tujuan ................................................................................................................ 14
3.2 Percobaan ........................................................................................................... 14
3.3 Soal Latihan ....................................................................................................... 17
Array dan Pointer ........................................................................................................... 19
4.1 Dasar Teori ......................................................................................................... 19
4.2 Percobaan ........................................................................................................... 20
Stack (Tumpukan) .......................................................................................................... 23
5.1 Dasar Teori ......................................................................................................... 23
5.2 Percobaan ........................................................................................................... 24
Queue (Antrian) .............................................................................................................. 27
6.1 Tujuan ................................................................................................................ 27
6.2 Percobaan ........................................................................................................... 27
Tree .................................................................................................................................. 32
7.1 Dasar Teori ......................................................................................................... 32
7.2 Percobaan ........................................................................................................... 32
Graph ............................................................................................................................... 39
8.1 Tujuan ................................................................................................................ 39
8.2 Program yang dibutuhkan .................................................................................. 39
4 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Konsep Dasar Struktur Data
Pertemuan 1
Konsep Dasar Struktur Data
1.1 Tujuan
Tipe data adalah jenis data yang mampu ditangani oleh suatu Bahasa
pemrograman pada komputer, tiap-tiap bahasa pemrograman memiliki tipe data.
Obyek Data adalah kumpulan elemen yang mungkin untuk suatu tipe data tertentu.
Misalnya : integer mengacu pada obyek data -32768 s/d 32767, byte 0 s/d 255,
string adalah kumpulan karakter maks 255 huruf.
Struktur Data adalah cara penyimpanan dan pengorganisasian data-data pada
memori komputer maupun file secara efektif sehingga dapat digunakan secara
efisien, termasuk operasi-operasi di dalamnya.
Ciri algoritma yang baik menurut Donald E.Knuth:
• Input : ada minimal 0 input atau lebih
• Ouput : ada minimal 1 output atau lebih
• Definite : ada kejelasan apa yang dilakukan
• Efective : langkah yang dikerjakan harus efektif
• Terminate : langkah harus dapat berhenti (stop) secara jelas
Tujuan Instruksional : Pengantar
Tujuan dari materi ini adalah mengenalkan struktur data, dan pemrograman java
Kompetensi yang Diharapkan :
Mahasiswa diharapkan dapat memahami konsep struktur data dan dapat
menerapkannya di bahasa pemrograman java
Waktu Pertemuan : 100 menit
5 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
1.2 Percobaan
1.2 Percobaan
Percobaan 1
#include <iostream>
using namespace std;
int main( ) {
cout<<”Hello World”<<endl;
return 0;
}
Tulis hasilnya disini dan jelaskan isi program
Percobaan 2
#include <iostream>
using namespace std;
int main( ) {
int angka, Angka;
angka = 11;
Angka = 7;
cout<<angka<<endl;
cout<<Angka<<endl;
Return 0;
}
Tulis hasilnya disini
1.3 Soal Latihan
Pak Zai adalah Dosen Ilmu Komputer di Universitas Unknown di daerah Antah
Brantah sana. Karena terlalu sibuknya Pak Zai sampai tidak sempat membuat
6 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
1.3 Soal Latihan
rekapitulasi nilai perkuliahan. Bantulah Pak Zai untuk membuat program yang dapat
merekam nilai mahasiswa dengan rincian seperti dibawah ini!
Nama
NPM
Kelas (GENAP/GANJIL)
Nilai
Program juga dilengkapi dengan fungsi yang dapat menghitung jumlah mahasiswa
yang mendapat nilai A, B dan C. (Asusmsikan bahwa Pak Zai hanya memberikan
nilai A, B dan C saja, dan Asumsikan juga jumlah mahasiswa yang mengambil mata
kuliah bapak Zai bisa mencapai 100 mahasiswa)
Contoh :
Nilai A = 50 mahasiswa
Nilai B = 25 mahasiswa
Nilai C = 25 mahasiswa
Karena Pak Zai di minta oleh Ketua Jurusan untuk mengirim mahasiswa berprestasi
untuk mengikuti Seleksi MawaPres 2222 maka Pak Zai juga meminta anda untuk
menambahkan berapa orang yang mendapatkan nilai tertinggi (buatkan fungsi
CountMax) dan berapa orang yang mendapatkan nilai terendah (buatkan fungsi
CountMin). (Asumsikan bahwa nilai tertinggi A dan terendah C) Bantulah Pak
Zai dengan membuatkan program tersebut!
(HINT: Anda akan perlu menggunakan struct untuk melakukan recording data
mahassiswa, dan menambahkan sedikit fungsi untuk menghitung frekuensi
mahasiswa masing-masing nilai dan membuat fungsi CountMax dan CountMin
untuk memecahkan permasalahan ini).
Tulis programnya disini
7 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
Pertemuan 2
Algoritma Pengurutan
2.1 Tujuan
Dasar Teori Pencarian informasi untuk mendapatkan suatu kesimpulan pada suatu data
yang begitu besar, akan jauh lebih mudah dan cepat apabila data yang akan di olah telah
terurut. Sorting adalah metode atau teknik untuk melakukan pertukaran (switching) tiap
data tersebut, sehingga data tersebut secara keseluruhan akan terurut. Dalam kaitannya
dengan struktur data, pengurutan dilakukan pada data yang berupa array dalam memori.
Pengurutan data dapat dilakukan secara ascending (urut naik) dan descending (urut turun).
Pada modul ini akan dijelaskan tiga buah macam teknik pengurutan yaitu teknik
gelembung (bubble sort), teknik cepat (quick sort), dan teknik penggabungan (merge
sort). Perbedaan dari ketiga teknik ini akan dijelaskan sebagai berikut.
2.2 Percobaan
Bubble Sort Teknik bubble sort (gelembung), adalah teknik untuk mengurutkan
data (array) dengan mengikuti cara kerja gelembung. Teknik bubble sort termasuk
teknik yang mudah di implementasikan. Pengurutan dilakukan dari belakang
array, menuju ke array yang paling depan. Teknik ini akan memindahkan data
terkecil (ascending mode) ke bagian array terdepan
Percobaan 1
#include<iostream>
using namespace
std; int main() { //membuat tanda, apakah semua data telah terurut atau
belum bool terurut;
Tujuan Instruksional :
Pokok bahasan ini mengenalkan beberapa algoritma dalam proses pengurutan.
Kompetensi yang Diharapkan :
Mahasiswa diharapkan dapat memahami beberapa algoritma pengurutan, dan
dapat mengetahui perbedaan masing-masing serta dapat menerapkannya di
bahasa pemrograman java.
Waktu Pertemuan : 100 menit
8 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
//input data int a; cout<<"banyak integer: ";cin>>a;
int b[a];
for (int c=0;c<a;c++){ cout<<"aray ke-"<<c<<": ";cin>>b[c];} cout<<"melakukan proses bubble sort!\n\n"; //proses sorting for (int c=0;c<a;c++){ terurut=false; //beri tanda bahwa data belum terurut for (int d=a-1;d>c;d--){ //untuk menampilkan proses sorting, hilangkan
komentar /* for (int e=0;e<a;e++){
cout<<b[e]<<", ";}
cout<<endl; */
//Proses pertukaran data
if (b[d]<b[d-1]){ int tmp =
b[d]; b[d] = b[d-1];
b[d-1] = tmp; terurut=true;}}
if (!terurut) break;} //jika data telah terurut, berhenti proses for (int e=0;e<a;e++){
cout<<b[e]<<", ";} cout<<endl;
return 0;}
Tulis hasilnya disini
Metode Quick Sort atau teknik cepat, adalah metode pengurutan data
dengan cara memilih salah satu data sebagai pivot/kunci pembatas. Lalu
melakukan Sequencial searching dari depan dan belakang array, pencarian data
dari depan adalah pencarian data yang lebih besar dari nilai pivot, sedangkan
pencarian dari belakang adalah pencarian data yang lebih kecil dari nilai pivot,
9 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
jika kedua nilai telah ditemukan, tukar kedua data tesebut, lalu bagi dua data
tersebut, dan ulangi proses untuk sub array pertama dan sub array kedua.
Percobaan 2
#include<iostream>
using namespace
std; void tukar(int
*x,int *y){ int
temp; temp = *x;
*x = *y; *y = temp;} void qsort(int arai[],int
m,int n){ int pivot,i,j,k; //proses dilakukan jika sub-data terdiri lebih dari 1
anggota if( m < n){
//penandaan pivot
k = int((m+n)/2);
tukar(&arai[m],&arai[k]);
pivot = arai[m]; i
= m+1; j = n;
//pencarian data dari kiri dan kanan while(i <= j){ while((i <= n) && (arai[i] <=
pivot)) i++; while((j >= m) && (arai[j] >
pivot)) j--;
if( i < j) tukar(&arai[i],&arai[j]); } //melakukan pertukaran data
tukar(&arai[m],&arai[j]);
//lakukan sub-data
qsort(arai,m,j-1);
qsort(arai,j+1,n);}} int
main()
{
int a; cout<<"banyak integer:
";cin>>a; int b[a];
for (int c=0;c<a;c++){ cout<<"aray ke-"<<c<<": ";cin>>b[c];}
cout<<"melakukan proses quick sort!\n\n";
10 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
qsort(b,0,a-1);
for (int
e=0;e<a;e++){
cout<<b[e]<<", ";}
cout<<endl; return 0;}
Tulis hasilnya disini
Pada Metode Merge Sort atau teknik penggabungan, pengurutan data awalnya
dibagi dua secara terus menerus, sehingga hanya memiliki dua anggota tiap sub data,
lalu, dilakukan pertukaran data jika data kedua lebih kecil dari pada data pertama.
Lakukan hal tersebut ke semua sub-data. Kemudian gabungkan satu per satu setiap
sub-data sehingga didapatkan data lengkap yang terurut. Contoh:
11 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
Percobaan 3
#include<iostream>
using namespace
std;
void tukar(int
*x,int *y){ int
temp; temp = *x;
*x = *y; *y = temp;} int msort(int arai[],int
m,int n){ int
tengah=int((m+n)/2);
//melakukan sub-data
if (m!=tengah){
msort(arai,m,tengah);
msort(arai,tengah+1,n);}
int tmp[n+1-m];
//membuat array temp
for (int x=0;x<=(n-
m);x++){
tmp[x]=arai[m+x];}
int i=0, j=tengah+1, k=m;
//melakukan sorting
while
((k<=tengah)&(j<=n)){
tmp[i++]=(arai[j]<arai[k])?arai[j++]:arai[k++];}
while (k<=tengah){ tmp[i++]=arai[k++];}
while (j<=n){ tmp[i++]=arai[j++];}
//pemindahan array temp yang telah terurut ke
array asli for (int x=0;x<=(n-m);x++){
arai[m+x]=tmp[x];} return 0;} int
main()
{
int a; cout<<"banyak integer:
";cin>>a; int b[a];
for (int c=0;c<a;c++){ cout<<"aray ke-"<<c<<": ";cin>>b[c];} cout<<"melakukan proses quick
sort!\n\n";
12 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
msort(b,0,a-1);
for (int
e=0;e<a;e++){
cout<<b[e]<<", ";}
cout<<endl;
return 0;}
Tulis hasilnya disini
2.3 Soal Latihan
1. Buatkan sebuah program pengurutan, yang mengurutkan semua bilangan
genap dalam urutan menaik (ascending), dan bilangan ganjil dalam urutan
menurun (descending)
Tulis kode program disini
2. Bubble sort, Quick sort dan Merge sort memiliki beberapa kelebihan dan
kekurangan masing-masing, jelaskan perbedaan ketiga algoritma ini dan
berikan contoh kelebihan dan kekurangan masing-masing.
Tulis jawaban disini
13 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pengurutan
14 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pencarian
Pertemuan 3
Algoritma Pencarian
3.1 Tujuan
Pada bagian ini kita akan mendiskusikan mengenai pencarian (searching), pada
suatu data seringkali dibutuhkan pembacaan kembali informasi (retrieval
information) dengan cara searching. Searching adalah metode pencarian data
dengan cara menelusuri data-data tersebut. Dalam kaitan struktur data, tempat
pencarian data berupa array dalam memori. Pengurutan data dilakukan secara
ascending (urut naik) dan descending (urut turun).
Terdapat dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian
biner. Perbedaan dari dua teknik ini terletak pada keadaan data. Pencarian sekuensial
digunakan apabila data dalam keadaan acak atau tidak berurut. Sebaliknya,
pencarian biner digunakan pada data yang sudah dalam keadaan urut.
3.2 Percobaan
Pencarian sekuensial, atau sering disebut atau pencarian linear merupakan
metode pencarian yang paling sederhana. Prinsip kerja algoritma ini adalah dengan
membandingkan data yang ada satu persatu secara berurutan dengan data yang
dicari sehingga data tersebut ditemukan atau tidak ditemukan.
Percobaan 1
#include<iostream> using namespace std; int main() {
//deklarasi variabel int A[10],index[10], i,j,k,n;
Tujuan Intruksional :
Pokok Bahasan ini mengenalkan beberapa algoritma yang digunakan untuk
proses pencarian sebuah data.
Kompetensi Yang Diharapkan :
Mahasiswa diharapkan dapat memahami beberapa algoritma pengurutan, dan
dapat mengetahui perbedaan masing-masing serta dapat menerapkannya di
bahasa pemrograman java.
Waktu Pertemuan : 100 Menit
15 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pencarian
//bagian penginputan data cout<<"Masukkan jumlah data [Max 10] : "; cin>>n; for(i=0;i<n;i++) { cout<<"Masukkan Data ke - "<<(i+1)<<" = "; cin>>A[i]; } //bagian untuk memasukkan data yang akan dicari ke dalam K cout<<"Masukkan data yang anda akan cari : "; cin>>k;
//bagian pencarian data j=0; for (i=0;i<n;i++) { if(A[i]==k) { index[j]=i; j++; } } //jika data ditemukan dalam array if (j>0) { cout<<"Data "<<k<<" yang dicari ada "<<j<<" buah."<<endl; cout<<"Data tersebut terdapat dalam index ke : "; for(i=0;i<j;i++) { cout<<index[i]<<" "; } cout<<endl; }
//output data jika tidak ditemukan else { cout<<"Data tidak ditemukan dalam array."<<endl;; } return0; }
Tulis hasilnya disini
16 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pencarian
Percobaan 2
Metode pencarian biner hanya dapat digunakan jika sejumlah data telah
diurutkan. Jika dibandingkan dengan metode pencarian sekuensial, metode ini jauh
lebih cepat. Secara garis besar, cara kerja metode ini adalah sebagai berikut :
Urutkan dahulu sejumlah data. Lalu bagi dua data-data tadi dengan jumlah data
yang sama pada masing-masingnya. Kemudian data dibandingkan dengan data
terakhir dari subdata yang pertama. Jika data yang dicari lebih kecil, pencarian
dilanjutkan pada sub data pertama dengan terlebih dahulu membagi dua lagi data-
data tersebut dengan jumlah yang sama. Tetapi jika data yang dicari lebih besar dari
data terakhir subdata pertama, berarti data yang dicari kemungkinan terletak pada
subdata yang kedua. Proses diatas dilakukan berulang sampai data ditemukan atau
tidak ditemukan.
#include<iostream> using namespace std; int main() {
//deklarasi variabel int A[10],n, i, j, k, tkr, right, left, middle, tm;
//fungsi untuk input data cout<<"Masukkan jumlah data = "; cin>>n; for(i=0;i<n;i++) { cout<<"Masukkkan data ke - "<<(i+1)<<" = "; cin>>A[i]; } cout<<"Masukkan data yang akan anda cari : "; cin>>k;
//fungsi untuk pengurutan data for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if (A[i]>A[j]) { tkr=A[i]; A[i]=A[j]; A[j]=tkr; } } } //fungsi untuk pencarian data tm=0; right=n; left=0;
17 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pencarian
while(right>=left) { middle=(right+left)/2; if(A[middle]==k) { tm++; } if(A[middle]<k) { left=middle+1; } else { right=middle-1; } } if (tm>0) { cout<<"Data "<<k<<" yang dicari ada di dalam array."<<endl; } //output jika data tidak ditemukan else { cout<<"Data tidak ditemukan dalam array."<<endl; } return 0; }
Tulis hasilnya disini
3.3 Soal Latihan
Deskripsi
PRJ IV adalah serangkaian agenda yang diadakan untuk memeriahkan hari jadi
jurusan Ilmu Komputer. Tahun ini, Himakom telah berulang tahun yang ke IV.
Himakom mengadakan perlombaan antar siswa SMA/MA/SMK sederajat,
oleh karena itu panitia akan menghubungi beberapa sekolah yang dianggap
potesial untuk mengikuti lomba yang akan diadakan tersebut. Asumsikan
semua sekolah yang akan dihubungi memiliki kode telepon +00 dilanjut
dengan nomor telepon masing-masing sekolah. Ada banyak sekali kontak yang
akan dihubungi, bantulah panitia untuk menemukan nomor telepon mana saja
yang harus dihubungi, jika ada beberapa sekolah yang potensial untuk
mengikuti lomba tersebut.
18 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Algoritma Pencarian
Format Masukan
Masukan berupa sebuah bilangan bulat x(1<x<10000), yang menyatakan
banyaknya sekolah dan daftar nomor telepon yang dimiliki oleh panitia PRJ
IV. X baris berikutnya berisi sebuah string yang panjangnya <255 karakter
yang menyatakan sekolah dan kode sekolah tersebut. Inputan selanjutnya
adalah n bilangan bulat (1<n<1000). N baris berikutnya berisi nama-nama
sekolah yang memiliki kemungkinan untuk mengikuti lomba tersebut.
Format Keluaran
Keluaran berupa beberapa baris yang merupakan nomor telepon dari sekolah
yang ditanyakan. Jika sekolah yang ditanyakan tidak ada, maka jawab dengan
kalimat “Tidak ada daftar”
Contoh Inputan
5
SMA 1 Fisika +00123456
SMA 1 Biologi +00382938
SMA 1 Kimia +00902838
SMA 1 Matematika +00829384
SMA 1 Komputer +00109283
2
SMA 1 Komputer
SMA 1 Sejarah
Contoh Keluaran
+00109283
Tidak ada daftar
Tulis programnya disini
19 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Array dan Pointer
Petemuan 4
Array dan Pointer
4.1 Dasar Teori
Array atau larik adalah kumpulan dari nilai-nilai data bertipe sama dalam
urutan tertentu yang menggunakan sebuah nama yang sama. Nilai-nilai data pada
suatu larik disebut dengan elekmen-elemen larik. Letak urutan dari suatu larik
ditunjukkan oleh suatu index. Dan Elemen Array disimpan di dalam memori
secara berurutan.
Keunggulan array :
• Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array
dapat diacu secara langsung tanpa melalui elemen-elemen lain.
• Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke
elemenelemen tetangga, baik elemen pendahulu atau elemen penerus 3
• Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya
harus terjaga, maka penggunaan penyimpanannya sangat efisien
Kelemahan array :
• Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana
satu elemen adalah karakter, elemen lain bilangan, dan elemen lain adalah
tipe-tipe lain
• Tidak efisien dalam penggunaan memory
• Membuang banyak waktu dalam komputasi
Tujuan Intruksional :
Pokok Bahasan ini mengenalkan tentang Array dalam Struktur Data
Kompetensi Yang Diharapkan :
Mahasiswa diharapkan memahami tentang konsep Array dan diharapkan
dapat mengimplementasikan penggunaan kosep Array dalam struktur data.
Waktu Pertemuan : 100 Menit
20 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Array dan Pointer
4.2 Percobaan
Percobaan 1
21 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Array dan Pointer
Percobaan 2
22 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Array dan Pointer
Percobaan 3
23 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Stack (Tumpukan)
Petemuan 5
Stack (Tumpukan)
5.1 Dasar Teori
Stack bisa diartikan sebagai suatu kumpulan data yang seolah-olah diletakan
diatas data yang lain. Satu hal yang perlu diingat bahwa kita bisa menambahkan
(menyisipkan) data dan mengambil (menghapus) data melalui ujung yang sama,
yang disebut sebagai ujung atas stack (top of stack). Stack mempunyai sifat LIFO
(Last In First Out) artinya yang terahkir masuk adalah yang pertama keluar.
Untuk menjelaskan pengertian diatas, kita ambil contoh sebagai berikut.
Misalkan kita mempunyai 2 buah kotak yang ditumpuk, sehingga kotak yang satu
akan ditumpuk diatas kotak yang lainnya. Jika kemudian tumpukan 2 kotak tadi,
ditambah kotak ke-tiga, ke-empat, ke-lima dan seterusnya, maka akan diperoleh
sebuah tumpukan kotak yang terdiri dari N kotak. Secara sederhana, sebuah stack
bisa diilustrasikan seperti ini:
Dari gambar diatas,bisa dilihat bahwa kotak B terletak diatas kotak A dan ada
dibawah kotak C. Kotak D terletak diatas kotak C, kotak E terletak diatas kotak D
dan seterusnya sampai kotak terakhir. Dari gambar diatas menunjukkan bahwa
Tujuan Instruksional :
Pokok bahasan ini menjelaskan perintah-perintah yang berkaitan dengan operasi
stack, yaitu pop, push, isEmpty, isFull.
Kompetensi yang Diharapkan :
Mahasiswa diharapkan dapat memahami penggunaan pop, jus, isEmpty, isFull
pada operasi Stack.
Waktu Pertemuan : 100 menit
24 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Stack (Tumpukan)
dalam stack hanya bisa menambah atau mengambil sebuah kotak lewat satu
ujung, yaitu bagian atas, dan yang menjadi ujungnya adalah kotak F. Jadi jika ada
kotak lain yang akan disisipkan, maka kotak tersebut akan dletakkan diatas kotak
F, dan jika ada kotak yang akan diambil, maka kotak F yang pertama akan
diambil.
5.2 Percobaan
Percobaan 1
#include <iostream> #include <conio.h>
#define max 10 using namespace std; struct tumpukan //struktur tumpukan { int atas; int
data[max]; }T; void awal() //awal untuk menentukan nilai awal {
T.atas =- 1; } int kosong() //kosong untuk melanjutkan pengisian tumpukan { if (T.atas == -1)
return 1; else
return 0; } int penuh() //penuh untuk memberhentikan
tumpukan { if (T.atas == max-1)
return 1; else return
0; } void input (int data) //input untuk memasukan
data { if (kosong () == 1) //pemilihan jika data masih kosong
{ T.atas++; T.data [T.atas] = data; cout << "Data " << T.data[T.atas] <<" masuk ke
stack\n"; } else if (penuh () == 0) //pemilihan
jika data masih penuh
{ T.atas++;
25 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Stack (Tumpukan)
T.data [T.atas] = data; cout << "Data " << T.data [T.atas] << " masuk
ke stack\n"; }
} void hapus() //hapus untuk menghapus data paling atas { if (kosong() == 0) //mengambil data paling atas
{ cout << "Data teratas sudah terambil\n"; T.atas--
; } else //menampilkan jika data kosong
cout << "Data kosong\n"; } void tampil() //parameter menampilkan isi data {
if (kosong() == 0) //pemilihan menampilkan isi data {
for (int i = T.atas; i >= 0; i--) { cout << "\nTumpukan ke "<< i + 1 << "=" << T.data[i]; }
} else //jika salah maka menampilkan tumpukan kosong cout
<< "Tumpukan kosong\n"; } void bersih() //parameter memebersihkan semua data {
T.atas =- 1; cout << "Tumpukan kosong!\n";
}
main(void) { int pil, data; awal(); do
//perulangan do - while { cout << "\n1. Input\n2. Hapus\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukan pilihan : "; cin
>> pil; switch (pil) //pemilihan perintah
{ case 1: cout << "Masukan data = "; cin >> data; input (data);
break; case 2: hapus();
break; case 3: tampil();
break; case 4: bersih(); break;
26 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Stack (Tumpukan)
case 5: cout << "Terimakasih, tekan enter
untuk keluar"; } getch();
} while (pil != 5); }
Tulis hasilnya disini
27 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Queue (Antrian)
Petemuan 6
Queue (Antrian)
6.1 Tujuan
Queue merupakan kumpulan data dengan penambahan data hanya melalui
satu sisi, yaitu belakang (tail) dan penghapusan data hanya melalui sisi depan
(head). Berbeda dengan stack yang bersifat LIFO maka queue bersifat FIFO(First
In First Out), yaitu data yang pertama masuk akan keluar terlebih dahulu dan data
yang terakhir masuk akan keluar terakhir
6.2 Percobaan
Percobaan 1
#include <iostream>
#include <conio.h>
typedef struct
{
char data[20];
Tujuan Instruksional :
Pokok bahasan ini menjelaskan perintah-perintah dan fungsi untuk
queue(antrian).
Kompetensi yang Diharapkan :
Mahasiswa diharapkan dapat memahami perintah-perintah yang digunakan
untuk membuat konsep queue ke dalam java.
Waktu Pertemuan : 100 menit
28 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Queue (Antrian)
int head;
int tail;
}Data;
Data queue;
void init()
{
queue.head = queue.tail = -1;
}
int kosong()
{
if(queue.head==-1)
{
return 1;
}
else
{
return 0;
}
}
int penuh()
{
if(queue.tail==20-1)
{
return 1;
}
else
{ return 0;
}
}
void input()
{
29 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Queue (Antrian)
char data;
cout <<"Masukkan Data "; cin >>data;
if(penuh()==0)
{
queue.tail++;
queue.data[queue.tail]=data;
cout<<"TERSIMPAN"< }
else
{
cout <<"DATA SUDAH PENUH";
}
}
int keluar()
{
int i;
int x=queue.data[queue.head+1];
for(i=queue.head;i {
queue.data[i]=queue.data[i+1];
}
queue.tail--;
cout <<" DATA DI KELUARKAN"< return x;
}
void hapus()
{
init();
cout <<"Data telah dikosongkan";
}
void tampil()
{
if(kosong()==0)
{
for(int i=queue.head+1;i<=queue.tail;i++)
30 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Queue (Antrian)
{
cout < } cout<<"\n"<<"Head : "< cout<<"\n"<<"Tail : "< }
else
{
cout <<"DATA MASIH KOSONG";
}
}
main()
{
int pil;
cout<<"MBF"<cout<<"Linear Data"< do
{
cout<<"\n\n1. Masukkan Data"< cout<<"2. Keluarkan
Data"< cout<<"3. Kosongkan Data"< cout<<"4. Tampilkan
Data"< cout<<"5. EXIT"< cout<<"Silahkan Masukan Pilihan Anda
:";cin>>pil;
cout< switch (pil)
{
case 1:
{
input();
break;
}
case 2:
{
keluar();
break;
}
case 3:
{
hapus();
break;
31 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Queue (Antrian)
}
case 4:
{
tampil();
break;
}
case 5:
{
cout< }
default :
{
cout<<"\t\tTidak ada dalam pilihan"< }
}
}
while(pil>=1 && pil<= 4);
}
Tulis hasilnya disini
32 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
Petemuan 7
Tree
7.1 Dasar Teori
Tree atau dalam bahasa Indonesia disebut sebagai pohon, merupakan salah satu
jenis urutan sebagaimana STACK, LINKED LIST (Senarai Berkait) dan QUEUE.
Perbedaan Tree daripada ketiga cara pengurutan yang disebut diatas adalah bahwa
Tree (pohon) mempunyai struktur pengurutan yang tidak linier.
Struktur Tree terdiri dari node bertingkat yang mempunyai peran sesuai tingkatan
masing-masing. Tingkatan itu adalah: Parent (orang tua), Child (anak). Dalam
program Tree C++, dikenal beberapa istilah umum berikut ini:
1. Predecessor : Node yang berada diatas Successor atau sebuah node tertentu
(Parent).
2. Successor : Node yang berada dibawah Predecessor atau node tertentu (Child).
3. Parent : Predecessor diatas sebuah node atau diatas Successor.
4. Child : Successor dibawah sebuah node atau dibawah Predecessor.
5. Root (Akar) : Node tanpa Predecessor yang berada paling ujung atas.
6. Leaf (Daun) : Node tanpa Successor yang berada paling ujung bawah.
7. Sibling (Saudara Kandung) : Node-node yang mempunyai Parent yang sama.
7.2 Percobaan
Pengurutan data menggunakan metode Tree C++, memiliki beberapa istilah/cara
yang berbeda. Yaitu:
1. PreOrder : Cetak node - Kunjungi node kiri - Kunjungi node kanan.
2. InOrder : Kunjungi node kiri - Cetak node - Kunjungi node kanan.
3. PostOrder : Kunjungi node kiri - Kunjungi node kanan - Cetak node.
Tujuan Instruksional :
Pokok bahasan ini adalah memberikan pemahaman mengenai tree pada struktur
data, serta dapat mengetahui node-node, serta child dari suatu data.
Kompetensi yang Diharapkan :
Mahasiswa diharapkan dapat memahami penggunaan tree pada struktur data.
Waktu Pertemuan : 100 menit
33 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
Percobaan
#include <iostream>
#include <cstdlib>
using namespace std;
class BinarySearchTree
{
private:
struct tree_node
{
tree_node* left;
tree_node* right;
int data;
};
tree_node* root;
public:
BinarySearchTree()
{
root = NULL;
}
bool isEmpty() const { return root==NULL; }
void print_inorder();
void inorder(tree_node*);
void print_preorder();
void preorder(tree_node*);
void print_postorder();
void postorder(tree_node*);
void insert(int);
void remove(int);
};
void BinarySearchTree::insert(int d)
{
tree_node* t = new tree_node;
tree_node* parent;
t->data = d;
t->left = NULL;
t->right = NULL;
parent = NULL;
if(isEmpty()) root = t;
else
{
tree_node* curr;
curr = root;
34 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
while(curr)
{
parent = curr;
if(t->data > curr->data) curr = curr->right;
else curr = curr->left;
}
if(t->data < parent->data)
parent->left = t;
else
parent->right = t;
}
}
void BinarySearchTree::remove(int d)
{
bool found = false;
if(isEmpty())
{
cout<<" This Tree is empty! "<<endl;
return;
}
tree_node* curr;
tree_node* parent;
curr = root;
while(curr != NULL)
{
if(curr->data == d)
{
found = true;
break;
}
else
{
parent = curr;
if(d>curr->data) curr = curr->right;
else curr = curr->left;
}
}
if(!found)
{
cout<<" Data not found! "<<endl;
return;
}
35 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
if((curr->left == NULL && curr->right != NULL)|| (curr->left != NULL
&& curr->right == NULL))
{
if(curr->left == NULL && curr->right != NULL)
{
if(parent->left == curr)
{
parent->left = curr->right;
delete curr;
}
else
{
parent->right = curr->right;
delete curr;
}
}
else
{
if(parent->left == curr)
{
parent->left = curr->left;
delete curr;
}
else
{
parent->right = curr->left;
delete curr;
}
}
return;
}
if( curr->left == NULL && curr->right == NULL)
{
if(parent->left == curr) parent->left = NULL;
else parent->right = NULL;
delete curr;
return;
}
if (curr->left != NULL && curr->right != NULL)
{
36 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
tree_node* chkr;
chkr = curr->right;
if((chkr->left == NULL) && (chkr->right == NULL))
{
curr = chkr;
delete chkr;
curr->right = NULL;
}
else
{
if((curr->right)->left != NULL)
{
tree_node* lcurr;
tree_node* lcurrp;
lcurrp = curr->right;
lcurr = (curr->right)->left;
while(lcurr->left != NULL)
{
lcurrp = lcurr;
lcurr = lcurr->left;
}
curr->data = lcurr->data;
delete lcurr;
lcurrp->left = NULL;
}
else
{
tree_node* tmp;
tmp = curr->right;
curr->data = tmp->data;
curr->right = tmp->right;
delete tmp;
}
}
return;
}
}
void BinarySearchTree::print_inorder()
{
inorder(root);
}
37 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
void BinarySearchTree::inorder(tree_node* p)
{
if(p != NULL)
{
if(p->left) inorder(p->left);
cout<<" "<<p->data<<" ";
if(p->right) inorder(p->right);
}
else return;
}
void BinarySearchTree::print_preorder()
{
preorder(root);
}
void BinarySearchTree::preorder(tree_node* p)
{
if(p != NULL)
{
cout<<" "<<p->data<<" ";
if(p->left) preorder(p->left);
if(p->right) preorder(p->right);
}
else return;
}
void BinarySearchTree::print_postorder()
{
postorder(root);
}
void BinarySearchTree::postorder(tree_node* p)
{
if(p != NULL)
{
if(p->left) postorder(p->left);
if(p->right) postorder(p->right);
cout<<" "<<p->data<<" ";
}
else return;
}
int main()
{
BinarySearchTree b;
38 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Tree
int n,ch,tmp,tmp1;
cout<<"\tOperasi Pohon Biner Lukman Reza \n\n";
cout<<"Masukkan banyak data: ";
cin>>n;
for (int i=0; i<=n; i++){
cout<<"Angka :";cin>>i;
b.insert(i);}
cout<<"\n\nIn-Order Traversal "<<endl;
cout<<"-------------------"<<endl;
b.print_inorder();
cout<<"\n\nPre-Order Traversal "<<endl;
cout<<"-------------------"<<endl;
b.print_preorder();
cout<<"\n\nPost-Order Traversal "<<endl;
cout<<"--------------------"<<endl;
b.print_postorder();
cout<<endl;
system("pause");
return 0;
}
Tulis hasilnya disini
39 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Graph
Petemuan 8
Graph
8.1 Tujuan
Graph atau Graf adalah kumpulan noktah (simpul) di dalam bidang dua
dimensi yang dihubungkan dengan sekumpulan garis (sisi). Graph dapat
digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara
objek-objek tersebut. Representasi visual dari graph adalah dengan menyatakan
objek sebagai noktah, bulatan atau titik (Vertex), sedangkan hubungan antara
objek dinyatakan dengan garis (Edge).
8.2 Program yang dibutuhkan
Percobaan
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
int min(int a,int b);
int cost[10][10],a[10][10],i,j,k,c;
main()
{
int n,m;
cout<< "enter no of vertices";
cin >> n;
cout<< "enter no od edges";
cin >> m;
cout<<"enter the\nEDGE Cost\n";
Tujuan Instruksional :
Pokok bahasan ini untuk mengenalkan konsepgraph pada struktur data serta dapat
memetakan program sebelum melakukan koding.
Kompetensi yang Diharapkan :
Mahasiswa diharapkan dapat memahami penggunaan graph..
Waktu Pertemuan : 100 menit
40 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila
Graph
for(k=1;k<=m;k++)
{
cin>>i>>j>>c;
a[i][j]=cost[i][j]=c;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[i][j]== 0 && i !=j)
a[i][j]=31999;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
cout <<"Resultant adj matrix\n";
for(i=1;i<=n;i++)
{
for( j=1;j<=n;j++)
{
if(a[i][j] !=31999)
cout << a[i][j] <<" ";
}
cout <<"\n";
}
getch();
}
int min(int a,int b)
{
if(a
return a;
else
return b;
}
Tulis hasilnya disini