PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 201 break; case 3: display(); break; case 4: exit(0); default: printf("\nPILIHAN TIDAK TERSEDIA\n"); } } getch(); } void push() { NODE *temp; 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"); }
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 202 } 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; 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");
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 203 printf("|%4d|",temp->data); temp = temp->link; } } } Compile sampai benar : Gambar 6. 15 Struktur pemograman
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 204 Gambar 6. 16 Struktur pemograman Tampilan running : Gambar 6. 17 Hasil running
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 205 Gambar 6. 18 Hasil running 6.4 Kesimpulan dan Saran 6.4.1 Kesimpulan Stack adalah suatu koleksi atau kumpulan item data yang terorganisasi dalam bentuk urutan linier, yang operasi pemasukkan dan penghapusan datanya dilakukan pada salah satu sisinya. Keunikkan pada stack adalah dimana node yang ditambahkan dalam list dan diambil dari list hanya pada kepala, dengan prinsip pengolahannya adalah Last-in First-Out (LIFO). 6.4.2 Saran Setelah melihat dari laporan yang telah kita buat, saran yang dapat diberikan hanyalah terus bergiat untuk selalu mencari tahu apa yang kita belum ketahui
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 206
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 207 BAB VII QUEUE OLEH Gibran Hayder Achwan 07352211026 PROGRAM STUDI INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS KHAIRUN TERNATE 2023
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 208 BAB VII QUEUE 7.1 Definis Queue (Antrian) Queue atau antrian merupakan kumpulan elemen yang pengisian dan penghapusan elemen yang dilakukan dari sisi atau gerbang yang berbeda beda. Pengisian dilakukan dari gerbang belakang dan penghapusan gerbang depan. Hal ini menunjukan bahwa untuk queue mempunyai dua gerbang yaitu gerbang depan dan belakang. Dengan demikian dapat dlihat bahwa queue mempunyai sifat FIFO ( Frist in, Frist out ), yaitu elemen yang pertama masuk akan keluar pertama juga. Represnatsi queue dapat deklarasi dengan menggunakan array atau linked list resresntasi queue dengan array atau linked list. Representasi queue dengan array ada penunjuk depan dan belakang yang digunakan untuk menunjuk elemen posisi depan dan elemen posisi belakang. Sehingga dapat diketahui queue kosong atau tidak. Queue dapat ditambah selama belakang tidak sama dengan isi dan maksimum array. Operasi penyisipan elemen queue digunakan untuk mengambil atau menghapus elemen dan suatu queue. Operasi penghapusan elemen pada circular yang dihapus adalah selalu yang berada didepan sehingga penunjuk depan akan naik satu (depan + 1 ) jika depan lebih kecil dari maksimum elemen array . tetapi dpena di atur menjadi satu (depan =1 ) jika depan sama dengan maksimum elemen array.
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 209 7.2 contoh Operasi-operasi dasar dari sebuah queue adalah: 1. Enqueue: proses penambahan atau memasukkan satu elemen di belakang 2. Dequeue: proses pengambilan atau mengeluarkan satu elemen di posisi depan. 7.2.1 Contoh Program Queue Buka DevC++ dan ketikan source code dibawah ini: #include <stdio.h> #include <iostream> #include <conio.h> #define MAX 8 using namespace std; Gambar 7. 1 Contoh 1 Gambar 7. 2 contoh 2
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 210 typedef struct{ int data[MAX]; int head; int tail; }Queue; Queue antrian; void Create(){ antrian.head=antrian.tail=-1; } int IsEmpty(){ if(antrian.tail==-1) return 1; else return 0; } int IsFull(){
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 211 if(antrian.tail==MAX-1) return 1; else return 0; } Enqueue(int data) { if(IsEmpty()==1) { antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("%d sudah dimasukan",antrian.data[antrian.tail]); } else if(IsFull()==0) { antrian.tail++; antrian.data[antrian.tail]=data; printf("%d sudah dimasukan",antrian.data[antrian.tail]);
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 212 } } int Dequeue() { int i; int e = antrian.data[antrian.head]; for(i=antrian.head; i<=antrian.tail-1;i++) { antrian.data[i]=antrian.data[i+1]; } antrian.tail--; return e; } void Clear() { antrian.head=antrian.tail=-1; printf("CLEAR"); }
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 213 void Tampil() { if(IsEmpty()==0) { for(int i=antrian.head;i<=antrian.tail;i++) { printf(" %d",antrian.data[i]); } }else printf("data kosong!\n"); } main() { int pil; int data; Create(); do{ cout<<endl<<endl; cout<<" =============================="<<endl;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 214 cout<<" =\t PROGRAM QUEUE ="<<endl; cout<<" =============================="<<endl; cout<<" = 1. ENQUEUE = "<<endl; cout<<" = 2. DEQUEUE = "<<endl; cout<<" = 3. TAMPIL = "<<endl; cout<<" = 4. CLEAR = "<<endl; cout<<" = 5. EXIT ="<<endl; cout<<" =============================="<<endl; cout<<" Masukan Pilihan : ";cin>>pil; switch(pil) { case 1: cout<<"Masukan Data : ";cin>>data; Enqueue(data); break; case 2: Dequeue(); break;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 215 case 3: Tampil(); break; case 4: Clear(); break; case 5: break; } getch(); } while(pil!=5); return 0; }
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 216 Tampilan diDevC++ akan seperti dibawah ini: Gambar 7. 3 Tampilan source code diatas diDevC++ 1 (bagian 1)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 217 Gambar 7. 4 Tampilan source code diatas diDevC++ 1 (bagian 2) Gambar 7. 5 Gambar 7.3 Tampilan source code diatas diDevC++ 1 (bagian 3)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 218 ) Gambar 7. 6 Tampilan source code diatas diDevC++ 1 (bagian 4) Gambar 7. 7 Tampilan source code diatas diDevC++ 1 (bagian 5)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 219 7.3 Latihan Queue 1. Kasus Queue dalam Array 1 Gambar 7. 8 Flowchart 7.1 contoh soal queue 1
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 220 Penjelasan flowchart di atas: Dimulai dengan terminator dan header lalu dimasukkan variabel yang diinginkan. Memasuki decision while untuk melanjutkan case yang diinginkan atau tidak sama sekali. Diberikan case berupa case 1 enqueue, memasuki decision if rear==MAX-1, Jika Yes print Queue Overflow, Jika No memasuki proses rear=rear+1 dan kembali ke decision while. Case 2 dequeue, memasuki decision if front==-1 II front > rear, Jika Yes Print Queue Underflow, Jika No memasuki proses front=front+1 dan kembali ke decision while. Case 3 display, memasuki decision if front==-1, Jika Yes print Queue is empty, Jika No memasuki ulangan for (i=front;i<=rear;i++), lalu print queue_arr[i], kemudian kembali ke decision while. Case 4 exit, proses exit lalu end dengan simbol terminator. Jika tidak dipilih maka pilihan tidak tersedia dan ditutup dengan simbol terminator sebagai penyelesaiannya. Program dari flowchart di atas adalah sebagai berikut: #include <stdio.h> #include <stdlib.h> #include <conio.h> #define MAX 5 int rear = -1; int front = -1; int queue_arr[MAX]; void enqueue(); void dequeue(); void display(); main()
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 221 { int choice; while(1) { printf("1.Insert\n"); printf("2.Delete\n"); printf("3.Display\n"); printf("4.Quit\n"); printf("Enter your choice : "); scanf("%d",&choice); switch(choice) { case 1 : enqueue(); break; case 2 : dequeue(); break; case 3: display(); break; case 4:
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 222 exit(1); default: printf("PILIHAN TIDAK TERSEDIA\n"); } } getch(); } void enqueue() { int added_item; if (rear == MAX- 1) printf("Queue Overflow\n"); else { if (front ==-1) front = 0; printf("Input the element for adding in queue : "); scanf("%d", &added_item); rear = rear + 1; queue_arr[rear] = added_item ; }
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 223 } void dequeue() { if (front ==-1 || front > rear) { printf("Queue Underflow\n"); return ; } else { printf("Element deleted from queue is : %d\n",queue_arr[front]); front = front + 1; } } void display() { int i; if (front ==-1) printf("Queue is empty\n"); else { printf("Queue is :\n"); for(i = front; i <= rear; i++)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 224 printf("%d ",queue_arr[i]); printf("\n"); } } Hasil eksekusi program di atas adalah sebagai berikut: Gambar 7. 9 program queue 1 (1)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 225 Gambar 7. 10 program queue 1 (2) Gambar 7. 11 program queue 1 (3)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 226 Gambar 7. 12 hasil running program queue 1 (1) 2. Kasus Queue 2
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 227 Gambar 7. 13 Flowchart 7.6 contoh soal queue 2 Penjelasan flowchart di atas:
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 228 Dimulai dengan terminator dan header lalu dimasukkan variabel yang diinginkan. Proses berlanjut ke dalam sistem switch untuk masuk kedalam kasus atau pilihan yang diberikan yaitu case 1 enqueue, memasuki decision if temp==NULL, Jika Yes print Memory Allocation Failed, Jika No maka masuk decision if front==NULL, Jika Yes proses front=rear=temp lalu print Node has been inserted at End Succesfully. Jika No proses rear=temp lalu print Node has been inserted at End Succesfully. Kemudian end dengan simbol terminator. Case 2 dequeue, memasuki decision if front==NULL, Jika Yes print underflow!!!, Jika No proses rear=NULL lalu print Deleted Node(From Front) with the Data: %d\n, kemudian end dengan simbol terminator. Case 3 display, memasuki decision if front==NULL, Jika Yes print Empty Queue, Jika No proses while lalu print Rear, kemudian end dengan simbol terminator. Case 4 exit, lalu end dengan simbol terminator. default jika pesan tidak ditemukan. Print PILIHAN TIDAK TERSEDIA, Lalu tutup dengan simbol terminator untuk penyelesaiannya.Program dari flowchart di atas adalah sebagai berikut: #include <stdlib.h> #include <stdio.h> #include <conio.h> typedef struct node { int data; struct node *link; } NODE; NODE *front, *rear = NULL;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 229 void enqueue(); void dequeue(); 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 : "); scanf("%d",&choice); switch(choice) { case 1 : enqueue(); break; case 2: dequeue(); break; case 3:
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 230 display(); break; case 4: exit(0); default: printf("\nPILIHAN TIDAK TERSEDIA\n"); } } getch(); } void enqueue() { NODE *temp; int info = 0; printf("Enter data to be enqueued (0-9999) : "); scanf("%d",&info); temp = (NODE *) malloc(sizeof(NODE)); if (temp == NULL) printf("\nMemory Allocation Failed"); else { temp->data = info; temp->link = NULL;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 231 if (front == NULL) { front = rear = temp; } else { rear->link = temp; rear = temp; } printf(" Node has been inserted at End Successfully !!"); } } void dequeue() { NODE *temp; int info; if (front == NULL) { printf(" Underflow!!!"); } else { temp = front;
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 232 info = front->data; if (front == rear) { rear = NULL; } front = front->link; temp->link = NULL; printf(" Deleted Node(From Front)with the Data: %d\n", info); free(temp); } } void display() { NODE *temp; if (front == NULL) printf("Empty Queue\n"); else { temp = front; printf("Front->"); while (temp) { printf("[%d]->", temp->data);
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 233 temp = temp->link; } printf("Rear\n"); } } Hasil eksekusi program di atas adalah sebagai berikut: Tampilan source code diatas diDevC++ 1 (bagian 5)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 234 Gambar 7. 14 program queue 2 (2)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 235 Gambar 7. 15 program queue 2 (3)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 236 Gambar 7. 16 hasil running program queue 2 (1) Gambar 7. 17 hasil running program queue 2 (2)
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 237 7.4 Kesimpulan dan Saran 7.4.1 Kesimpulan Queue atau antrian merupakan kumpulan elemen yang pengisian dan penghapusan elemen yang dilakukan dari sisi atau gerbang yang berbeda beda. Pengisian dilakukan dari gerbang belakang dan penghapusan gerbang depan. Hal ini menunjukan bahwa untuk queue mempunyai dua gerbang yaitu gerbang depan dan belakang. Dengan demikian dapat dlihat bahwa queue mempunyai sifat FIFO ( Frist in, Frist out ), yaitu elemen yang pertama masuk akan keluar pertama juga. 7.4.2 Saran Di harapkan agar dapat memahami dengan betul mengenai materi queue ini. Serta dapat mempraktikan sendiri dan juga menyelesaikan studi kasus lainnya. Dan memahami strukturt data yang digunakan dalam antrian (queue).
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 238
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 239 DAFTAR PUSTAKA Muhammad Sholeh, Rochmat Haryanto, A. P. (2013). Panduan Belajar Pemograman Terstruktur. Universitas Amikom Yogyakarta. (2018). Algoritma Struktur Data. Diakses pada 28 November 2022, dari http://materi.amikom.ac.id/2020/10/25102020_Modul%20Teori%20Algoritma%20Str uktur%20Data.pdf Delima. Konsep Dasar Algoritma Pemrograman dan Bahasa Pemrograman. Diakses pada 28 November 2022, dari Fakultas Ilmu Tarbiyah dan Keguruan UINSU https://osf.io/cp5zr/download/?format=pdf Nur Hidayati, M.Kom. (2016). Modul Struktur Data. Jakarta: Bina Sarana Informatika. Tersedia dari https://repository.bsi.ac.id/index.php/unduh/item/283413/Modul_strukturData.pdf diakses pada 29 November 2022 Budiman, Edy. (2020). Algoritma dan Pemograman. Samarinda:Fakultas Teknologi Informasi dan Komputer (FTIK) Universitas Mulawarnman. Tersedia dari https://repository.unmul.ac.id/bitstream/handle/123456789/4927/Buku%20Algoritma %20dan%20Pemrograman.pdf diakses pada 29 November 2022 Triase. (2020). Struktur Data. Medan: Fakultas Sains dan Teknologi Universitas Islam Negeri Sumatera Utara. Tersedia dari http://repository.uinsu.ac.id/9717/2/Diktat%20Struktur%20Data.pdf
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA LAB REKAYASA PERANGKAT LUNAK | TEKNIK INFORMATIKA UNKHAIR 240 Ahmad muhardian. (2019, may 26). Belajar Pemrograman C #15: Apa itu Pointer? Retrieved 12 20, 2022, from Belajar Pemrograman C#15: apa itu pointer?-Petani Kode: https://www.petanikode.com/c-pointer/ Fajar . (2019, maret 4). Pointer. Retrieved 12 20, 2022, from Ponter-Belajar C++: https://www.belajarcpp.com/tutorial/cpp/pointer/