saban123

PROGRAM INFIX KE PREFIX

Dec 15th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.74 KB | None | 0 0
  1. import java.util.Scanner;
  2. class Node{
  3.     char kata1;
  4.     char kata2;
  5.     int der2;
  6.     Node depan1, belakang1;
  7.     Node depan2, belakang2;
  8.     Node(char kata){
  9.         kata1=kata;
  10.         kata2=kata;
  11.         if(kata2=='+' || kata2=='-'){
  12.             der2=1;
  13.         }
  14.         else if(kata2=='*' || kata2=='/'){
  15.             der2=2;
  16.         }
  17.         else if(kata2=='^'){
  18.             der2=3;
  19.         }
  20.         else
  21.             der2=0;
  22.     }
  23. }
  24.  
  25. class Prefix{
  26.     static Node top1, tail1; //stack pre
  27.     static Node top2, tail2; //stack opr
  28.     static int size1=0, size2=0;
  29.    
  30.     void pushPre(char data){ //menampung operand dulu
  31.         if(size1==0){
  32.             top1=tail1=new Node(data);
  33.         }
  34.         else{
  35.             Node tmp=top1;
  36.             tmp.depan1=new Node(data);
  37.             tmp=tmp.depan1;
  38.             tmp.belakang1=top1;
  39.             top1=tmp;
  40.         }
  41.         size1++;
  42.     }
  43.    
  44.     void pushOpr(char data){ //menampung operator
  45.         if(size2==0){
  46.             top2=tail2=new Node(data);
  47.         }
  48.         else{
  49.             Node tmp=top2;
  50.             tmp.depan2=new Node(data);
  51.             tmp=tmp.depan2;
  52.             tmp.belakang2=top2;
  53.             top2=tmp;
  54.         }
  55.         size2++;
  56.     }
  57.    
  58.     int derajat(char x){
  59.         if(x=='+' || x=='-'){
  60.             return 1;
  61.         }
  62.         else if(x=='*' || x=='/'){
  63.             return 2;
  64.         }
  65.         else if(x=='^'){
  66.             return 3;
  67.         }
  68.         else return 0;
  69.     }
  70.    
  71.     void tampil(){
  72.         Node tmp=top2;
  73.         System.out.print(" isi stack opr : ");
  74.         while(tmp!=null){
  75.             System.out.print(tmp.kata2);
  76.             tmp=tmp.belakang2;
  77.         }
  78.     }
  79.    
  80.     void popPre(){
  81.         System.out.print(top1.kata1);
  82.         if(size1>1){
  83.             top1=top1.belakang1;
  84.             top1.depan1=null;
  85.         }
  86.         else
  87.             top1=null;
  88.         size1--;
  89.     }
  90.    
  91.     void popOpr(){
  92.         if(size2>1){
  93.             top2=top2.belakang2;
  94.             top2.depan2=null;
  95.         }
  96.         else
  97.             top2=null;
  98.         size2--;
  99.     }
  100.    
  101.     public static void main(String[] args){
  102.         Scanner s=new Scanner(System.in);
  103.         Prefix p=new Prefix();
  104.         String infix;
  105.         char[] inf;
  106.         int der;
  107.         char bantu;
  108.         System.out.print(" MASUKKAN INFIX = ");
  109.         infix=s.nextLine();
  110.         inf=infix.toCharArray();
  111.         for(int a=inf.length-1; a>=0; a--){
  112.             if(inf[a]!='+' && inf[a]!='-' && inf[a]!='*' && inf[a]!='/' && inf[a]!='^' && inf[a]!='(' && inf[a]!=')' && inf[a]!=' '){
  113.                 p.pushPre(inf[a]);
  114.             }
  115.             else if(inf[a]==')'){
  116.                 p.pushOpr(inf[a]);
  117.             }
  118.            
  119.             else if(inf[a]=='('){
  120.                 while(top2.kata2!=')'){
  121.                     bantu=top2.kata2;
  122.                     p.pushPre(bantu);
  123.                     p.popOpr();
  124.                 }
  125.                 p.popOpr();
  126.             }
  127.             else{
  128.                 der=p.derajat(inf[a]);
  129.                 if(size2==0 || top2.der2==0){
  130.                     p.pushOpr(inf[a]);
  131.                 }
  132.                 else if(size2>0 && top2.der2>0){
  133.                     while(size2!=0 && top2.der2>der){
  134.                         bantu=top2.kata2;
  135.                         p.pushPre(bantu);
  136.                         p.popOpr();
  137.                     }
  138.                     p.pushOpr(inf[a]);
  139.                 }
  140.                 else if(top2.der2==der){
  141.                     p.pushOpr(inf[a]);
  142.                     }
  143.             }
  144.         }
  145.         while(size2>0){
  146.             bantu=top2.kata2;
  147.             p.pushPre(bantu);
  148.             p.popOpr();
  149.         }
  150.         System.out.print(" Prefix = ");
  151.         while(size1>0){
  152.             p.popPre();
  153.         }
  154.     }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment