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...

Macam-Macam Topologi Jaringan Komputer

Klikartikel.com - Pengertian topologi jaringan komputer yaitu suatu teknik atau cara untuk menyambungkan komputer ke beberapa komputer sekaliguan menjadi suatu jaringan yang terkoneksi satu dengan yang lainya. Ada banyak jenis topologi jaringan komputer didunia ini namun yang paling sering digunakan ada 5 jenis jaringan yaitu topologi jaringan ring, topologi jaringan start, topologi jaringan bus, topologi jaringan mesh dan topologi jaringan tree. Berikut ini pembahasaan dari tipe - tipe topologi jaringan. 1. Topologi Ring Topologi ring yaitu teknik menyambungkan komputer dengan cara setiap komputer di hubungkan dengan komputer yang lain dan seterusnya sampai kembali ke komputer pertama yang nantinya akan membentuk seperti lingkaran sehingga topologi ini sering disebut dengan ring. Komputer 1 akan mengirim file atau berkomunikasi dengan komputer 4, maka data akan melewati komputer 2 dan komputer 3 sampai data diterima oleh komputer...

Peringkat dan Jenis Processor Pada Android

Sebenarnya ada banyak jenis processor yang digunakan untuk perangkat android yang kita gunakan, tapi pada postingan kali ini saya hanya membagikan processor android yang sering digunakan saat ini beserta ranking kekuatan dan performa terbaik pada processor itu sendiri. Perlu diingat, informasi yang saya tulis dibawah ini mungkin belum bisa dikatakan 100% benar, karena saya hanya punya sedikit referensi untuk mengumpulkan data ini. Snapdragon  Yang pertama ada Processor Snapdragon. Processor Snapdragon merupakan processor android terbaik ( menurut adonbpc ), karena processor ini memiliki performa yang sangat baik dibanding processor android lainnya yang setara dengan seri processor ini. Processor ini selalu menghadirkan teknologi terbaru dan pastinya bertenaga dan didukung dengan keunggulan seperti seperti menghasilkan grafik yang lebih tinggi, penggunaan batrai yang hemat, serta keunggulan layar yang menghasilkan resolusi tinggi. Peringkat menurut performa terbaik Snapd...