Sabtu, 30 Mei 2015

Stack



          Stack adalah suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Contoh dalam kehidupan sehari-hari adalah tumpukan piring di sebuah restoran yang tumpukannya dapat ditambah pada bagian paling atas dan jika mengambilnya pun dari bagian paling atas pula..

Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu :
1.      Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas).
2.       Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack.
         Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6, maka data tersebut dapat tersimpan dalam bentuk sebagai berikut :

         Contoh lain adalah ada sekumpulan perintah stack yaitu push(5), push(7), pop, push(3), pop. Jika dijalankan, maka yang akan terjadi adalah :


           Selain operasi dasar stack (push dan stack), ada lagi operasi lain yang dapat terjadi dalam stack yaitu:
1.       Proses deklarasi yaitu proses pendeklarasian stack.
2.      Proses isempty yaitu proses pemeriksaan apakah stack dalam keadaan kosong.
3.       Proses isfull yaitu proses pemeriksaan apakah stack telah penuh.
4.      Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan pemberian nilai untuk top.

            Operasi-operasi stack secara lengkap adalah sebagai berikut :

1.       Pendeklarasian stack
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Karena stack dapat direpresentasikan dalam 2 cara, maka pendeklarasian stack pun ada 2 yaitu :
a.       Pendeklarasian stack yang menggunakan array. Suatu stack memiliki beberapa bagian yaitu top yang menunjuk posisi data terakhir (top)     elemen yang berisi data yang ada dalam stack. Bagian ini lah yang berbentuk array. Maks_elemen yaitu variable yang menunjuk maksimal banyaknya elemen dalam stack.




2.       Inisialisasi
Inisialisasi stack adalah proses pembuatan suatu stack kosong. Adapun langkah-langkah proses tersebut berdasarkan jenis penyimpanannya adalah :
a.       Inisialisasi stack yang menggunakan array.
Proses inisialisasi untuk stack yang menggunakan array adalah dengan mengisi nilai field top dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan 0 (contoh bahasa C), maka top diisi dengan nilai -1. Implementasinya dalam bahasa C adalah :
b.       Inisialisasi stack yang menggunakan single linked list
Proses inisialisasi untuk stack yang menggunakan single linked list adalah dengan mengisi nilai pointer stack dengan NULL. Implementasi dalam bahasa C adalah :

3.       Operasi IsEmpty
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. Adapun langkah-langkah operasi ini adalah :

a.      Operasi IsEmpty pada stack yang menggunakan array.
Operasi ini dilakukan hanya dengan memeriksa field top. Jika top bernilai 0 (untuk elemen yang dimulai dengan index 1) atau top bernilai -1 (untuk elemen yang dimulai dengan index 0), maka berarti stack dalam keadaan empty (kosong) yang akan me-return-kan true (1) dan jika tidak berarti stack mempunyai isi dan me-return-kan nilai false (0). 

Contoh Program Stack 1:
#include<iostream.h>
#include<conio.h>
class Linked_list_Stack
{
private :
struct node
{
int data;
node*next;
}
;
node *top;
node *entry;
node *print;
node *bottom;
node *last_entry;
node *second_last_entry;

public:
Linked_list_Stack();

void pop();
void push();
void print_list();
void show_working();
};

Linked_list_Stack :: Linked_list_Stack()
{
top=NULL;
bottom=NULL;
}
//-------------------------- push() -----------------------//
void Linked_list_Stack::push()
{
int num;
cout<<"\n\n\n\n\n\t Masukan angkapada Stack : ";
cin>>num;
entry=new node;
if(bottom==NULL)
{
entry->data=num;
entry->next=NULL;
bottom=entry;
top=entry;
}
else
{
entry->data=num;
entry->next=NULL;
top->next=entry;
top=entry;
}
cout<<"\n\n\t *** "<<num<<" sudah masuk dalam stack. "<<endl;
cout<<"\n\n\n\t\t Pres any key to return to Menu. ";
getch();
}
//----------------------------------- pop()-------------------------------- //
void Linked_list_Stack::pop()
{
if(bottom==NULL)
cout<<"\n\n\n\t *** Error : Stack is empty. \n"<<endl;
else
{
for(last_entry=bottom; last_entry->next!=NULL;
last_entry=last_entry->next)
second_last_entry=last_entry;
if(top==bottom)
bottom=NULL;
int poped_element=top->data;
delete top;

top=second_last_entry;
top->next=NULL;
cout<<"\n\n\n\t *** "<<poped_element<<"sudah diambil dari Stack."<<endl;
}
cout<<"\n\\n\t\t Pres any key to return to Menu. ";
getch();
}
//-------------------------- print_list() ---------------------------------//
void Linked_list_Stack::print_list()
{
print=bottom;
if(print!=NULL)
cout<<"\n\n\n\n\n\t Angka-angka ada di Stack adalah : \n"<<endl;
else
cout<<"\n\n\n\n\n\t ** Tidak ada yang ditampilkan. "<<endl;
while(print!=NULL)
{
cout<<"\t"<<print->data<<endl;
print=print->next;
}
cout<<"\n\n\n\t\t Pres any key to return to Menu.";
getch();
}
//---------------------------- show_working()----------------//
void Linked_list_Stack:: show_working()

