Anda di halaman 1dari 24

LAPORAN HASIL PRAKTIKUM

STRUKTUR DATA

NAMA : TRI ULANDARI

NIM : 203010503013

KELAS :C

MODUL : II (QUEUE DAN STACK)

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS PALANGKA RAYA

2021
BAB I

TUJUAN DAN LANDASAN TEORI

A. Tujuan
1. Mahasiswa mampu memahami konsep dari Queue dan Stack.
2. Mehasiswa mampu mengimplementasikan Queue dan Stack.
B. Landasan Teori
1. Queue
Queue (antrian) dapat diartikan sebagai suatu kumpulan data yang
seolah-olah terlihat seperti ada data yang diletakkan di sebelah data
yang lain seperti pada gambar 1.1, dimana data masuk melalui lorong
disebelah kanan dan masuk dari terowongan sebelah kiri. Hal ini
mambuat antrian bersifat FIFO ( First In First Out), beda dengan stack
yang berciri LIFO.

Gambar 1.1 Ilustrasi Queue.


Contoh yang paling populer untuk membayangkan sebuah queue
adalah antrian pada kasir sebuah bank. Ketika seorang pelanggan
datang, akan menuju ke belakang dari antrian. Setelah pelanggan
dilayani, antrian yang berada di depan akan maju. Pada saat
menempatkan elemen pada ujung (tail) dari queue disebut dengan
enqueue, pada saat memindahkan elemen dari kepala (head) sebuah
queue disebut dengan dequeue.

Karakteristik penting dari antrian adalah :

a. Elemen, antrian yaitu item-item data yang terdapat didalam antrian.


b. Front (elemen terdepan dari antrian).
c. Rear (elemen terakhir dari antrian).
d. Count (jumlah elemen pada antrian).

Operasi yang dapat dilakukan pada queue pada umumnya terdapat


6 operasi yaitu create, initialization, isEmpty, isFull, clear, enqueue,
dan dequeue. Namun hanya tiga operasi utaman pada queue yang akan
dijelaskan, yaitu :

