logo

Infix'i Postfix notasyonuna dönüştürün

İnfix notasyonundan postfix notasyonuna dönüşümü anlamadan önce infix ve postfix notasyonlarını ayrı ayrı bilmemiz gerekiyor.

Bir infix ve postfix ifadelerdir. Bir ifade sabitlerden, değişkenlerden ve sembollerden oluşur. Semboller operatör veya parantez olabilir. Tüm bu ifadelerin bir kurallar dizisi kullanılarak değerlendirilebilmesi için tüm bu bileşenlerin bir dizi kurala göre düzenlenmesi gerekir.

İfade örnekleri şunlardır:

5 + 6

A - B

dize tarihini dönüştür

(P*5)

Yukarıdaki ifadelerin tümü ortak bir yapıya sahiptir; yani iki işlenen arasında bir operatörümüz vardır. İşlenen, üzerinde işlemin gerçekleştirileceği bir nesne veya değerdir. Yukarıdaki ifadelerde 5, 6 işlenenler, '+', '-' ve '*' ise operatörlerdir.

Infix notasyonu nedir?

Operatör işlenenlerin arasına yazıldığında buna şu ad verilir: ek gösterimi . İşlenenin her zaman sabit veya değişken olması gerekmez; kendisi de bir ifade olabilir.

Örneğin,

(p + q) * (r + s)

Yukarıdaki ifadede çarpma operatörünün her iki ifadesi de işlenenlerdir, yani, (p + q) , Ve (r + s) işlenenlerdir.

Yukarıdaki ifadede üç operatör bulunmaktadır. Birinci artı operatörünün işlenenleri p ve q, ikinci artı operatörünün işlenenleri ise r ve s'dir. İşlemi gerçekleştirirken İfade üzerindeki işlemlerde sonucu değerlendirmek için bazı kurallara uymamız gerekir. İçinde Yukarıdaki ifadede p+q ve r+s olmak üzere iki ifade üzerinde toplama işlemi yapılacak ve ardından çarpma işlemi gerçekleştirilecektir.

Infix gösteriminin sözdizimi aşağıda verilmiştir:

İfadede tek operatör varsa herhangi bir kural uygulamamıza gerek yoktur. Örneğin 5+2; bu ifadede iki işlenen (5 ve 2) arasında toplama işlemi yapılabilir ve işlemin sonucu 7 olur.

İfadede birden fazla operatör varsa, ifadeyi değerlendirmek için bazı kurallara uyulması gerekir.

Eğer ifade şuysa:

dizi vs arraylist

4+6*2

Önce artı operatörü değerlendirilirse ifade şöyle görünecektir:

10 * 2 = 20

Önce çarpma operatörü değerlendirilirse ifade şu şekilde görünecektir:

4 + 12 = 16

java ile karşılaştırıldığında tamsayı

Yukarıdaki sorun operatör öncelik kuralları takip edilerek çözülebilir. Cebirsel ifadede operatörün öncelik sırası aşağıdaki tabloda verilmiştir:

Operatörler Semboller
Parantez ( ), {}, [ ]
Üslü sayılar ^
Çarpma ve bölme *, /
Toplama ve çıkarma + , -

İlk tercih parantez içine verilir; daha sonra bir sonraki tercih üslere verilir. Birden fazla üslü operatör olması durumunda işlem sağdan sola doğru uygulanacaktır.

Örneğin:

2^2^3 = 2^8

= 256

Üslü ifadeden sonra çarpma ve bölme operatörleri değerlendirilir. İfadede her iki operatör de mevcutsa işlem soldan sağa doğru uygulanacaktır.

Bir sonraki tercih toplama ve çıkarmaya verilir. İfadede her iki operatör de mevcutsa soldan sağa gideriz.

Aynı önceliğe sahip operatörler operatör ilişkiselliği . Soldan sağa gidersek buna sol çağrışımlı denir. Sağdan sola gidersek buna sağ çağrışımlı denir.

