flag counter

Minggu, 16 Januari 2011

stack dengan array


Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”.
Ada empat operasi dasar yang didefinisikan pada stack, yaitu :
      1. CREATE(stack)
Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan  

      2. ISEMPTY(stack)
Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
ISEMPTY(S) = true, jika S adalah stack kosong
                        = false, jika S bukan stack kosong
atau
ISEMPTY(S) = true, jika NOEL(S) = 0
                       = false, jika NOEL(S) 0

Catatan :ISEMPTY(CREATE(S)) = true.

      3. PUSH(elemen,stack)
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :PUSH(E,S)
Artinya : menambahkan elemen E ke dalam stack S.
Elemen yang baru masuk ini akan menempati posisi TOP.
jadi : TOP(PUSH(E,S)) = E.
      Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).

      4. POP(stack)
Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :POP(S)
      Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :
POP(CREATE(S)) = error condition

Catatan :  TOP(PUSH(E,S)) = E


implementasi selengkapnya dari kelas stack adalah sebagai berikut


#include
#include
#define maks 5
using namespace std;
class stack{
friend ostream& operator<<(ostream&, const stack&);
public:
stack();
int penuh(int);
int kosong(int);
void cetak();
void push(char);
char pop();
private:
char a[maks];
int banyak;
};
ostream& operator<<(ostream& out,const stack& s){
cout<<"\nIsi stack: ";
for(int i=0;i<s.banyak;i++)
out<<s.a[i]<<" ";
}
stack::stack(){
banyak=0;
for(int i=0;i<maks;i++)
a[i]='0';
}
int stack::penuh(int s){
return s==maks?1:0;
}
int stack::kosong(int s){
return s==0?1:0;
}
void stack::cetak(){
cout<<"\nIsi stack: ";
for(int i=0;i<banyak;i++)
cout<<a[i]<<" ";
}
void stack::push(char x){
cout<<"\nElemen masuk: "<<x;
if(penuh(banyak))cout<=0;i–)
a[i+1]=a[i];
a[0]=x;
banyak++;
}
}
char stack::pop(){
cout<<"\nPop stack, elemen yang di-pop: "<<a[0];
char temp=a[0];
for(int i=0;i<banyak;i++)a[i]=a[i+1];
a[banyak]='0';
banyak–;
return temp;
}
int main(int argc, char *argv[])
{
stack Stack;
for(char c='a';c<'d';c++){
Stack.push(c);
Stack.cetak();
}
char p=Stack.pop();
Stack.cetak();
cout<<"\n\nCetak pakai overloading "<<Stack;
cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}


Tidak ada komentar:

Posting Komentar