a. Create
Untuk menciptakan queue menggunakan perintah struct dan
menginisialisasi queue dengana cara memebuata head dan tail = -1.
Beberapa orang memulai index queue dari -1 dan ada juga yang
dari 0.
define MAX 8
Struct Queue{
Int elemen[MAX}
Int front,rear,count;
b. Enqueue
Untuk menambahkan elemen ke dalam Antrian, penambahan
elemen selalu ditambahkan di elemen paling belakang.
Penambahan elemen selalu menggerakan variabel Rear dengan
cara increment counter Rear terlebih dahulu.

void Enqueue(int data, Queue *Q){

Q->elemen[Q->rear] = data;

Q->rear++;

Q->count++;

}
c. Dequeue
Digunakan menghapus elemen terdepan/pertama (head) dari
antrian dengan cara menggeser semua antrian ke depan dan
mengurangi tail dengan 1 penggeseran dilakukan dengan
menggunakan looping.

void Dequeue(Queue *Q){

int keeper = Q->elemen[Q->front];


for(int i = Q->front; i<Q->rear; i++){
Q->elemen[i]=Q->elemen[i+1];
}
Q->rear--;
Q->count--;

d. IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakan queue masih
koosong atau sudah berisi data. Hal ini dilakukan dengan
mengecek apakah head masih menunjukan pada Null atau tidak.
Jka benar berarti queue masih kosong.
e. IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh
atau masih bisa menampung data dengan cara mengecek apakah
jumlah (queue sudah sama dengan MAX_QUEUE atau belum. Jika
benar maka queue sudah penuh.
2. Stack
Pengertian Stack pada struktur data adalah sebagai tumpukan dari
benda, sekumpulan data yang seolah-olah diletakkan di atas data yang
lain, koleksi dari objek-objek homogen, atau suatu urutan elemen yang
elemennya dapat diambil dan ditambah hanya pada posisi akhir (top)
saja. Stack pada struktur data dapat diilustrasikan dengan dua buah
kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak
yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga,
keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack
kotak yang terdiri dari N kotak.

Gambar 1.2 Ilustrasi stack.


Stack pada Struktur Data dapat diilustrasikan dengan dua buah
kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak
yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga,
keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack
kotak yang terdiri dari N kotak. Stack bersifat LIFO (Last In First Out)
artinya Benda yang terakhir masuk ke dalam stack akan menjadi yang
pertama keluar dari stack. Operasi-operasi yang biasanya terdapat pada
Stack mirip dengan queue. Adapun 2 operasi utama pada stack yaitu :
a. Push : digunakan untuk menambah item pada stack tumpukan
paling atas.

void Push(int data, Queue *Q){

Q->elemen[Q->top] = data;

Q->top++;

b. Pop : digunakan untuk mengambil item pada stack pada tumpukn


paling atas.
void pop(Queue *Q){

int keeper=Q->elemen[Q->top];
Q->top--;

}
Cara mendefenisikan Stack dengan Array of Struct yaitu
dengan menggunakan struct, stack hanya memiliki karateristik berupa
top dan bottom sebagai penanda awal dan akhir serta elemennya itu
sendiri. Definisikan konstanta MAX_STACK untuk menyimpan
maksimum isi stack kemudian buatlah variabel array data sebagai
implementasi stack.

#define MAX_STACK 10

struct Stack{

int elemen_array[MAX_STACK];

int top;

int bottom;

};
BAB II

PEMBAHASAN

Untuk tugas program pada modul 2 ini yaitu membuat program sebuah
struct data pada list musik yang mampu melakukan Dequeue (FIFO) dan Pop
(LIFO) pada struck data program musik tersebut. Dan operasi-operasi yang dibuat
adalah create, input, dequeue, pop, clear, dan print. Dibawah ini adalah gambar
inputan program serta penjelasannya :
Gambar 2.1 Inputan program struck musik

Penjelasan :

1. Bagian deklarasi include

Pada bagian ini, kita mendefinisikan library (pustaka) apa saja


yang akan kita gunakan di dalam program. Pada contoh di atas,
menggunakan pustaka iostream, conio.h, stdio.h, dan stdlib.h. Library ini
berisi fungsi-fungsi untuk melakukan input dan output. Jenis file ini adalah
cpp artinya source code dari C++. Deklarasi include ini menggunakan
tanda kurung siku <...> maka program akan mencari library ke dalam
sistem komputer kita.
2. Bagian deklarasi namespace

Bagian ini sebenarnya bersifat opsional, bisa ditulis bisa juga tidak.
Pada contoh di atas, menggunakan namespace std. Karena fungsi-fungsi
pada iostream dibungkus dalam namespace.std. Apabila tidak
menggunakan namespace.std, maka untuk menggunakan fungsi cin dan
cout yang ada pada iostream harus diawali dengan (std:: ). Jika tidak ingin
menulis std:: terus-menerus, maka gunakan namespace std. Untuk tanda
titik koma (;) menandakan itu statement. Setiap 1 titik koma berarti 1
statement.
3. Bagian deklarasi define

Menggunakan preprocessor directive #define untuk mendefinisikan


sebuah konstanta. Penggunaan #define sendiri memiliki kelebihan apabila
dibandingkan dengan const. Pada sisi kecepatan kompilasi, karena
sebelum kompilasi dilakukan, kompiler pertama kali mencari symbol
#define (oleh karena itu mengapa "#" dikatakan prepocessor directive),
sehingga dari segi kompilasi penggunaan #define lebih cepat dibanding
const, nilai stak maksimal konstantanya adalah 30.
4. Bagian struct

Bagian struct yaitu memiliki variabel dari queue dengan tipe data
integer dan nama-nama variabelnya adalah top, Dequeue, bottom, pront,
rear, data dengan nilai konstanta 30, dan urut dengan nilai konstanta 30.
Untuk tanda kurung kurawal ({) merupakan sebuah blok pembuka, blok
pembuka ini memiliki sebuah pasangan yaitu blok penutup (}).
5. Bagian operasi queue
a. Pertama masukan fungsi push untuk menambahkan/menumpukan data
ke tumpukan/array yang sudah dibuat variabel sebelumnya. Dengan
tipe data integer dengan nama variabel “d”. Bisa diliat digambar untuk
deklarasi fungsi push, terdapat kode top++ artinya menambahkan
index array untuk nilai variabel top = -1. Lalu menampilkan kalimat
“Data berhasil dimasukkan “ dalam output. Kemudian masukan sintaks
getch untuk membaca input. Untuk tanda titik koma (;) di akhir itu
berguna untuk menandakan bahwa itu statement. Setiap 1 titik koma
berarti 1 statement.
b. Kedua adalah fungsi operasi pop mengambil data pada tumpukan /
array paling akhir ditambahkan sebelumnya. Dapat dilihat
pendeklarasian pop pada gambar di atas, untuk mengambil datanya
pop menggunakan to--yaitu mengambil data yang paling terakhir
dimasukan.
c. Ketiga adalah operasi queue (FIFO) yaitu elemen pertama yang masuk
maka elemen pertama juga dia keluar. Dapat dilihat pendaklarasiannya
pada gambar diatas. Lalu menampilkan sebuah data yang telah di input
dan getch untuk membaca inputannya.
d. Keempat fungsi operasi IsFull pada program untuk melakukan
pengecekan terhadap queue, apakah queue tersebut penuh atau tidak,
dengan tipe data integer. pada operasi ini menggunakan If Else adalah
pilihan terakhir yang akan dijalankan jika semua pilihan tidak
memiliki nilai benar (true) pada kondisi yang ada.
e. Kelima fungsi operasi IsEmpty pada program untuk melakukan
pengecekan terhadap queue, apakah queue kosong atau tidak. Sama
operasi ini menggunakan If Else yaitum pilihan terakhir yang akan
dijalankan jika semua pilihan tidak memiliki nilai benar (true) pada
kondisi yang ada.
f. Keenam yaitu print queue yaitu untuk menampilkan nilai-nilai elemen
queue menggunakan looping dari head sampai tail. Dengan
memasukan operasi Is Empty dan menampilkan antrian kosong jika
tidak ada inputan. Pada tampilan menggunakan If Else dan for, for
yaitu yaitu berguna untuk memproses pengulangan sesuai dengan
jumlah pengulangannya. Bentuk struktur pengulangan for yaitu
inisialisasi, untuk memberikan nilai awal untuk variabel dan hanya
dijalankan sekali saja. Condision yaitu jika bernilai true maka looping
dilanjutkan dan dieksekusi dan jika loop berhenti statement akan
diabaikan dan tidak dieksekusi. Increase (i++) yaitu menjalankan
perintah secara increment (++).
g. Ketujuh fungsi clear untuk menghapus elemen-elemen queue dengan
cara tail dan head -1, penghapusan elemen-elemen queue sebenarnya
tidak menghapus arraynya, namun hanya mengeset indeks
pengaksesannya ke nilai -1 sehingga elemen-elemen queue tidak lagi
terbaca.
h. Kedelapan fungsi tukar dengan tipe data integer dengan variabel a dan
b dengan memasukan variabel urut tersebut.
i. Kesembilan fungsi print/tampilan bagian ini akan menampilkan data
yang telah diinput oleh push, bagian ini menggunakan perulangan
looping yaitu for. Perulangan for berfungsi sebagai counter yang
menghitung berapa kali akan mengulang dan untuk mengulang suatu
proses yanag telah diketahui jumlahnya.
6. Bagian fungsi utama

Bagian ini adalah fungsi utama int main() artinnya main program
mengembalikan nilai int secara default, int main() akan mengembalikan
nilai 0, dan fungsi main() tidak memiliki bagan deklarasi lokal, dan hanya
memiliki sebuah pernyataan yang dapat dieksekusi, berupa fungsi output
printf(). Pada C++ semua fungsi diikuti oleh sepasang tanda kurung().
Fungsi main() adalah fungsi yang mempunyai kedudukan sangat istimewa.
Fungsi main() berisi rutin utama program yang akan dijalankan ketika
program bahasa C kita eksekusi. Jadi semua kontrol alur proses program
berada dalam fungsi main() ini. Untuk tanda kurung kurawal ({)
merupakan sebuah blok pembuka, blok pembuka ini memiliki sebuah
pasangan yaitu blok penutup. Lalu nama variabelnya adalah a dan input
denga memanggil variabel top yang bernilai -1. Kemudian menampilkan
menu yang dimasukan yaitu push, pop, dequeue, clear, print, dan terminate
lalu menampilkan pilihan menu yang dipilih.
7. Bagian percabangan switch case

Bagian switch case merupakan salah satu jenis percabangan (selain


if else) yang dapat digunakan cara kerjanya sederhana sebuah nilai akan
dibandingkan dengan setiap nilai pada case yang ada. Jika sebuah case
mempunyai nilai yang sama (bernilai true) maka pernyataan pada cae
tersebut yang akan dijalankan. Apabila setiap case bernilai false maka
pernyataan default yang akan dikerjakan. Dapat membuat lebih dari satu
cse di dalam blok switch, setiap case harus diakhiri dengan perintah break
tujuannya adalah memberitahukan kepada program bahwa case sudah
terpenuhi sehingga tidak perlu mengecek pada case berikutnya. Pada
program di atas nilai switch dibari a. Selanjutnya memanggil untuk
memasukan jumlah data menggunakan deklarasi push, pop, dequeue,
clear, dan print. Lalu bagian terakhir ada bagian perulangan while dengan
meninput variabel a sebanyak 6 dan diakhir dengan blok penutup di
program tersebut.

Gambar output dari program struck musik :

Gambar 2.2 Output program struck sebelum menginput data.

Gambar 2.3 Output program menginput data pertama.


Gambar 2.4 Outpur program menginput data kedua.

Gambar 2.5 Outpur program menginput data ketiga.

Gambar 2.6 Output program menu print (cetak).

Gambar 2.7 Output program menu pop (menampilkan data)


Gambar 2.8 Output program menu dequeue (menampilan data)

Gambar 2.9 Output program menu clear (menghapus).

Gambar 2.10 Output program menu terminate (keluar).


BAB III

KESIMPULAN

Queue (antrian) adalah salah satu list linier dari struktur data yang
beroperasi dengan cara FIFO yaitu elemen pertama yang masuk merupakan
elemen pertama kelaur. Data-data di dalam antrian dapat bertipe integer, real,
record dalam bentuk sederhana atau terstruktur. Queue dilakukan dengan cara
penyisipan di satu ujung, sedangkan penghapusan di ujung lain. Ujung penyisipan
biasa disebut rear/tail, sedangkan penyisipan penghapusan disebut pront/head.

Sebuah queue dalam program setidaknya harus mengandung tiga variabel,


yakni head untuk penanda bagian depan antrian, tail untuk penanda bagian
belakang antrian, dan array data untuk menuimpan data-data yang dimasukan ke
dalam queue tersebut.
DAFTAR PUSTAKA

Dosen Teknik Informatika. 2020. Modul Praktikum Struktur Data. Palangka Raya
: Fakultas Teknik Universitas Palangka Raya.
LAMPIRAN
Gambar 2.1 Inputan program struck musik
Gambar 2.2 Output program struck sebelum menginput data.

Gambar 2.3 Output program menginput data pertama.

Gambar 2.4 Outpur program menginput data kedua.

Gambar 2.5 Outpur program menginput data ketiga.


Gambar 2.6 Output program menu print (cetak).

Gambar 2.7 Output program menu pop (menampilkan data)

Gambar 2.8 Output program menu dequeue (menampilan data)

Gambar 2.9 Output program menu clear (menghapus).


Gambar 2.10 Output program menu terminate (keluar).

Anda mungkin juga menyukai