Laporan 7 - Muhammad Darmadi - J1F114076

25
LAPORAN PRAKTIKUM VII ALGORITMA DAN STRUKTUR DATA “STACK, QUEUE, DAN TREE” Nama : Muhammad Darmadi NIM : J1F114076 KEMENTERIAN RISET TEKNOLOGI DAN PENDIDIKAN TINGGI UNIVERSITAS LAMBUNG MANGKURAT

description

a

Transcript of Laporan 7 - Muhammad Darmadi - J1F114076

Page 1: Laporan 7 - Muhammad Darmadi - J1F114076

LAPORAN PRAKTIKUM VII

ALGORITMA DAN STRUKTUR DATA

“STACK, QUEUE, DAN TREE”

Nama : Muhammad Darmadi

NIM : J1F114076

KEMENTERIAN RISET TEKNOLOGI DAN PENDIDIKAN TINGGI

UNIVERSITAS LAMBUNG MANGKURAT

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

PROGRAM STUDI S1 ILMU KOMPUTER

BANJARBARU

2015

12 TNR bold

Spasi 2.0

12 TNR bold

Spasi 2.0

Page 2: Laporan 7 - Muhammad Darmadi - J1F114076

BAB I

PENDAHULUAN

1.1 Tujuan

Tujuan dalam praktikum yang Keenam ini adalah :

1. Mengenal pengertian stack, queue, dan tree pada bahasa pemrograman C++

2. Memahami penggunaan stack, queue, dan tree pada bahasa pemrograman C+

+

3. Bisa Menggunakan stack, queue, dan tree dengan menggunakan linked list

pada bahasa pemrograman C++

4. Mengenal perbedaan stack, queue, dan tree dalam penggunaan linked list

pada bahasa pemrograman C++

1.2 Deklarasi

struct nama_simpul

{

Tipe_data nama_variabel;

struct nama_simpul *nama_simpul_selanjutnya;

}

1.3 Sintaks sederhana

#include <iostream>

Page 3: Laporan 7 - Muhammad Darmadi - J1F114076

BAB II

TINJAUAN PUSTAKA

1.1 Pengertian Stack

STACK adalah salah satu list linear dalam struktur data yang digunakan

untuk menyimpan dan mengambil data dengan konsep LIFO (Last In First Out).

Dimana dalam stack ini kumpulan data yang masuk diletakkan di atas data yang

lain. Dan berdasar konsep LIFO maka data yang terakhir kali disimpan dalam

stack akan menjadi data yang pertama kali diambil. Dalam prosesnya, untuk

memasukkan sebuah data ke dalam stack atau dengan kata lain ke bagian atas

dari sebuah tumpukan digunakan perintah push. Dan untuk memindahkan data

dari tempat tersebut digunakan perintah pop. Sedangkan dalam penyajiannya,

stack bisa memakai array atau linked list (Yofianto, 2010).

1.2 Pengertian Queue

Queue / Antrian adalah suatu kumpulan data yang mana penambahan

elemen hanya bisa dilakukan pada satu ujung (disebut dengan sisi belakang atau

tail/rear) dan penghapusan atau pengambilan elemen dilakukan lewat ujung lain

(disebut dengan sisi depan atau head/front). Antrian menggunakan prinsip

Pertama Masuk Pertama Keluar – First In First Out (FIFO). Dengan kata lain

urutan masuk sama dengan urutan keluar. Antrian banyak dijumpai dalam

kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol untuk membeli

karcis tol; orang-orang yang mengantri di loket untuk membeli karcis film juga

membentuk antrian. Elemen yang pertama kali masuk ke antrian akan keluar

pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu

antrian. Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar

di ujung satunya sehingga membutuhkan variabel Head dan Tail. (Rudiyanto,

2015).

1.3 Pengertian Tree

Tree merupakan salah satu bentuk struktur data linier yang

menggambarkan hubungan yang bersifat hierarkis (hubungan one to many) antara

elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan

satu elemen khusus yang disebut Root. Node lainnya terbagi menjadi himpunan-

Page 4: Laporan 7 - Muhammad Darmadi - J1F114076

himpunan yang saling tak berhubungan satu sama lain (disebut Subtree). Untuk

lebih jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree:

Predecessor : Node yang berada di atas node tertentu

Successor : Node yang berada di bawah node tertentu

Ancestor : Seluruh node yang terletak sebelum node tertentu dan terletak

pada jalur yang sama

Descendant : Seluruh node yang terletak sesudah node tertentu dan terletak

pada jalur yang sama

Parent : Predecessor satu level di atas suatu node

Child : Successor satu level di bawah suatu node

Sibling : Node-node yang memiliki pparent yang sama dengan suatu

node

Subtree : Bagian dari tree yang berupa suatu node beserta descendentnya

dan memiliki semua karakteristik dari tree tersebut

Size : Banyaknya node dalam suatu tree

Height : Banyaknya tingkatan/level dalam suatu tree

Root : Satu-satunya node khusus dalam tree yang tak punya

predecessor

Leaf : Node-node dalam tree yang tak memiliki successor

