Kamis, 17 Juli 2014

Contoh Program Double Stack C++


SOURCE CODE:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#define n 10
char P[]={'>',' ',' ',' ',' ',' '};
int S[n],mov[2],X,Y,pil=0;
int *top1,*top2,*dasar1,*dasar2,*helpI;
//utama
void awal(){
 top1=&S[-1];
   top2=&S[n];
   dasar1=&S[-1];
   dasar2=&S[n];
   helpI=&S[-1];
}
void push1(int x){
 top1=top1+1;
   *top1=x;
}
void push2(int y){
 top2=top2-1;
   *top2=y;
}
void pop1(){
 X=*top1;
   *top1=0;
   top1=top1-1;
}
void pop2(){
 Y=*top2;
   *top2=0;
   top2=top2+1;
}
int BisaDiisi(int k){
 if(top2-top1>k)
    return 1;
   else
    return 0;
}
int BisaDiambil1(){
 if(top1>dasar1)
    return 1;
   else
    return 0;
}
int BisaDiambil2(){
 if(top2<dasar2)
    return 1;
   else
    return 0;
}
void tampil(){
 cout<<"\n================ data menjadi ==================="<<endl;
   while(helpI!=(dasar2-1)){
    helpI++;
      cout<<*helpI<<" ";
   }
   cout<<"\n======================================================"<<endl;
   helpI=&S[-1];
}
//tambahan
void tampilMenu(){
    clrscr();
    cout<<"========================================================"<<endl;
    cout<<"1. isi stack 1 (kiri)"<<endl;
    cout<<"2. isi stack 2 (kanan)"<<endl;
    cout<<"3. isi kedua stack"<<endl;
    cout<<"4. pop stack 1"<<endl;
    cout<<"5. pop stack 2"<<endl;
    cout<<"6. pop kedua stack"<<endl;
    cout<<"========================================================="<<endl;
      cout<<"pilihan anda : ";cin>>pil;

}


void main(){
 awal();
   do{
  tampilMenu();
      cout<<endl;
  //cout<<"nilai pil = "<<pil<<endl;
    switch(pil){
     case 1: if(BisaDiisi(1)){
           cout<<"masukkan bilangan = ";
                  cin>>X;
           push1(X);
         }
                else{
                cout<<"maaf tidak ada tempat untuk push";
                }break;
      case 2: if(BisaDiisi(1)){
           cout<<"masukkan bilangan = ";
                  cin>>Y;
           push2(Y);
          }
               else{
                 cout<<"maaf tidak ada tempat untuk push";
               }break;
       case 3: if(BisaDiisi(2)){
           cout<<"masukkan bilangan 1= ";
                  cin>>X;
           push1(X);
                  cout<<"masukkan bilangan 2= ";
                   cin>>Y;
           push2(Y);
          }
               else{
                cout<<"maaf ruang tidak cukup";
                }break;
       case 4: if(BisaDiambil1()){
          pop1();
                   cout<<"data yang diambil = "<<X<<endl;
          }
                else{
                cout<<"maaf stack 1 tidak ada isinya"<<endl;
                }break;
      case 5: if(BisaDiambil2()){
           pop2();
                  cout<<"angka yang diambil = "<<Y<<endl;
          }
               else{
                 cout<<"maaf stack 2 tidak ada isinya"<<endl;
               }break;
       case 6: if(BisaDiambil1()&&BisaDiambil2()){
           pop1();
                   pop2();
                  cout<<"isi yang baru di pop = "<<X<<" dan "<<Y<<endl;
          }
               else{
                 cout<<"maaf salah satu atau kedua stack tidak ada isinya"<<endl;
               }break;
   }
    tampil();
      cout<<"\nenter untuk mengulang dan esc untuk keluar !";
      do{
       mov[0]=getch();
         if(mov[0]==27)
          exit(0);
      }while(mov[0]!=13);
   }while(mov[0]==13);
 getch();
}

2 komentar: