PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 129 dapat berisi alamat dari variabel lain, dan akses langsung ke nilai dalam variabel pointer dapat dilakukan dengan menggunakan operator. Jadi, setiap variabel mempunyai data (isi data) dan alamat memori yang menunjukkan variabel tersebut disimpan dimana. Ada dua jenis pointer yang disediakan oleh borland c++, yaitu Operator Deference (&) Dan Operator Reference (*). 5.4.2 Saran Penggunaan pointer pada proses program harus benar-benar diperhatikan. Sedikit saja kesalahan dalam menggunakan pointer akan mengakibatkan kesalahan fatal pada program. Karena pointer bisa langsung menunjukan pada lokasi memori, apabila lokasi yang ditunjuk salah, berarti data yang diambil juga akan salah, dan sudah tentu program anda akan menjadi salah juga.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 130
BAB VI STACK (TUMPUKAN) OLEH Ririn Muhammad 07352211008 PROGRAM STUDI INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS KHAIRUN TERNATE 2022
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 131 BAB VI STACK (TUMPUKAN) 6.1 STACK (TUMPUKAN) 6.1.1 Pengertian Stack Stack adalah sebuah kumpulan data dimana data yang diletakkan diatas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan konsep LIFO (Last In First Out). Dengan demikian elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil. Dalam proses komputasi untuk meletakkan sebuah elemen pada bagian atas dari stack maka dilakukan operasi push, dan untuk memindahkan dari tempat yang diatas tersebut, maka dilakukan operasi pop. Gambar 6. 1 Ilustrasi sebuah stack
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 132 6.1.2 Operasi Stack : a. Operasi push yaitu operasi menambahkan elemen pada urutab terakhir (paling atas). b. Operasi pop yaitu operasi yang mengambil sebuah elemen data pada urutan data terakhir dan menghapus elemen tersebut dari stack c. Clear untuk mengosongkan stack a. Isempty untuk memeriksa apakah stack kosong b. Isfull untuk memriksa apakah stack sudah penuh c. Retrieve untuk mendapatkan nilai dari item teratas d. Peek untuk melihat elemen teratas dari stack 6.1.3 Jenis-jenis Stack Berdasarkan kemampuan menyimpan data, struktur data stack dapat dibagi menjadi 2 jenis, yaitu: register stack dan memory stack. 1. Register stack Register stack merupakan stack yang hanya mampu menampung data dalam jumlah yang kecil. Kedalaman maksimum pada register stack cenderung dibatasi karena ukuran unit memorinya sangat kecil dibandingkan dengan memory stack. 2. Memory stack Pada stack jenis ini, kedalaman dari stack cukup fleksibel dan mampu menangani dalam dalam skala yang lebih besar dibandingkan jenis sebelumnya. 6.2 Representasi Proses Stack Stack adalah salah satu dari contoh struktur data yang terdiri dari satu collection,
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 133 yang juga menerapkan prinsip LIFO. Bila stack tersebut menggunakan array satu dimensi, maka stack tersebut dapat diilustrasikan sebagai berikut : Gambar 6. 2 Ilustrasi stack 1 dimensi menggunakan indeks array Gambar di atas merupakan ilustrasi sebuah indeks array yang masih kosong pada awal pembuatan stack dimana n[10], variable top berada pada -1 yang menunjukkan indeks masih dalam keadaan kosong. Gambar 6. 3 Ilustrasi stack ketika sudah diisi data Gambar di atas merupakan keaadan ketika stack diisi data. Pada kondisi tersebut data pertama yang diinput adalah S[0]=11, data kedua S[1]=7, data ketiga S[2]=15, data keempat S[3]=23. Kondisi top sudah berubah menjadi data yang terakhir diinput (data keempat) sehingga Top [3] X=23.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 134 6.3 Double Stack (Stack Ganda) Double Stack (Stack ganda) adalah dua stack yang berada dalam satu array. Satu array digunakan untuk dua stack dimana dasar stack 1 berada pada sisi indeks yang terkecil dan s 2 berada pada sisi indeks yang terbesar. Sama halnya dengan single stack, double stack juga menerapkan prinsip LIFO (Last In First Out). Gambar 6. 4 Ilustrasi double stack Gambar ini merupakan ilustrasi indeks array pada double stack. Pada stack 1 kondisi data pertama yang diinput adalah S[0], data kedua S[1], data ketiga S[2], dan Top=data input terakhir S[2]. Sedangkan pada stack 2 data pertama adalah S[9], data kedua S[8], data ketiga S[7], data keempat S[6], dan Top=data input terakhir S[6]. 6.4 Operasi Dasar Pada Double Stack a. Inisialisasi : Proses awal adalah proses menyiapkan indeks penunjuk stack untuk pertama kali. Pada tahap ini ditetapkan Top1=-1 (sama seperti single stack) dan Top2=banyak jumlah data. void AWAL (void)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 135 { Top1 = -1; Top2 = n; } b. Is empty : Sama dengan single stack, yaitu proses pengecekan stack kondisi kosong. if(top1==-1) return true; if(top2==n) return true; c. Is Full : Sama dengan single stack, yaitu proses pengecekan stack dalam kondisi kosong int full(void){ if(top1+1>=top2){ return true; } d. Push (stack1 dan stack2) : Proses mengisi data pada stack1 maupun stack2 void PUSH1 (void) { Top1 = Top1 + 1; S[Top1] = X; } void PUSH2 (void) { Top2 = Top2 - 1;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 136 S[Top2] = X; } e. Pop (stack1 dan stack2) : Proses mengambil data pada stack1 maupun stack2 void PUSH2 (void) { Top2 = Top2 - 1; S[Top2] = X; } void POP2 (void) { X = S[Top2]; Top2 = Top2 + 1; } 6.5 Latihan kegiatan praktikum #include <stdio.h> #include <stdlib.h> #include <conio.h> #define MAX 5 int top = -1; int stack_arr[MAX];
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 137 void push(); void pop(); void display(); int main() { int choice; while(1) { printf("\n1.Push\n"); printf("2.Pop\n"); printf("3.Display\n"); printf("4.Quit\n\n"); printf("Enter your choice : "); scanf("%d",&choice); switch(choice) { case 1 :
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 138 push(); break; case 2: pop(); break; case 3: display(); break; case 4: exit(1); default: printf("\nPILIHAN TIDAK TERSEDIA\n"); } } getch(); } void push()
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 139 { int pushed_item; if(top == (MAX - 1)) printf("Stack Overflow\n"); else { printf("\nEnter the item to be pushed in stack : "); scanf("%d",&pushed_item); top = top + 1; stack_arr[top] = pushed_item; } } void pop() { if(top == -1) printf("Stack Underflow\n"); else { printf("Popped element is : %d\n",stack_arr[top]); top = top - 1; } } void display() {
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 140 int i; if(top == -1) printf("Stack is empty\n"); else { printf("\nStack elements :\n"); for(i = top; i >=0; i--) printf("%d\n", stack_arr[i] ); }} Compile sampai benar : Gambar 6. 5 Struktur pemograman
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 141 Gambar 6. 6 Lanjutan Struktur pemograman Gambar 6. 7 Lanjutan Struktur pemograman
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 142 Gambar 6. 8 Lanjutan Struktur pemograman Gambar 6. 9 Hasil running
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 143 6.6 Studi Kasus Gambar 6. 10 Flowchart Study Kasus 1
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 144 #include<stdio.h> #include<stdlib.h> #include <conio.h> typedef struct node { int data; struct node *link; }NODE; NODE *top = NULL; void push(); void pop(); void display(); int main() { int choice = 0; while(1) { printf("\n1.Push\n"); printf("2.Pop\n"); printf("3.Display\n"); printf("4.Quit\n\n"); printf("Enter your choice : ");
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 145 scanf("%d",&choice) switch(choice) { case 1 : push(); break; case 2: pop(); break; case 3: display(); break; case 4: exit(0); default: printf("\nPILIHAN TIDAK TERSEDIA\n"); } } getch(); } void push() { NODE *temp;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 146 int info = 0; printf("Enter data to be pushed (0-9999) : "); scanf("%d",&info); temp = (NODE *) malloc(sizeof(NODE)); if (temp == NULL) printf("\nMemory Allocation Failed"); else { temp->data = info; temp->link = top; top = temp; printf("Node has been inserted at Top(Front) Successfully !!\n"); } } void pop() { NODE *tmp; if(top == NULL) printf("Stack is empty!!\n"); else { tmp = top; printf("Popped data : %d\n",tmp->data); top = top->link;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 147 free(tmp); } } void display() { NODE *temp; if(top == NULL) { printf("Empty Stack !!!\n"); } else { temp = top; printf("____[Stack]____\n"); while(temp != NULL) { printf("\n__\n"); printf("|%4d|",temp->data); temp = temp->link; } } } Compile sampai benar :
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 148 Gambar 6. 11 Struktur pemograman Gambar 6. 12 Struktur pemograman Tampilan running :
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 149 Gambar 6. 13 Hasil running Gambar 6. 14 Hasil running
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 150 6.7 Kesimpulan dan Saran 6.7.1 Kesimpulan Stack atau tumpukan dapat diartikan sebagai suatu kumpulan data yang seolaholah terlihat seperti ada data yang diletakan diatas data yang lain. Kaidah utama dalam konsep stack adalah LIFO yang merupakan singkatan dari Last In Fist Out atau dapat diartikan sebagai data yang terakhir kali dimasukan atau disimpan, maka data tersebut adalah data yang pertama kali dikeluarkan. 6.7.2 Saran Laporan ini masih terdapat banyka kesalahan karena terbatasnya pengetahuan dan kurangnya referensi materi pada laporan ini. Diharapkan kepada pembaca dapat memberikan saran sebagai motivasi pembuatan laporan selanjutnya.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 151
BAB VII QUEUE (ANTRIAN) OLEH Ririn Muhammad 07352211008 PROGRAM STUDI INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS KHAIRUN TERNATE 2022
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 152 BAB VII QUEUE (ANTRIAN) 7.1 Queue (Antrian) Queue (antrian) adalah suatu kumpulan data yang mana penambahan data atau elemennya hanya dapat dilakukan pada sisi belakangnya, sedangkan penghapusan atau pengeluaran elemennya hanya dapat dilakukan pada sisi depan. Jadi terdapat 2 gerbang pada antrian, satu gerbang digunakan untuk masuk dan satu lainnya digunakan untuk keluar. Gambar 7. 1 Cara kerja Queue (Antrian) Queue ini memiliki karakteristik yaitu FIFO (First In First Out) yang artinya data yang masuk terlebih dahulu merupakan data yang akan keluar terlebih dahulu. Queue elemen yang dihapus adalah yang terakhir ditambahkan. Representasi queue dapat di deklarasi dengan menggunakan array atau linked list.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 153 7.2 Operasi Pada Queue 1. Enqueue. Operasi ini digunakan untuk menambahkan elemen ke bagian akhir antrian. Operasi penambahan dapat dilakukan selama antrian tidak dalam keadaan penuh. Setiap kali terjadi penambahan (enqueue) maka variabel rear atau penunjuk nilai belakang akan ditambah 1 (increment). 2. Dequeue. Operasi ini digunakan untuk mengeluarkan elemen pertama pada antrian. Elemen dalam suatu antrian dapat dikeluarkan (dequeue) selama antrian tidak dalam keaadan kosong, jika kosong maka dapat terjadi underflow. Karena pengahapusan dilakukan pada elemen yang berada di urutan atau indeks pertama, maka setelah penghapusan perlu dialkukan penggeseran setiap elemen setelahnya. 3. Display / View. Operasi ini digunakan untuk mencetak atau menampilkan semua data yang ada pada antrian. 4. IsEmpty. Operasi ini digunakan untuk mengecek kondisi dari antrian apakah kosong atau tidak. Karena pada saat dilakukan dequeue, maka perlu dipastikan bahwa antrian masih ada / tidak kosong sehingga tidak terjadi underflow. Antrian dapat dikatakan kosong jika penunjuk posisi belakang bernilai sama dengan 0. Operasi ini biasanya dibuat dalam bentuk fungsi, sehingga setiap kali fungsi ini dipanggil akan mengembalikan nilai sesuai dengan kondisi. Apabila antrian kosong maka fungsi akan mengembalikan true, sebaliknya jika tidak kosong maka akan dikembalikan false. 5. IsFull. Operasi ini digunakan untuk mengecek apakah antrian penuh atau tidak. Karena pada proses enqueue (menambahkan nilai pada antrian) perlu dipastikan bahwa enqueue tidak penuh sehingga tidak terjadi overflow. Antrian dapat dikatakan sudah penuh apabila penunjuk posisi belakang bernilai sama dengan nilai maksimal antrian. Operasi ini
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 154 biasanya dibuat dalam fungsi, sehingga setiap kali fungsi ini dipanggil maka akan mengembalikan nilai sesuai dengan kondisi. Apabila antrian penuh maka fungsi mengembalikan true, sebaliknya jika tidak penuh maka akan mengembalikan false dan program dapat melakukan enqueue. 6. Destroy / clear. Operasi ini digunakan untuk menghapus atau membersihkan semua data pada antrian. Operasi ini biasanya memanggil fungsi isEmpty untuk memastikan bahwa pada antrian terdapat nilai atau data yang dapat dihapus. Jika kosong maka akan ditampilkan pesan bahwa antrian masih kosong. 7. Peek. Operasi ini digunakan untuk mendapatkan nilai dari elemen pertama pada antrian tanpa menghapusnya 7.3 Representasi Dengan Array Gambar 7. 2 Queue dengan array Queue (antrian) dapat diimplementasikan dengan array. Implementasi queue dengan array, perlu memperhatikan indeks yaitu depan (front) dan belakang (rear) sehingga dapat diketahui queue kosong atau tidak. Queue dapat ditambahkan dengan suatu elemen baru selama posisi dari rear tidak sama dengan indeks maksimum dari
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 155 queue array. Untuk melakukan dequeue pada array biasanya dengan mengambil atau mengeluarkan nilai elemen pada indeks ke 0, kemudian menggeser nilai nilai selanjutnya. Jika ingin melakukan enqueue pada array, perlu mencari indeks dimana nilai elemen terakhir berada. 7.4 Latihan 1. Program queue dalam array Berikut ini merupkan flowchart program queue dalam array: Gambar 7. 3 Source code program queue dalam array
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 156 Gambar 7. 4 Source code program queue dalam array Gambar 7. 5 Source code program queue dalam array
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 157 Gambar 7. 6 Hasil program queue dengan array
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 158 7.5 Studi Ksus 2. Queue (Antrian) Berikut ini merupakan flowchart program queue: Gambar 7. 7 Flowchart program queue
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 159 Penjelasan: Program dimulai dengan mendeklarasikan variabel data dengan tipedata integer. Dan mendeklarasikan *link dengan struct node. Dan mendeklarasikan NODE *front, *rear = NULL. Lalu program memanggil fungsi enqueue(), dequeue(), dan display(). Kemudian mendeklarasikan variabel choice = 1 dengan tipedata integer. Kemudian program menampilakan nama, npm, dan judul. Kemudian masuk proses penginputan nilai ke variabel choice. Kemudian masuk ke seleksi syarat jika inputan yang diterima adalah 1 maka jalankan fungsi enqueue(). Jika inputan yang diterima adalah 2 maka jalankan fungsi dequeue(). Jika inputan yang diterima adalah 3 maka jalankan fungsi display(). Jika inputan yang diterima adalah 4 maka program selesai. Jika inputan yang diterima selain dari syarat di atas maka tampilkan “pilihan tidak tersedia” lalu program akan melakukan perulangan secara terus menerus ke proses inputan nilai choice kecuali nilai yang diinputkan adalah 4 karena program akan selesai.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 160 Berikut ini merupakan source code dan compile and running: Gambar 7. 8 Source code program queue
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 161 Gambar 7. 9 Source code program queue
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 162 Gambar 7. 10 Source code program queue Gambar 7. 11 Source code program queue
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 163 Gambar 7. 12 Hasil program Queue (Antrian) 7.6 Kesimpulan Dan Saran 7.6.1 Kesimpulan Queue (antrian) adalah salah satu list linear dari struktur data yang beroperasi dengan cara first in first out (FIFO) yaitu elemen pertama yang masuk merupakan elemen
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 164 pertama yang keluar. Data-data di dalam antrian dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur. 7.6.2 Saran Pahami konsep queue dan dapat mempraktikkan sendiri dan juga dapat menyelesaikan study kasusnya.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 165
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR xviii DAFTAR PUSTAKA Muhammad, S. (2013). Panduan Belajar Pemograman Tersturktur. Yogyakarta: AKPRIND PRESS. Munir, R. (2007). Algoritma dan Pemograman, jilid 1. Bandung: Informatika. Rina, F., & Patmi, K. (2018). Algoritma & Pemograman C++. Ngajuk: Adjie Media Nusantara. Suarga. (2004). Algoritma Pemrograman. Yogyakarta: Penerbit Andi. Suryadi, H. &. (1997). Algoritma dan Pemograman. Jakarta: Gundarma.