{
char Key=NULL;
do
{
clrscr();
gotoxy(5,5);
cout<<"********** Implementation of Linked List as a Stack **********"<<endl;
gotoxy(10,8);
cout<<"Pilih salah satu menu : "<<endl;
gotoxy(15,10);
cout<<"- Press\ 'P\' to Masukan data dalam Stack"<<endl;

gotoxy(15,12);
cout<<"- Press \'O\' to Hapus data dari Stack"<<endl;

gotoxy(15,14);
cout<<"- Press \'S\' to tampilkan data dari Stack"<<endl;

gotoxy(15,16);
cout<<"- Press \'E\' to Exit"<<endl;

input :
gotoxy(10,20);
cout<<"              ";

gotoxy(10,20);
cout<<"Masukan Pilihan : ";

Key=getche();
if(int(Key)==27 || Key=='e' || Key=='E')
break;
else if(Key=='p'|| Key=='P')
push();
else if(Key=='o'|| Key=='O')
pop();
else if (Key=='s' || Key=='S')
print_list();
else
goto input;
}
while(1);

}
//-------------------------------- main() --------------------------- //
int main()
{
Linked_list_Stack obj;
obj.show_working();
return 0;
}
 

==========================================================================

Contoh program Double stack :
#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();
}
 

please visit the link :
http://www.stikom-bali.ac.id/




(Larik) Array


  • Pengertian Array, Cara Kerja Dan Contohnya
 

Pengertian Array adalah sekumpulan variabel yang memiliki tipe data yang sama dan dinyatakan dengan nama yang sama. Array merupakan konsep yang penting dalam pemrograman, karna array memungkinkan untuk menyimpan data maupun referensi objek dalam jumlah banyak dan terindeks.
Variabel array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat.


A. Deklarasi Array Dimensi Satu



Contoh :

X : Array[1..10] of integer

Artinya : mendefinisikan 10 variabel bertipe integer
Yaitu : X1, X2, X3, … X10

Contoh lain :
NamaHari : Array [1..7] of String
Nilai : Array [1..10] of Char
Frekuensi : Array[‘A’..‘E’] of Real
Contoh :
X : Array[1..10] of integer
Artinya    : mendefinisikan 10 variabel bertipe integer
Yaitu       : X1, X2, X3, … X10
Contoh lain :
NamaHari  : Array [1..7] of String
Nilai   : Array [1..10] of Char
Frekuensi : Array[‘A’..‘E’] of Real

Bentuknya :
tipe nama_var[ukuran];

Dengan :
● tipe : menyatakan jenis elemen array (int, char, unsigned, dan lain-lain)
● ukuran : menyatakan jumlah maksimal elemen array

Contoh Program dalam bahasa C++ :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
cout << N[i];
}

atau :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
printf(“%d \n”,N[i]);
}
 

B. Array Dimensi Dua

Array dua dimensi hampir sama dengan array berdimensi satu, namun biasanya array berdimensi dua banyak digunakan untuk penyajian data berbentuk tabel atau juga berbentuk matriks.

Cara Memberikan Nilai/Harga pada Array

NilaiMka : Array[1..10] of Char

NilaiMka1 ß ’A’
NilaiMka2 ß ’C’
NilaiMka3 ß ’ ’

Bahasa C++ :
Variabel array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat.
Bentuknya :
tipe nama_var[ukuran];

Dengan :
● tipe : menyatakan jenis elemen array (int, char, unsigned, dan lain-lain)
● ukuran : menyatakan jumlah maksimal elemen array

Contoh :
● int c[5];
C++ secara otomatis akan menyediakan lokasi memori sesuai dengan yang dideklarasikan, dimana nomor indeks selalu dimulai dari 0.
● int c[5] = {-12, 0, 20, 85, 1551};
Nilai suatu variabel array dapat juga diinisialisasi secara langsung seperti yang terdapat di dalam tanda kurung kurawal pada saat deklarasi di atas.
● int x[5] = {0};
Deklarasi variable array sekaligus mengisi setiap lokasi memorinya dengan nilai 0.

Contoh Algoritma :
Algoritma Array1D
DEKLARASI
N : array[1..5] of integer
i : integer
DESKRIPSI
N1ß 25
N2ß 12
N3ß 17
N4ß 10
N5ß 15
For i ß 1 to 5 do
Output (Ni)
endfor
Contoh Program dalam bahasa C++ :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
cout << N[i];
}

atau :
#include
main()
{
int N[5]={25,12,17,10,15};
int i;
for(i=0; i<=4; i++)
printf(“%d \n”,N[i]);
}

please visit the link :
http://www.stikom-bali.ac.id/