Ek gösterimiyle ilgili sorun

Infix ifadesini değerlendirmek için şunu bilmemiz gerekir: Operatör Önceliği kurallar ve eğer operatörler aynı önceliğe sahipse, o zaman şu kurallara uymalıyız: çağrışımsallık tüzük. İşlemin gerçekleştirileceği sırayı kontrol etmek için infix notasyonunda parantez kullanımı oldukça önemlidir. Parantez, ifadenin okunabilirliğini artırır. Bir infix ifadesi, ifade yazmanın en yaygın yoludur, ancak infix ifadesini belirsizlik olmadan ayrıştırmak ve değerlendirmek kolay değildir. Böylece matematikçiler ve mantıkçılar bu problemi incelediler ve ifadeleri yazmanın önek ve sonek olmak üzere iki yolunu keşfettiler. Her iki ifade de herhangi bir parantez gerektirmez ve belirsizlik olmadan ayrıştırılabilir. Operatör önceliği ve ilişkisellik kurallarına ihtiyaç duymaz.

Postfix İfadesi

Postfix ifadesi, operatörün işlenenlerden sonra yazıldığı bir ifadedir. Örneğin iç ek gösteriminin ( 2+3) son ek ifadesi 23+ olarak yazılabilir.

tarihformat.format

Postfix ifadesine ilişkin bazı önemli noktalar şunlardır:

  • Postfix ifadesinde işlemler soldan sağa doğru yazıldığı sıraya göre gerçekleştirilir.
  • Herhangi bir parantez gerektirmez.
  • Operatör öncelik kurallarını ve ilişkilendirilebilirlik kurallarını uygulamamıza gerek yok.

Postfix ifadesini değerlendirme algoritması

  • Herhangi bir operatörle karşılaşıncaya kadar ifadeyi soldan sağa tarayın.
  • İşlemi gerçekleştir
  • İfadeyi hesaplanan değeriyle değiştirin.
  • Başka operatör kalmayıncaya kadar 1'den 3'e kadar olan adımları tekrarlayın.

Yukarıdaki algoritmayı bir örnek üzerinden anlayalım.

Ek ifadesi: 2 + 3 * 4

İfadenin çoğunu soldan taramaya başlayacağız. Çarpma operatörü soldan sağa doğru tarama yaparken ilk çıkan operatördür. Şimdi ifade şu şekilde olacaktır:

İfade = 2 + 34*

= 2 + 12

Yine soldan sağa doğru tarayacağız ve ifade şu şekilde olacaktır:

İfade = 2 12 +

= 14

Postfix ifadesinin stack kullanılarak değerlendirilmesi.

  • İfadeyi soldan sağa tarayın.
  • İfadede herhangi bir işlenenle karşılaşırsak işleneni yığına iteriz.
  • İfadede herhangi bir operatörle karşılaştığımızda, ilgili işlenenleri yığından çıkarırız.
  • İfadenin taranmasını bitirdiğimizde son değer yığında kalır.

Stack kullanarak postfix ifadesinin değerlendirilmesini anlayalım.

Örnek 1: Sonek ifadesi: 2 3 4 * +

Giriş Yığın
2 3 4 * + boş 2'ye bas
3 4 * + 2 3'e bas
4*+ 3 2 4'e bas
* + 4 3 2 4 ve 3'ü açın ve 4*3 = 12 işlemini gerçekleştirin. 12'yi yığının içine itin.
+ 12 2 Yığından 12 ve 2'yi açın ve 12+2 = 14 işlemini gerçekleştirin. 14'ü yığının içine itin.

Yukarıdaki ifadenin sonucu 14'tür.

Örnek 2: Sonek ifadesi: 3 4 * 2 5 * +

