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

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

Perbedaan metode close dan dispose

Klikartikel.com Perbedaan dasar antara Close () dan Dispose () yaitu, ketika metode Close () dipanggil, maka koneksi akan ditutup sementara dan dapat dibuka sekali lagi. lalu perbedaan dengan dispose () yaitu ketika metode dispose dipanggil maka akan secara permanen menutup dan menghapus objek koneksi dari memori dan tidak ada lagi pemrosesan lebih lanjut. Contoh penggunaan fungsi Close dan Dispose string constring = "Server=(localhost);database=myprojectdb; username =root; password=admin"; SqlConnection sqlcon = new SqlConnection(constring); sqlcon.Open();   // disini koneksi dibuka // jalankan kode disini } catch {      // kode akan dijalankan saat error terjadi di blok try } finally {  sqlcon.Close();               // koneksi ditutup  sqlcon.Dispose();         // menghancurkan koneksi objek }

Cara Mudah Upload File Ke Github

Klikartikel.com - Selamat malam udah lama rasanya ga posting ke blog ini karena kegiatan kuliah dan kerjaan yang padat. Kali ini kita akan belajar tentang bagaimana cara mengupload file atau project kita ke github, Langsung saja kita bahas bagaimana cara mudah upload file ke github Pertama - tama buat akun github terlebih dahulu. Pastikan koneksi internet anda lancar dan stabil Pilih folder yang akan kita upload filenya  Kemudian masukan perintah berikut Pertama Inisialisai file git int Kedua Memasukan File Project git add * Atau jika kita hanya memasukan beberapa file bisa menggunkan perintah seperti di bawah ini git add namafile.format_file Setelah itu cek status file  Ketiga menyimpan sekaligus membuat catatan  git commit -m "upload pertama" Login ke akun github kemudian buat repository    Copy link repository Melakukan Pull and Push Masuk ke terminal lagi kemudian koneksikan antara repository dan github di dekstop deng