daftar isi - unila

40
i Modul Struktur Data S1 Manajemen Informatika FMIPA Unila Daftar Isi

Upload: others

Post on 29-Oct-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Daftar Isi - Unila

i Modul Struktur Data S1 Manajemen Informatika FMIPA Unila

Daftar Isi

Page 2: Daftar Isi - Unila

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.

Page 3: Daftar Isi - Unila

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

Page 4: Daftar Isi - Unila

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

Page 5: Daftar Isi - Unila

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

Page 6: Daftar Isi - Unila

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

Page 7: Daftar Isi - Unila

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

Page 8: Daftar Isi - Unila

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,

Page 9: Daftar Isi - Unila

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";

Page 10: Daftar Isi - Unila

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:

Page 11: Daftar Isi - Unila

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";

Page 12: Daftar Isi - Unila

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

Page 13: Daftar Isi - Unila

13 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila

Algoritma Pengurutan

Page 14: Daftar Isi - Unila

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

Page 15: Daftar Isi - Unila

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

Page 16: Daftar Isi - Unila

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;

Page 17: Daftar Isi - Unila

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.

Page 18: Daftar Isi - Unila

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

Page 19: Daftar Isi - Unila

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

Page 20: Daftar Isi - Unila

20 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila

Array dan Pointer

4.2 Percobaan

Percobaan 1

Page 21: Daftar Isi - Unila

21 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila

Array dan Pointer

Percobaan 2

Page 22: Daftar Isi - Unila

22 Modul Struktur Data S1 Manajemen Informatika FMIPA Unila

Array dan Pointer

Percobaan 3

Page 23: Daftar Isi - Unila

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

Page 24: Daftar Isi - Unila

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++;

Page 25: Daftar Isi - Unila

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;

Page 26: Daftar Isi - Unila

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

Page 27: Daftar Isi - Unila

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

Page 28: Daftar Isi - Unila

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()

{

Page 29: Daftar Isi - Unila

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++)

Page 30: Daftar Isi - Unila

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;

Page 31: Daftar Isi - Unila

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

Page 32: Daftar Isi - Unila

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

Page 33: Daftar Isi - Unila

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;

Page 34: Daftar Isi - Unila

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;

}

Page 35: Daftar Isi - Unila

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)

{

Page 36: Daftar Isi - Unila

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);

}

Page 37: Daftar Isi - Unila

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;

Page 38: Daftar Isi - Unila

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

Page 39: Daftar Isi - Unila

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

Page 40: Daftar Isi - Unila

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