DOUBLE STACK
PERTEMUAN 05
MATA KULIAH : STRUKTUR DATA
DOUBLE STACK
Double Stack.
- Dua stack dalam satu array
- Dasar stack1 berada pada index terkecil
- Dasar stack2 berada pada index terbesar
Proses :
a) AWAL(Inisialisasi)
b) PUSH1, Push untuk stack1
c) POP1, Pop untuk stack1
d) PUSH2, Push untuk stack2
e) POP2, Pop untuk stack2
a. Fungsi dasar proses AWAL :
b. Fungsi dasar proses PUSH1 :
c. Fungsi dasar proses POP1 :
d. Fungsi dasar proses PUSH2 :
e. Fungsi dasar proses POP2 :
Kondisi Stack
a) Algoritma lengkap proses PUSH1 :
Periksa apakah Top2 – Top1 > 1,
a. jika ya :
o Naikan Top1 dengan 1
o Isikan data kedalam elemen yang ditunjuk oleh Top1
b. Jika tidak
o Cetak komentar “Stack Penuh”
b) Algoritma lengkap proses POP1 :
Periksa apakah Top1 > -1,
a. Jika ya,
o Copy data dari elemen yang ditunjuk Top1
o Turunkan Top1
b. Jika tidak,
o Cetak komentar “Stack Kosong”
c) Algoritma lengkap proses PUSH2 :
Periksa apakah Top2 – Top1 > 1,
a. jika ya :
i. Turunkan Top2 dengan 1
ii. Isikan data kedalam elemen yang ditunjuk oleh Top2
b. Jika tidak
i. Cetak komentar “Stack Penuh”
d) Algoritma lengkap proses POP2 :
Periksa apakah Top2 < n,
a. Jika ya,
o Copy data dari elemen yang ditunjuk Top2
o Naikan Top2
b. Jika tidak,
o Cetak komentar “Stack Kosong”
Soal :
1. Susunlah program untuk menginput data dari keyboard terus menerus
hingga stack1 penuh
2. Susunlah program untuk menginput data dari keyboard terus menerus
hingga stack2 penuh
3. Susunlah program untuk menghapus stack1 hingga kosong
4. Susunlah program untuk menghapus stack2 hingga kosong
Jawab :
Jawab :
#include <iostream.h>
#include <conio.h>
int nilai [5];
int top1, top2, menu, stack, pop;
void create()
{
top1=-1;
top2=5;
stack=1;
pop=1;
}
bool isfull()
{
if(top2-top1==1)
{
return true;
}
else
{
return false;
}
}
bool isempty1()
{
if(top1==-1)
{
return true;
}
else
{
return false;
}
}
bool isempty2()
{
if(top2==5)
{
return true;
}
else
{
return false;
}
}
void main()
{
create();
home:
clrscr();
cout<<"1. Push"<<endl;
cout<<"2. Pop"<<endl;
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
cout<<"Masukkan pilihan anda (1-4) : ";
cin>>menu;
switch(menu)
{
case 1:
if(isfull()==true)
{
cout<<"Stack Penuh !";
}
else
{
if (stack==1)
{
top1++;
cout<<"Masukkan data ke stack 1 : ";
cin>>nilai[top1];
stack++;
}
else if (stack==2)
{
top2--;
cout<<"Masukkan data ke stack 2 : ";
cin>>nilai[top2];
stack--;
}
}
getch();
goto home;
break;
case 2:
if (pop==1)
{
if(isempty1()==true)
{
cout<<"Stack 1 kosong !";
}
else
{
cout<<"Nilai yang keluar dari stack 1 : "<<nilai[top1];
top1--;
pop++;
}
}
else if (pop==2)
{
if(isempty2()==true)
{
cout<<"Stack 2 kosong !";
}
else
{
cout<<"Nilai yang keluar dari stack 2 : "<<nilai[top2];
top2++;
pop--;
}
}
getch();
goto home;
break;
case 3:
if(isempty1()==true)
{
cout<<"Stack 1 kosong !";
}
else
{
cout<<"Data pada stack : ";
for(int i=0; i<=top1; i++)
{
cout<<nilai[i]<<" ";
}
for (int i=(top1+1); i<=(top2-1); i++)
{
cout<<" _ ";
}
}
if(isempty2()==true)
{
cout<<"Stack 2 kosong !";
}
else
{
for(int i=4; i>=top2; i--)
{
cout<<nilai[i]<<" ";
}
}
getch();
goto home;
break;
case 4:
top1=-1;
top2=5;
cout<<"Stack sudah kosong !";
getch();
goto home;
break;
}
getch();
}
#include <conio.h>
int nilai [5];
int top1, top2, menu, stack, pop;
void create()
{
top1=-1;
top2=5;
stack=1;
pop=1;
}
bool isfull()
{
if(top2-top1==1)
{
return true;
}
else
{
return false;
}
}
bool isempty1()
{
if(top1==-1)
{
return true;
}
else
{
return false;
}
}
bool isempty2()
{
if(top2==5)
{
return true;
}
else
{
return false;
}
}
void main()
{
create();
home:
clrscr();
cout<<"1. Push"<<endl;
cout<<"2. Pop"<<endl;
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
cout<<"Masukkan pilihan anda (1-4) : ";
cin>>menu;
switch(menu)
{
case 1:
if(isfull()==true)
{
cout<<"Stack Penuh !";
}
else
{
if (stack==1)
{
top1++;
cout<<"Masukkan data ke stack 1 : ";
cin>>nilai[top1];
stack++;
}
else if (stack==2)
{
top2--;
cout<<"Masukkan data ke stack 2 : ";
cin>>nilai[top2];
stack--;
}
}
getch();
goto home;
break;
case 2:
if (pop==1)
{
if(isempty1()==true)
{
cout<<"Stack 1 kosong !";
}
else
{
cout<<"Nilai yang keluar dari stack 1 : "<<nilai[top1];
top1--;
pop++;
}
}
else if (pop==2)
{
if(isempty2()==true)
{
cout<<"Stack 2 kosong !";
}
else
{
cout<<"Nilai yang keluar dari stack 2 : "<<nilai[top2];
top2++;
pop--;
}
}
getch();
goto home;
break;
case 3:
if(isempty1()==true)
{
cout<<"Stack 1 kosong !";
}
else
{
cout<<"Data pada stack : ";
for(int i=0; i<=top1; i++)
{
cout<<nilai[i]<<" ";
}
for (int i=(top1+1); i<=(top2-1); i++)
{
cout<<" _ ";
}
}
if(isempty2()==true)
{
cout<<"Stack 2 kosong !";
}
else
{
for(int i=4; i>=top2; i--)
{
cout<<nilai[i]<<" ";
}
}
getch();
goto home;
break;
case 4:
top1=-1;
top2=5;
cout<<"Stack sudah kosong !";
getch();
goto home;
break;
}
getch();
}
DAFTAR PUSTAKA
Buku
1. Esakov, Jeffrey, Tom Weiss, Data Structures An Advanced Approach Using C,
Prentice-Hall, Inc. 1989
2. Hariyanto, Bambang, Struktur Data, Informatika Bandung, Pebruari 2000
3. Kadir, Abdul, Pemrograman Dasar Turbo C, Andi Offset, Yogyakarta, 1991
4. Kruse, Robert L. Data Structures & Program Design, Prentice-Hall, Inc. 1987
5. Standish, Thomas A. Data Structures, Algorithms & Software Principles In C,
Addison Wesley, 1995
Komentar
Posting Komentar