-->

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();
}





Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel