SEDIKIT PENGANTAR
STACK
Stack disebut juga tumpukan dimana data hanya dapat dimasukkan dan diambil dari satusisi. Karena itu, stack bersifat LIFO (Last In First Out). Artinya data yang terakhir masuk akan keluar lebih dulu.
QUEUE
Queue disebut juga antrian dimana data akan masuk dari satu sisi dan keluar di sisi yang lain.Karena itu, queue bersifat FIFO (First In First Out). Artinya data yang pertama kali masuk akan keluar lebih dulu.
Tugas 1
Membuat program STACK dengan ketentuan:
a. Memiliki fungsi PUSH (input data).
b. Memiliki fungsi POP (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).
Code :
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define max_stak 15
struct stak{
int top,data[15],urut[15];
}tumpuk;
void push(int d){
tumpuk.top++;
tumpuk.data[tumpuk.top]=d;
cout<<"Data berhasil dimasukkan \n";
getch();
}
void pop(){
cout<<"Data "<<tumpuk.data[tumpuk.top]<<" terambil \n";
tumpuk.top--;
getch();
}
int isFull(){
if(tumpuk.top==max_stak-1){
return 1;
}
else{
return 0;
}
}
int isEmpty(){
if(tumpuk.top==-1){
return 1;
}
else{
return 0;
}
}
void clear(){
tumpuk.top=-1;
cout<<"Semua data terhapus. ";
}
void tukar(int a,int b)
{
int t;
t=tumpuk.urut[b];
tumpuk.urut[b]=tumpuk.urut[a];
tumpuk.urut[a]=t;
}
void print(){
for(int i=0;i<=tumpuk.top;i++){
tumpuk.urut[i]=tumpuk.data[i];
}
for(int i=0;i<=tumpuk.top;i++){
for(int j=i+1;j<=tumpuk.top;j++){//mencari data terkecil
if(tumpuk.urut[i]<tumpuk.urut[j]){
tukar(i,j);
}
}
}
for (int i=tumpuk.top;i>=0;i--)
cout<<tumpuk.urut[i]<<endl;
getch();
}
int main()
{
int a;
int input;
tumpuk.top=-1;
do{
system("cls");
cout<<" Menu Stack \n================================== \n1. PUSH (Input Data) \n2. POP (Ambil satu data) \n3. CLEAR (Hapus semua data) \n4. PRINT (Cetak data pada layar) \n5. TERMINATE (Keluar) \nPilihan anda : ";
cin>>a;
cout<<"----------------------------------\n";
switch(a)
{
case 1:
if(isFull()==1){
cout<<"Stack penuh. \n";
getch();
}
else{
cout<<"Masukkan data : ";
//fflush(stdin);
cin>>input;
push(input);
}
break;
case 2:
if(isEmpty()==1){
cout<<"Stack kosong.";
getch();
}
else{
pop();
}
break;
case 3:
clear();
cout<<"Stack kosong. \n";
getch();
break;
case 4:
if(isEmpty()==1){
cout<<"Stack kosong";
getch();
}
else{
print();
}
}
}while(a!=5);
}
Hasil :
Tugas 2
Buatlah program untuk mengkonversi inputan infix menjadi postfix,
program tersebut akan menghasilkan output berupa hasil konversi ke postfix
Code :
#include <iostream>
#include <sstream>
#include <stack>
#include <limits>
#include <string>
#include <conio.h>
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;
}
bool isOperator(char ch)
{
if (ch=='+' || ch=='-' || ch=='*' || ch=='/')
return true;
else
return false;
}
int main() {
string infix;
cout<<"\t INFIX to 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() && priority(opr_stack.top())<=priority(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;
}
Hasil :
makasih min
ReplyDeletepower supply hp