Giriş Yığın
3 4 * 2 5 * + boş 3'e bas
4*2 5*+ 3 4'e bas
*2 5 * + 4 3 Yığından 3 ve 4'ü açın ve 3*4 = 12 işlemini gerçekleştirin. 12'yi yığının içine itin.
2 5 * + 12 2'ye bas
5*+ 2 12 5'e bas
*+ 5 2 12 Yığından 5 ve 2'yi açın ve 5*2 = 10 işlemini gerçekleştirin. 10'u yığının içine itin.
+ 10 12 Yığından 10 ve 12'yi açın ve 10+12 = 22 işlemini gerçekleştirin. 22'yi yığının içine itin.

Yukarıdaki ifadenin sonucu 22'dir.

ücretsiz vs ücretsiz

Postfix ifadesini değerlendirme algoritması

  1. Bir karakteri oku
  2. Karakter bir rakamsa, karakteri int'ye dönüştürün ve tamsayıyı yığına itin.
  3. Karakter bir operatör ise,
    • İki işlenen elde etmek için öğeleri yığından iki kez çıkarın.
    • İşlemi gerçekleştir
    • Sonucu yığına itin.

Infix'in postfix'e dönüştürülmesi

Burada infix ifadesinin önek ifadesine dönüştürülmesi için yığın veri yapısını kullanacağız. Ne zaman bir operatörle karşılaşsak, operatörü yığının içine iteriz. Bir işlenenle karşılaşırsak işleneni ifadeye ekleriz.

Infix'ten postfix ifadesine dönüştürme kuralları

  1. İşleneni geldiklerinde yazdırın.
  2. Yığın boşsa veya üstte sol parantez varsa, gelen operatörü yığının üzerine itin.
  3. Gelen sembol '(' ise onu yığına itin.
  4. Gelen sembol ')' ise yığını açın ve sol parantez bulunana kadar operatörleri yazdırın.
  5. Gelen sembolün yığının en üstünden daha yüksek önceliği varsa onu yığının üzerine itin.
  6. Gelen sembolün önceliği yığının en üstünden daha düşükse, yığının üstünü açın ve yazdırın. Daha sonra gelen operatörü yığının yeni tepesine göre test edin.
  7. Gelen operatör yığının en üstündeki operatörle aynı önceliğe sahipse ilişkisellik kurallarını kullanın. İlişkilendirme soldan sağa ise yığının üst kısmını açın ve yazdırın, ardından gelen operatörü itin. İlişkilendirme sağdan sola ise gelen operatörü itin.
  8. İfadenin sonunda yığının tüm operatörlerini açın ve yazdırın.

Bir örnek üzerinden anlayalım.

Ek ifadesi: K + L - M*N + (O^P) * W/U/V * T + Q

Giriş İfadesi Yığın Postfix İfadesi
k k
+ +
L + KL
- - KL+
M - K L+ M
* - * K L+ M
N - * K L + M N
+ + K L + M N*
K L + M N* -
( + ( K L + M N *-
Ö + ( K L + M N * - O
^ + (^ K L + M N* - O
P + (^ K L + M N* - O P
) + K L + M N* - O P ^
* + * K L + M N* - O P ^
İÇİNDE + * K L + M N* - O P ^ W
/ + / K L + M N* - O P ^ W *
İÇİNDE + / K L + M N* - O P ^W*U
/ + / K L + M N* - O P ^W*U/
İÇİNDE + / KL + PZT*-YUKARI^W*U/F
* + * KL+MON*-UP^W*U/F/
T + * KL+MN*-UP^W*U/F/T
+ + PZT+PZT*-UP^W*U/F/T*
KL+MN*-UP^W*U/F/T*+
Q + KL+MN*-OP^W*U/V/T*Q
KL+MN*-OP^W*U/V/T*+Q+

İç ek ifadesinin son son ek ifadesi (K + L - M*N + (O^P) * W/U/V * T + Q) KL+MN*-OP^W*U/V/T*+Q+ şeklindedir .