Program Stack, Queue, dan Tree dalam Bahasa C++
Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam algoritma. Langkah-langkah dalam algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar. Dalam beberapa konteks, algoritma adalah spesifikasi urutan langkah untuk melakukan pekerjaan tertentu.
Stack (tumpukan) merupakan struktur data yang dalam pengelolaan datanya bersifat Last In First Out (LIFO), yaitu data yang terakhir dimasukkan akan dikeluarkan pertama kali. Data yang dimasukkan kedua dari terakhir akan dikeluarkan yang kedua. Demikian seterusnya, sehingga data yang pertama kali dimasukkan akan dikeluarkan terakhir (Barakbah, 2013).
Operasi Stack
a) Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
b) Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
c) Clear : digunakan untuk mengosongkan stack
d) IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
e) IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh.
Queue adalah struktur data linear seperti stack, hanya saja penambahan dan penghapusan elemen dilakukan pada tempat yang berbeda. Penambahan elemen dilakukan pada bagian belakang Queue, sedangkan penghapusan elemen dilakukan pada bagian depan Queue. Mekanisme ini dikenal sebagai First In First Out (FIFO). Beberapa contoh aplikasi queue atau antrian adalah antrian printer, antrian kasir, dsb.
Struktur data queue setidaknya harus memiliki operasi-operasi sebagai berikut :
a) EnQueue Memasukkan data ke dalam antrian
b) DeQueue Mengeluarkan data terdepan dari antrian
c) Clear Menghapus seluruh antrian
d) IsEmpty Memeriksa apakah antrian kosong
e) IsFull Memeriksa apakah antrian penuh
Tree adalah kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah. Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elmennya.
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.
Berikut source kodenya :
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream> using namespace std; //pendeklarasian struct sebuah tree awal struct Node{ int data; Node *kiri; Node *kanan; }; //procedure untuk menambahkan node baru void tambah(Node **root, int databaru) { //jika root masih kosong if((*root) == NULL) { //pembuatan node baru Node *baru; //pengalokasian memori dari node yang telah dibuat baru = new Node; //inisialisasi awal node yang baru dibuat baru->data = databaru; baru->kiri = NULL; baru->kanan = NULL; (*root) = baru; (*root)->kiri = NULL; (*root)->kanan = NULL; cout<<"Data bertambah!"<<endl; } //jika data yang akan dimasukkan lebih kecil daripada elemen root, maka akan diletakkan di node sebelah kiri. else if(databaru<(*root)->data) tambah(&(*root)->kiri, databaru); //jika data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di node sebelah kanan else if(databaru>(*root)->data) tambah(&(*root)->kanan, databaru); //jika saat dicek data yang akan dimasukkan memiliki nilai yang sama dengan data pada root else if(databaru == (*root)->data) cout<<"Data sudah ada!"<<endl; } //procedure yang digunakan untuk mencetak tree secara preOrder void preOrder(Node *root) { if(root != NULL){ cout<<"\t"<<root->data; preOrder(root->kiri); preOrder(root->kanan); } } //procedure yang digunakan untuk mencetak tree secara postOrder void postOrder(Node *root) { if(root != NULL){ postOrder(root->kiri); postOrder(root->kanan); cout<<"\t"<<root->data; } } //program utama main() { //deklarasikan variabel int pil, data; Node *pohon; pohon = NULL; //inisialisasi node pohon //perulangan do-while do { system("cls"); //bersihkan layar cout<<"\t======================"; cout<<"\n\t PROGRAM BINARY TREE"; cout<<"\n\t======================"; cout<<"\n1. Tambah\n"; cout<<"2. Lihat pre-order\n"; cout<<"3. Lihat post-order\n"; cout<<"4. Exit\n"; cout<<"Pilihan : "; cin>>pil; switch(pil) { //jika pil bernilai 1 case 1 : cout<<"\nINPUT : "; cout<<"\n-------"; cout<<"\nData baru : "; cin>>data; //panggil fungsi untuk menambah node yang berisi data pada tree tambah(&pohon, data); break; //jika pil bernilai 2 case 2 : cout<<"\nOUTPUT PRE ORDER : "; cout<<"\n------------------\n"; if(pohon!=NULL) //panggil fungsi untuk mencetak data secara preOrder preOrder(pohon); else cout<<"Masih kosong!"; break; //jika pil bernilai 3 case 3 : cout<<"\nOUTPUT POST ORDER : "; cout<<"\n------------------\n"; if(pohon!=NULL) //panggil fungsi untuk mencetak data secara postOrder postOrder(pohon); else cout<<"Masih kosong!"; break; } _getch(); }while(pil != 4); //akan diulang jika input tidak samadengan 4 getch(); } |