Praktikum 5 - Queue dan Postfix, Infix

Nama : ARLIN
NIM   : E1E115006

1. Dengan mengembangkan code berikut, buatlah program STACK QUEUE dengan ketentuan:

    a. Memiliki fungsi ENQUEUE (input data)
    b. Memiliki fungsi DEQUEUE (ambil satu data)
    c. Memiliki fungsi CLEAR (delete all data)
    d. Memiliki fungsi PRINT (cetak data pada layar)
 
Source Code:

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#define max 15
using namespace std;

struct queue //menedefenisikan queue dengan struck
{
  int head;
  int tail;
  int data [15]; //daya tampung max 15 
};

queue antri;

void enqueue (int data) //deklarasi pengimputan data queue
{
   antri.head=0;
   antri.tail++;
   antri.data[antri.tail]=data;
   cout<<"data berhasil dimasukkan";
}

void dequeue() //pengambilan data pada queue
{
    cout<<"terambil = "<<antri.data[antri.head];
        for (int i=antri.head;i<=antri.tail;i++)
            (antri.data[i]=antri.data[i+1]);
            antri.tail--;
}

int isFull() //pengecekan data, apakah full atau tidak
{
  if (antri.tail==max-1)
    return 1;
  else
    return 0;
}

int isEmpty() //pengecakan data, apaka kosong atau tidak
{
  if (antri.tail==-1)
    return 1;
  else
    return 0;
}

void clear() //mebersihakan semua data pada queue
{
  antri.head=antri.tail=-1;
  cout<<"semua data terhapus.";
}

void print() //mencetak data yang ada pada queue
{
    int bil1,nilai;
    for(int bil=0;bil<=antri.tail;bil++)
     {
      nilai=antri.data[bil];
      bil1=bil-1;
       while(antri.data[bil1]==nilai && bil1==0)
    {
        antri.data[bil1+1]=antri.data[bil1];
        bil1--;
    }
     antri.data[bil1+1]=nilai;
     }
    for(int bil=0;bil<=antri.tail;bil++)
     {
      cout<<antri.data[bil];
      if(bil==antri.tail)
                cout<<" ";
            else
                cout<<" , ";
     }
}

int main()
{
  int a,nilai;
  char input[20];
  antri.head=antri.tail=-1;
  do
  { system("cls");
    cout<<"Menu :\n1.Enqueue\n2.Dequeue\n3.Clear\n4.Print\n5.Terminate\nPilihan : ";
    cin>>a;
    switch(a)
    {
      case 1:
        if(isFull()==1)
          cout<<"Queue Penuh.\n";
        else
        {
          cout<<"Masukkan data : ";
          cin>>nilai;
          fflush(stdin);
          enqueue(nilai);
        }
        break;

      case 2:
        if(isEmpty()==1)
        {
          cout<<"Queue Kosong";
        }
        else
        {
          dequeue();
        }
        break;

      case 3:
        clear();
        cout<<"Queue Kosong\n";
        break;

      case 4:
        if(isEmpty()==1)
          cout<<"Queue Kosong";
        else
          print();
    }
    getch();

  }
  while(a!=5);


}

Screnshoot Program:

1. proses pemasukan data


2. dmenampilkan data yang sudah di inputkan


3.data yang di dequeue


4.menampilkan data setelah di dequeue


5. data pada queue di hapus


6.tampilan program setelah data di hapus



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).

Source Code:

#include <iostream>
#include <sstream>
#include <stack>
#include <limits>
#include <string>
using namespace std;

int priority(char a) {
    int temp;
    if (a == '^')
        temp = 1;
    else if (a == '*' || a == '/')
        temp = 2;
    else if (a == '+' || a == '-')
        temp = 3;
    return temp;
}

int main() {
    string infix;
    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() && priority(opr_stack.top()) <= priority(infix[i])) {
            postfix << opr_stack.top();
            opr_stack.pop();
            }
        opr_stack.push(infix[i]);
        } else if (infix[i] == '(') {
            opr_stack.push(infix[i]);
        } else if (infix[i] == ')') {
            while (opr_stack.top() != '(') {
            postfix << opr_stack.top();
            opr_stack.pop();
            }
            opr_stack.pop();
        } else {
            postfix << infix[i];
        }
    }

    while (!opr_stack.empty()) {
        postfix << opr_stack.top();
        opr_stack.pop();
    }
    cout<<endl;

    cout << "Postfix : " << postfix.str() << endl;

    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    return 0;
}

Screnshoot Program:


TERIMA KASIH TELAH BERKUNJUNG




Komentar

Postingan populer dari blog ini

Tugas Struktur Data Praktikum 2