Infix Dönüşümünə əlavə edin

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Amazon Avalara Fanatics
Qalaq SimBaxılıb 37

Əvvəlcədən düzəlişə çevrilmə problemində prefiks qeydində ifadə verdik. İnfiks ifadəsinə çevirmək üçün bir proqram yazın.

Prefiks işarələr sistemi

Bu qeyddə operandlar operatordan sonra yazılır. Polşa Notası olaraq da bilinir.

Məsələn: + AB bir ön söz ifadəsidir.

Infix qeyd

Bu qeyddə operatorlar operandlar arasında yazılır. Ümumiyyətlə bir ifadə yazmağımıza bənzəyir.

Məsələn: A + B bir düzəliş ifadəsidir.

Infix Dönüşümünə əlavə edinPin

misal

Giriş: Önek: * -A / BC- / ADE

Çıxış: İnfiks: ((A- (B / C)) * ((A / D) -E))

Giriş: Prefiks: * F / GH

Çıxış: İnfiks: (F * (G / H))

İnfiksdən Konversiyaya Prefiks Alqoritmi

  1. Başlanğıc a sim prefiks ifadəsi ehtiva edir.
  2. Bir növ sətir yığını yaradın.
  3. Son simvoldan sətrin birincisinə keçin və cari simvolun operator olduğunu yoxlayın, iki üst simvolu yığından çıxarın və aralarında cari operator olan bir sətir kimi birləşdirin. Simli yenidən içəri itələyin qalaq.
  4. Cari simvol bir operator deyilsə, başqa bir halda yığında bir simli kimi itələyin.
  5. Yığının üst hissəsini qaytarın.

Həyata keçirilməsi

İnfiksdən Konversiyaya Prefiks üçün C ++ Proqramı

#include <iostream> 
#include <stack> 
using namespace std; 
  
bool isOperator(char x){ 
    switch(x){ 
      case '+': 
      case '-': 
      case '/': 
      case '*': 
        return true; 
    } 
  return false; 
} 
  
string prefixToInfix(string prefix_exp) { 
  stack<string> s; 
  
  int l = prefix_exp.size(); 
  
  for(int i = l-1; i >= 0; i--){ 
  
    if(isOperator(prefix_exp[i])){ 
  
      string op1 = s.top();   
      s.pop(); 
      string op2 = s.top();   
      s.pop(); 
  
      string temp = "(" + op1 + prefix_exp[i] + op2 + ")"; 
  
      s.push(temp); 
    } 
  
    else{ 
      s.push(string(1, prefix_exp[i])); 
    } 
  } 
  
  return s.top(); 
} 
  
int main(){ 
  string prefix_exp = "*-A/BC-/ADE"; 

  cout<<"Infix : "<<prefixToInfix(prefix_exp); 
  
  return 0; 
}
Infix : ((A-(B/C))*((A/D)-E))

Prefiksdən İnfeksə Dönüşmə üçün Java Proqramı

import java.util.*;

class Prefix{
    
    static boolean isOperator(char x){ 
        switch(x){ 
          case '+': 
          case '-': 
          case '/': 
          case '*': 
            return true; 
        } 
      return false; 
    } 
      
    static String prefixToInfix(String prefix_exp) { 
      Stack<String> s= new Stack<String>();
      
      int l = prefix_exp.length(); 
      
      for(int i = l-1; i >= 0; i--){ 
      
        if(isOperator(prefix_exp.charAt(i))){ 
      
          String op1 = s.peek();   
          s.pop(); 
          String op2 = s.peek();   
          s.pop(); 
      
          String temp = "(" + op1 + prefix_exp.charAt(i) + op2 + ")"; 
      
          s.push(temp); 
        } 
      
        else{ 
          s.push(prefix_exp.charAt(i)+""); 
        } 
      } 
      
      return s.peek(); 
    } 
      
    public static void main (String[] args){
        
    String prefix_exp = "*-A/BC-/ADE"; 
    System.out.println("Infix : "+prefixToInfix(prefix_exp));
    
  }
}
Infix : ((A-(B/C))*((A/D)-E))

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi: O (n), burada n prefiks sətrinin uzunluğudur.

Kosmik Mürəkkəblik: Sətrin hər n simvolunu saxlamaq üçün yer istifadə etdikdə O (n).

References

Translate »