STACK & QUEUE
1. Membuat program QUEUE dengan ketentuan :
- Memiliki fungsi PUSH/ENQUEUE (input data)
- Memiliki fungsi POP/DEQUEUE (ambil satu data)
- Memiliki fungsi CLEAR (delete all data)
- Memiliki fungsi PRINT (cetak data pada layar)
- (opsional) jika user ingin menampilkan data yang diinputkan, maka data tersebut telah terurut secara ascending (menggunakan metode sorting yang sudah dipelajari di kelas)
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include <stdlib.h>
using namespace std;
struct queue
{
int data[5];
int head,tail;
};
queue antri;
int main()
{
int menu,baru,menu2,x[5],simpan,i,j,k ;
antri.tail=antri.head=-1;
do
{
system("cls");
cout<<"==================="<<endl;
cout<<"1. push"<<endl;
cout<<"2. pop"<<endl;
cout<<"3. clear"<<endl;
cout<<"4. print"<<endl;
cout<<"==================="<<endl;
cout<<"masukkan pilihan : ";
cin>>menu;
switch (menu)
{
case 1 :
if(antri.tail==5-1)
{
cout<<"queue is full";
getch();
}
else
{
cout<<"masukkan data : ";
cin>>baru;
antri.tail++;
antri.data[antri.tail]=baru;
}
break;
case 2 :
if(antri.tail==-1)
{
cout<<"queue is empty";
getch();
}
else
{
cout<<"data terambil = "<<antri.data[0]<<endl;
for(k=antri.head;k<=antri.tail-1;k++)
{
antri.data[k]=antri.data[k+1];
}
antri.tail--;
getch();
}
break;
case 3 :
{
antri.tail=antri.head=-1;
cout<<"queue di kosongkan";
getch();
}
break;
case 4 :
cout<<"==================="<<endl;
cout<<"Ingin sort apa? \n1.asc\n2.desc\n3.original\n";
cout<<"==================="<<endl;
cout<<"masukkan pilihan : ";cin>>menu2;
for(i=antri.tail; i>=0; i--)
{
x[i]=antri.data[i];
}
getch();
for(int a=0;a<5;a++)
{
simpan=x[a];
int b=a-1;
for(;x[b]>simpan && b>=0;b--)
{
x[b+1]=x[b];
}
x[b+1]=simpan;
}
if(antri.tail==-1)
{
cout<<"queue is empty";
getch();
}
else if(menu2==3)
{
cout<<"DATA - "<<endl;
for(i=antri.tail; i>=0; i--)
{
cout<<antri.data[i]<<ends;
}
getch();
}
else if(menu2==1)
{
cout<<"DATA - "<<endl;
for(i=0; i<=antri.tail; i++)
{
cout<<x[i]<<ends;
}
getch();
}
else if(menu2==2)
{
cout<<"DATA - "<<endl;
for(i=antri.tail; i>=0; i--)
{
cout<<x[i]<<ends;
}
getch();
}
break;
default :
cout<<"pilihan salah";
break;
}
}
while((menu>=1) && (menu<=4));
getch();
}
========================================================================2. Buatlah program untuk mengkonversi inputan infix menjadi postfix, program tersebut akan menghasilkan output berupa hasil konversi ke postfix dan hasil perhitungannya. (inputan berupa angka). Code program berikut dapat dijadikan sebagai referensi. (Code program ini dapat menghitung hasil operasi dari inputan postfix).
--------------------------------------------------------------------------
#include <iostream>
#include <sstream>
#include <stack>
#include <limits>
#include <string>
#include <conio.h>
using namespace std;
int utama(char a) {
int temp;
if (a == '^')
temp = 1;
else if (a == '*' || a == '/')
temp = 2;
else if (a == '+' || a == '-')
temp = 3;
return temp;
}
bool operan(char ch)
{
if (ch=='+' || ch=='-' || ch=='*' || ch=='/')
return true;
else
return false;
}
int main() {
string infix;
cout<<"===============================================================================\n";
cout<<"\t\t\tprogram infix <=> postfix\n";
cout<<"===============================================================================\n";
cout << "Masukan Infix : ";
getline(cin, infix);
stack<char> opr_stack;
stringstream postfix;
for (unsigned i = 0; i < infix.length(); i++) {
if (infix[i] == '+' || infix[i] == '-' || infix[i] == '*' || infix[i] == '/' || infix[i] == '^') {
while (!opr_stack.empty() && utama(opr_stack.top())<=utama(infix[i])) {
postfix << opr_stack.top();
opr_stack.pop();
}
opr_stack.push(infix[i]);
}
else {
postfix << infix[i];
}
}
while(!opr_stack.empty()) {
postfix << opr_stack.top();
opr_stack.pop();
}
cout << "Postfix \t: " << postfix.str() << endl;//cetak postfix
getch();
return 0;
}






0 komentar:
Posting Komentar