a. Memiliki fungsi PUSH/ENQUEUE (input data)
b. Memiliki fungsi POP/DEQUEUE (ambil satu data)
c. Memiliki fungsi CLEAR (delete all data)
d. Memiliki fungsi PRINT (cetak data pada layar)
e. (opsional) jika user ingin menampilkan data yang diinputkan, maka data tersebut telah terurut secara ascending (menggunakan metode sorting yang sudah dipelajari di kelas) .
JAWAB;
A 1. Menggunakan struck_stack.
#include<iostream>
#include<conio.h>
using namespace std;
struct STACK
{
int data[5];
int atas;
};
STACK tumpuk;
int main ()
{
int pilihan,baru,i;
tumpuk.atas=-1;
do
{
cout<<"1.Push Data\n";
cout<<"2.Pop Data\n";
cout<<"3.Print Data\n";
cout<<"4.End Data\n";
cout<<"\nPilihan = ";cin>>pilihan;
switch(pilihan)
{
case 1:
{
if(tumpuk.atas==5-1)
{
cout<<"Tumpukan Penuh";
cout<<endl;
getch();
}
else
{
cout<<"Data yang akan di-push = ";cin>>baru;
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
}
cout<<"-------------------------------------\n";
break;
}
case 2:
{
if(tumpuk.atas==-1)
{
cout<<"Tumpukan Kosong";
cout<<endl;
getch();
}
else
{
cout<<"Data yang akan di-pop = "<<tumpuk.data[tumpuk.atas];
tumpuk.atas--;
cout<<endl;
getch();
}
cout<<"-------------------------------------\n";
break;
}
case 3:
{
if(tumpuk.atas==-1)
{
cout<<"Tumpukan Kosong";
cout<<endl;
getch();
}
else
{
cout<<"\nData pada stack saat ini adalah : \n";
for(int i=0; i<=tumpuk.atas; i++)
{
cout<<"Nilai ruang ke "<<i<<" : "<<tumpuk.data[i]<<endl;
}
cout<<endl;
getch();
}
cout<<"-------------------------------------\n";
break;
}
default:
cout<<"\nTidak ada dalam pilihan";
cout<<endl;
cout<<"-------------------------------------\n";
}
}
while(pilihan!=4);
getch();
}
Hasailnya;;;
2. metode struck_queue
#include<stdio.h>
#include<iostream>
#include<conio.h>
#define MAX 8
using namespace std;
typedef struct{
int data[MAX];
int head;
int tail;
}Queue;
Queue antrian;
void Create(){
antrian.head=antrian.tail=-1;
}
int IsEmpty(){
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsFull(){
if(antrian.tail==MAX-1)
return 1;
else
return 0;
}
void Enqueue(int data){
if(IsEmpty()==1){
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
cout<<" sudah dimasukan "<<antrian.data[antrian.tail];
} else
if(IsFull()==0){
antrian.tail++;
antrian.data[antrian.tail]=data;
antrian.data[antrian.tail];
}
}
int Dequeue(){
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head; i<=antrian.tail-1;i++){
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear(){
antrian.head=antrian.tail=-1;
cout<<"CLEAR";
}
void Tampil(){
if(IsEmpty()==0){
for(int i=antrian.head;i<=antrian.tail;i++){
cout<<antrian.data[i];
}
}else cout<<"data kosong!\n";
}
main(){
int pil;
int data;
Create();
do{
//clrscr();
cout<<"=============================="<<endl;
cout<<"\t\t\tPROGRAM QUEUE"<<endl;
cout<<"==============================\n\n"<<endl;
cout<<"1. ENQUEUE\n "<<endl;
cout<<"2. DEQUEUE\n "<<endl;
cout<<"3. TAMPIL\n "<<endl;
cout<<"4. CLEAR\n "<<endl;
cout<<"5. EXIT\n "<<endl;
cout<<" Masukan Pilihan : ";cin>>pil;
switch(pil){
case 1: //clrscr();
cout<<"Masukan Data : ";cin>>data;
Enqueue(data);
break;
case 2: //clrscr();
Dequeue();
break;
case 3: //clrscr();
Tampil();
break;
case 4: //clrscr();
Clear();
break;
case 5:
cout<<endl<<"\nTHANKS";
break;
}
getch();
}while(pil!=5);
return 0;
}
Hasilnya;;;;;
;
B. Buatlah program untuk mengkonversi inputan infix menjadi postfix, program tersebut akan menghasilkan output berupa hasil konversi ke postfix dan hasil perhitungannya. (inputan berupa angka).
jawab;;;
#include <iostream>
#include <string.h>
#include <ctype.h>
using namespace std;
const int MAX = 50 ;
class infix
{
private :
char target[MAX], stack[MAX] ;
char *s, *t ;
int top, l ;
public :
infix( ) ;
void setexpr ( char *str ) ;
void push ( char c ) ;
char pop( ) ;
void convert( ) ;
int priority ( char c ) ;
void show( ) ;
} ;
infix :: infix( )
{
top = -1 ;
strcpy ( target, "" ) ;
strcpy ( stack, "" ) ;
l = 0 ;
}
void infix :: setexpr ( char *str )
{
s = str ;
strrev ( s ) ;
l = strlen ( s ) ;
* ( target + l ) = '\0' ;
t = target + ( l - 1 ) ;
}
void infix :: push ( char c )
{
if ( top == MAX - 1 )
cout << "\nStack is full\n" ;
else
{
top++ ;
stack[top] = c ;
}
}
char infix :: pop( )
{
if ( top == -1 )
{
cout << "Stack is empty\n" ;
return -1 ;
}
else
{
char item = stack[top] ;
top-- ;
return item ;
}
}
void infix :: convert( )
{
char opr ;
while ( *s )
{
if ( *s == ' ' || *s == '\t' )
{
s++ ;
continue ;
}
if ( isdigit ( *s ) || isalpha ( *s ) )
{
while ( isdigit ( *s ) || isalpha ( *s ) )
{
*t = *s ;
s++ ;
t-- ;
}
}
if ( *s == ')' )
{
push ( *s ) ;
s++ ;
}
if ( *s == '*' || *s == '+' || *s == '/' ||
*s == '%' || *s == '-' || *s == '$' )
{
if ( top != -1 )
{
opr = pop( ) ;
while ( priority ( opr ) > priority ( *s ) )
{
*t = opr ;
t-- ;
opr = pop( ) ;
}
push ( opr ) ;
push ( *s ) ;
}
else
push ( *s ) ;
s++ ;
}
if ( *s == '(' )
{
opr = pop( ) ;
while ( ( opr ) != ')' )
{
*t = opr ;
t-- ;
opr = pop ( ) ;
}
s++ ;
}
}
while ( top != -1 )
{
opr = pop( ) ;
*t = opr ;
t-- ;
}
t++ ;
}
int infix :: priority ( char c )
{
if ( c == '$' )
return 3 ;
if ( c == '*' || c == '/' || c == '%' )
return 2 ;
else
{
if ( c == '+' || c == '-' )
return 1 ;
else
return 0 ;
}
}
void infix :: show( )
{
while ( *t )
{
cout << " " << *t ;
t++ ;
}
}
int main( )
{
char expr[MAX] ;
infix q ;
cout << "\nMasukan Sebuah Ekspresi infix : " ;
cin.getline ( expr, MAX ) ;
q.setexpr( expr ) ;
q.convert( ) ;
cout << "Hasil konversi kedalam notasi prefix adalah: " ;
q.show( ) ;
}
