Degree : Banyaknya child yang dimiliki suatu node

(Sanjaya, 2005).

BAB III

IMPLEMENTASI

Page 5: Laporan 7 - Muhammad Darmadi - J1F114076

3.1 Deskripsi Program

Program dibuat menggunakan borland C++. Program yang dibuat adalah

membuat program menampilkan data menggunakan metode stack pada linked

list. Program diawali dengan memunculkan menu. Dalam daftar menu terdapat

pilihan tambah, tampil, hapus dan keluar. Tambah untuk menambah data pada

linked list data yang diamasukkan akan muncul di depan. Tampil untuk

menampilkan data yang telah dimuat sebelumnya. Hapus untuk menmpilkan

data yang telah dimasukkan sebelumnya, data yang dihapus adalah yang berada

dibagian depan. Apabila belum ada data pada linked list maka apabila memilih

pilihan tampil atau hapus akan ada tulisan data kosong. Pilihan keluar untuk

keluar dari program.

3.2 Alur Program

3.2.1 isempty

3.2.2 tambah

3.2.3 tampil

Page 6: Laporan 7 - Muhammad Darmadi - J1F114076

3.2.4 hapus

3.2.5 menu utama

Page 7: Laporan 7 - Muhammad Darmadi - J1F114076

3.3 Source Code#include <constrea.h>

struct Node

{

int data;

Node *next ;

};

Node *head;

bool isempty()

{

if (head==NULL)

return true;

Page 8: Laporan 7 - Muhammad Darmadi - J1F114076

else

return false;

}

void tambah (int databaru)

{

Node *baru;

baru = new Node;

baru->data = databaru;

baru->next=NULL;

if (isempty() == true)

{

head=baru;

head->next=NULL;

}

else

{

baru->next=head;

head=baru;

}

cout<<"Data Masuk";

getch();

}

void tampil()

{

Node *bantu;

bantu=head;

if(isempty()==false)

{

while(bantu!=NULL)

{

cout<<bantu->data<<" ";

bantu=bantu->next;

}

cout<<endl;

}

else

cout<<"Masih kosong";

}

Page 9: Laporan 7 - Muhammad Darmadi - J1F114076

void hapus()

{

Node *hapus;

int d;

if (isempty()==false)

{

if (head->next !=NULL)

{

hapus=head;

d=hapus->data;

head=head->next;

delete hapus;

}

else

{

d=head->data;

head=NULL;

}

cout<<d<<" terhapus\n";

}

else

cout<<"Data Masih Kosong\n";

}

void main()

{

int databaru;

char pil;

do

{

clrscr();

cout<<"+=====================================+\n";

cout<<"| Menu Utama |\n";

cout<<"| a. Tambah |\n";

cout<<"| b. Tampil |\n";

cout<<"| c. Hapus |\n";

cout<<"| d. Keluar |\n";

cout<<"+-------------------------------------+\n";

cout<<"| Masukkan pilihan anda (a - d) : |\n";

cout<<"+=====================================+\n";

gotoxy(35,8);cin>>pil;

Page 10: Laporan 7 - Muhammad Darmadi - J1F114076

switch(pil)

{

case 'a' : cout<<"\n";

cout<<"\nData baru : ";

cin>>databaru;

tambah(databaru);

break;

case 'b' : cout<<"\n";

cout<<"Data : ";

tampil();

getch();

break;

case 'c' : cout<<"\n";

hapus();

getch();

break;

case 'd' : gotoxy(1,12);cout<<"Keluar Program"; getch();break;

default : gotoxy(1,12);cout<<"Anda salah pilih...\n"; getch(); break;

}

}

while(pil!='d');

}

3.4 Output

(Gambar 3.1 Tampilan awal program pada menu utama)

Page 11: Laporan 7 - Muhammad Darmadi - J1F114076

(Gambar 3.2 Tampilan saat salah menginputkan pilihan )

(Gambar 3.3 Tampilan saat memilih pilihan tanbah dan menginputkan data)

Page 12: Laporan 7 - Muhammad Darmadi - J1F114076

(Gambar 3.4 Tampilan saat menginputkan pilihan tampil)

(Gambar 3.5 Tampilan saat menginputkan pilihan hapus)

Page 13: Laporan 7 - Muhammad Darmadi - J1F114076

(Gambar 3.6 Tampilan saat menginputkan pilihan tampil atau hapus tapi data

masih kosong)

(Gambar 3.6 Tampilan saat menginputkan pilihan keluar program)

3.5 Tugas

3.5.1 Deskripsi Program

Page 14: Laporan 7 - Muhammad Darmadi - J1F114076

Program dibuat menggunakan borland C++. Program yang dibuat

adalah program menampilkan data dengan metode tree secara pre-order,

in-order dan post-order. Program diawali dengan menampilkan menu

utama lalu menginputkan pilihan yang ada pada menu. Pilihan tambah

untuk menambah data pada linked list. Pilihan pre-order untuk

menampilkan data mulai dari simpul pohon lalu ke kiri dan ke kanan.

Pilihan in-order untuk menampilkan data mulai dari sebelah kiri lalu ke

