Langsung ke konten utama

STACK DENGAN POINTER

Operasi-operasi stack secara lengkap adalah sebagai berikut :
Pendeklarasian stack dengan pointer
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Pendeklrasian dengan menggunakan pointer dibuat dua buah struktur yaitu data simpul yang berupa data dan pointer yang menunjuk ke simpul selanjutnya dan yang kedua struktur stack yang digunakan untuk menyimpan jumlah stack dan penunjuk posisi top dari stack:

Deklarasi Simpul/node :
struct node
{
   int bil;
   struct node *next;
};
Deklarasi stack dengan array:
struct stack
{
   int jumlah;
   struct node *top;
};

Inisialisasi
Inisialisasi stack adalah proses pembuatan suatu stack kosong. Proses inisialisasi untuk stack yang menggunakan pointer adalah dengan mengisi nilai field top dengan NULL.
stack.top=NULL;
Operasi Cek Kosong Stack
Operasi ini digunakan untuk memeriksa apakah stack dalam keadaan kosong. Operasi ini penting dilakukan dalam proses pop. Ketika suatu stack dalam keadaan kosong, maka proses pop tidak bisa dilakukan. Operasi ini dilakukan hanya dengan memeriksa jumlah elemen stack yang terbentuk. Jika jumlah bernilai 0, maka berarti stack dalam keadaan empty (kosong).
int cekKosong(stack *stack)
{
if(stack->jumlah==0)
return 1; else
return 0;
}

Operasi Cek Penuh
Operasi ini berguna untuk memeriksa keadaan stack apakah sudah penuh atau belum. Operasi ini akan memberikan nilai true (1) jika field top sama dengan size.
int cekPenuh(stack *stack)
{
if(stack->jumlah==size)
return 1;
else
return 0;
}

Operasi Push
Operasi ini berguna untuk menambah suatu elemen data baru pada stack dan disimpan pada posisi top yang akan mengakibatkan posisi top akan berubah. Langkah operasi ini adalah :
  1. Periksa apakah stack penuh. Jika tidak penuh maka proses push dilaksanakan dan jika stack penuh, maka proses push digagalkan.
  2. Proses push-nya sendiri dilakukan dengan menyambungkan simpul baru->next sama dengan stack->top, kemudian mengubah posisi top stack pada simpul baru dengan stack->top sama dengan baru, kemudian menambah jumlah simpul sebesar 1 dengan perintah stack->jumlah++.
 void Push(stack *stack) {
      node *baru;
 if (cekPenuh(stack))
 {
    cout<<"stack full";
    getch();
 }
 else
{
  baru=new(node);
  cout<<"\nmasukkan nilai yang ingin dipush ke stack: ";
  cin>>baru->bil;
  baru->next=stack->top;
  stack->top=baru;
  stack->jumlah++;
  cout<<"\nproses push sukses";
  getch();
 }
}

Operasi Pop 
Operasi ini berguna untuk mengambil elemen terakhir (top) dan kemudian menghapus elemen tersebut sehingga posisi top akan berpindah. Langkah operasi pop pada stack yang menggunakan pointer adalah terlebih dahulu memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka:
a. Gunakan variabel bantu hapusPtr untuk membaca simpul top stack
b. Pindahkan posisi top stack pada posisi sebelumnya
c. Kurangi jumlah simpul pada stack sebasar 1
d. Hapus simpul hapusPrt

void Pop(stack *stack)
 {
 node *hapusPtr;
 hapusPtr=stack->top; 
if (cekKosong(stack)) 

   cout<<"Stack Kosong";getch(); 
}
else 

   stack->top=stack->top->
   next; stack->jumlah--; 
   delete hapusPtr; cout<<"\nproses pop berhasil\n"; 
   getch(); 
 } 


Program Lengkap:
#include 
#include 
#define size 5  
struct node {
  int bil;
    struct node *next;
 };  
struct stack {
    int jumlah;
    struct node *top;
 };  
int cekPenuh(stack *stack) {
      if(stack->jumlah==size)
        return 1;
      else
        return 0;
 }  
int cekKosong(stack *stack) {
     if(stack->jumlah==0)
        return 1;
     else
        return 0;
 }  
void Push(stack *stack) {
      node *baru;
      if (cekPenuh(stack))
      {
        cout<<"stack full";
          getch();
      }
      else
      {
          baru=new(node);
          cout<<"\nmasukkan nilai yang ingin dipush ke stack: ";
          cin>>baru->bil;
          baru->next=stack->top;
          stack->top=baru;
          stack->jumlah++;
       }
 }  

void cetak(stack *stack) {
      node *bacaPtr;
      bacaPtr=stack->top;
      if(cekKosong(stack))
      {
        cout<<"\nstack kosong";
          getch();
      }
      else
      {
        clrscr();  
        cout<<"\nTOP\n";
        cout<<"---------\n";
        while(bacaPtr!=NULL)
          {
            cout<<bacaPtr->bil<<endl;
            cout<<"---------"<<endl;             
            bacaPtr=bacaPtr->next;
          }
          getch();
      }
 }   