kanan baru ke simpul. Pilihan post-order untuk menampilkan data mulai

dari sebelah kiri lalu ke simpul baru ke sebelah kanan. Pilihan keluar

untuk keluar dari program.

3.5.2 Source code

#include <constrea.h>

struct Node

{

int data;

Node *kiri;

Node *kanan;

};

void tambah (Node **root, int databaru)

{

if ((*root) == NULL)

{

Node *baru;

baru = new Node;

baru->data = databaru;

baru->kiri = NULL;

baru->kanan = NULL;

(*root) = baru;

(*root)->kiri = NULL;

(*root)->kanan = NULL;

cout<<"Data Bertambah!";

getch();

}

else

if (databaru < (*root)->data)

tambah (&(*root)->kiri, databaru);

Page 15: Laporan 7 - Muhammad Darmadi - J1F114076

else

if (databaru > (*root)->data)

tambah (&(*root)->kanan,databaru);

else

if (databaru == (*root)->data)

{

cout<<"Data sudah ada!";

getch();

}

}

void preOrder(Node *root)

{

if (root != NULL)

{

cout<<root->data<<" ";

preOrder(root->kiri);

preOrder(root->kanan);

}

}

void inOrder(Node *root)

{

if (root !=NULL)

{

inOrder(root->kiri) ;

cout<<root->data<<" ";

inOrder(root->kanan);

}

}

void postOrder(Node *root)

{

if(root != NULL)

{

postOrder(root->kiri);

postOrder(root->kanan);

cout<<root->data<<" ";

}

}

void main()

Page 16: Laporan 7 - Muhammad Darmadi - J1F114076

{

int data;

Node *pohon;

pohon = NULL;

char pil;

do

{

clrscr();

cout<<"+=====================================+\

n";

cout<<"| Menu Utama |\n";

cout<<"| a. Tambah |\n";

cout<<"| b. Lihat Pre-order |\n";

cout<<"| c. Lihat In-order |\n";

cout<<"| d. Lihat Post-order |\n";

cout<<"| e. Keluar |\n";

cout<<"+-------------------------------------+\n";

cout<<"| Masukkan pilihan anda (a - e) : |\n";

cout<<"+=====================================+\

n";

gotoxy(35,9);cin>>pil;

switch(pil)

{

case 'a' : cout<<"\n";

cout<<"\nData baru : ";

cin>>data;

tambah(&pohon,data);

break;

case 'b' : cout<<"\n";

if (pohon!=NULL)

preOrder(pohon);

else

{

gotoxy(1,14);cout<<"Data Masih

Kosong!";

}

getch();

break;

case 'c' : cout<<"\n";

if (pohon!=NULL)

inOrder(pohon);

else

Page 17: Laporan 7 - Muhammad Darmadi - J1F114076

{

cout<<"Data Masih Kosong!";

}

getch();

break;

case 'd' : cout<<"\n";

if (pohon!=NULL)

postOrder(pohon);

else

{

cout<<"Data Masih Kosong!";

}

getch();

break;

case 'e' : gotoxy(1,14);cout<<"Keluar Program"; getch();break;

default : gotoxy(1,14);cout<<"Anda salah pilih...\n";getch();break;

}

}

while(pil!='e');

}

3.5.3 Output

(Gambar 3.6 Tampilan awal program)

Page 18: Laporan 7 - Muhammad Darmadi - J1F114076

(Gambar 3.7 Tampilan saat menginputkan pilihan dan mengisi data)

(Gambar 3.8 Tampilan apabila pilihan salah)

Page 19: Laporan 7 - Muhammad Darmadi - J1F114076

(Gambar 3.9 Tampilan keluar program)

Page 20: Laporan 7 - Muhammad Darmadi - J1F114076

BAB IV

PENUTUP

2.4 Kesimpulan

Linked list adalah sekumpulan elemen bertipe sama, yang mempunyai

keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian Linked list

juga merupakan suatu cara untuk menyimpan data dengan struktur sehingga

dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data

yangdiperlukan. Ada 2 Tipe Single Linked List yaitu Single Linked List Circular

dan Single Linked List Non Circular

4.2 Saran

Sebaiknya untuk asisten praktikum jangan terlalu sulit untuk membuat soal

pretest.

Page 21: Laporan 7 - Muhammad Darmadi - J1F114076

DAFTAR PUSTAKA

Rudiyanto, Fery. (2015). Mengenal Queue (Antrian) Pada C++ http://www.klikartikel.com/2015/01/mengenal-queue-antrian-pada-c.html Diakses pada tanggal 29 Nopember 2015.

Sanjaya, Dwi. 2005. Asyiknya Belajar Struktur Data di Planet C++. Jakarta: PT Elex

Media Komputindo.

Yofiyanto, Evan. (2010). Stack & Queue : Penjelasan, Deskripsi Fungsi Dasar, Pemodelan, dan Penerapan Stackhttps://kuliahinformatika.wordpress.com/2010/02/06/stack-queue-penjelasan-deskripsi-fungsi-dasar-pemodelan-dan-penerapan-stack/ Diakses pada tanggal 29 Nopember 2015.