void Pop(stack *stack) {
      node *hapusPtr;
      hapusPtr=stack->top;
      if (cekKosong(stack))
      {
        cout<<"Stack Kosong";
         getch();
      }
      else
      {
 
        stack->top=stack->top->next;
        stack->jumlah--;
        delete hapusPtr;
        cout<<"\nproses pop berhasil\n";
        getch();
      }
 }  
void Top(stack *stack) {
     int dataTop;
     if(cekKosong(stack))
     {
       cout<<"\ntop = NULL\n";
          getch();
     }
     else 
     {
       dataTop=stack->top->bil;
       cout<<"\ntop = "<<dataTop<<endl;
       getch();
     }
 }
 

  void hapus(stack *stack) {
     node *bantuHapus;
     while(stack->top!=NULL)
     {
        bantuHapus=stack->top;
        stack->top=stack->top->next;
        delete bantuHapus;
     }
     stack->jumlah=0;
 }
 void main()
 {
  stack stack;
  stack.jumlah=0;
  stack.top=NULL;
  char pilih;
  do
    {
     clrscr();
   cout<<"MENU STACK"<<endl;
   cout<<"[1]. Kosongkan Stack"<<endl;
   cout<<"[2]. Push"<<endl;
   cout<<"[3]. Pop"<<endl;
   cout<<"[4]. Lihat Top Stack"<<endl;   
   cout<<"[5]. Tampilkan stack"<<endl;      
   cout<<"[6]. Keluar\n"<<endl;
   cout<<"\npilihan: ";
       cin>>pilih;
   if(pilih=='1')
        hapus(&stack);
   if(pilih=='2')
    { 
      Push(&stack);
      cetak(&stack);
    }
   if(pilih=='3')
    {
      Pop(&stack);
      cetak(&stack);
    }   
   if(pilih=='4')
        Top(&stack);
   if(pilih=='5')
        cetak(&stack);
  }
while(pilih!='6');
 } 

Komentar

Postingan populer dari blog ini

Kekuatan dan Kelemahan Tipe - Tipe Pokemon

Tipe - Tipe Pokemon Demam pokemon kian menginkat, buat kami yang gemar memainkannya mimin beri daftar kekuatan dan kelemahan tiap tipe pokemon agar membatu dalam battel di gym. tiap - tiap pokmon dikelompokan kedalam 18 tipe yang berbeda diantarnya  Normal, Fighting, Flying, Poison, Ground, Rock,Steel, Fire, Psychic, Ice,  Bug, Grass, Water, Electric, Ghost, Dragon, Fairy dan Drak Setiap Pokemon dapat memiliki satu atau dua Tipe sekaligus. Contoh, Pikachu merupakan Pokemon bertipe Electric, sedangkan Bulbasaur merupakan Pokemon dengan Tipe Grass sekaligus Poison. Ada total 151 Pokemon, 84 diantaranya hanya memiliki satu Tipe sedangkan 67 Pokemon memiliki dua Tipe. Pokemon yang tipenya sama, memiliki kekuatan dan kelemahan yang sama juga saat Battle. Misal, Pokemon Tipe Poison melawan Tipe Poison, damage yang akan diterima akan setara. Di sisi lain, Pokemon Tipe Water mampu melakukan attack dengan damage besar ke Pokemon Tipe Fire yang lemah terhadap ser...

Menyembunyikan Pesan Error Notice: Undefined index

Pada pembahasan kali ini kita akan membahas bagai mana cara menghilangkan Notice: Undefined index:,  Sebelum kita mengetahui cara menghilangkan pesan error  Notice: Undefined index:,  yang perlu kita ketahui adalah maksud atau arti dari pesan error tersebut.  Notice: Undefined index: merupakan sebuah pesan dari variabel atau  Constanta yang tidak memiliki nilai (value). Jadi variabel atau contanta tersebut merupakan variabel kosong, lalu bagaimana cara menghilangkan pesan tersebut, berikut caranya : sebagai contoh kita ketikan script php seperti dibawah ini : <html> <head> </head> <body> <a href='?pg=1'>Hal 1</a> <a href='?pg=2'>Hal 2</a> <a href='?pg=3'>Hal 3</a> <?php     if($_GET['pg']== 1)         echo "Ini halaman 1";     elseif($_GET['pg']== 2)         echo "In...

Crystal Report Error : Failed to load database infromation

Ketika menjalankan crystal report tiba - tiba terjadi error dengan pesan Failed to load database infromation, usut punya usut ternyata penyebabnya adalah windows 10. Gambar : Error Crystal Report Tapi tenang saja berikut ini saya akan bahas cara penyelesaianya Masuk ke file yourApp.exe.config. Cari code <?xml version="1.0" encoding="utf-8" ?> <configuration>     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />     </startup> </configuration> Ubah menjadi <?xml version="1.0"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration> Kemudian coba lagi jalankan print dengan crystal report.  Source http://stackoverflow.com/questions/15951142/appcrash-on-s...