關於中綴轉字尾的詳細說明

2021-08-29 14:10:55 字數 1152 閱讀 1507

我們還是不要考慮符號的問題,遇到數字直接往列表裡加就好了。

我們通過比較兩個符號優先順序來確定該符號應不應該從棧中彈出,換句話說就是我們考慮的就是以怎麼樣的方式從棧中彈出符號。

這樣的話,我們首先棧裡要有元素對吧,然後我們通過比較優先順序它與接下來符號的優先順序來確定要不要從棧中彈出這個符號。

我們首先確定一下優先順序:

priority =
然後是乙個中綴的例子:

infix = "5 + 4 * 3 / 2 - 1"
接下來是乙個儲存符號的棧:

s = stack()
乙個儲存字尾表示式的表

suffix =
通過這個例子來一步步說明這個轉換過程!

首先,遇到數字5,我們直接將他儲存到suffix的表裡

接下來就是第乙個運算子 +

由於我們比較的是棧中的運算子與它後面的符號的優先順序,棧中沒有運算子總不行吧,所以當棧是空的時候,我們就把乙個運算子壓進去。

if s.is_empty():

s.push(+)

# 這裡注意,只要棧是空的我們就必須壓乙個符號進去

現在來說一下為什麼就是最後乙個元素了!

通過上面的規則,只有一種可能棧中存在乙個以上的符號,那就是 棧中的唯一乙個符號的優先順序小於接下來乙個符號的優先順序,這樣棧中才能有多於乙個符號,仔細分析規則可知,棧中的符號也不可能多於兩個。

這樣我們來分析**:

symbols = '+-*/'

for i in line:

if i not in symbols:

elif s.is_empty():

s.push(i)

else:

while priority[i] <= priority[s.top()] and not s.is_empty():

s.push(i)

while not s.is_empty():

以上**,完全是使用思路想出來的,也就是偽**的實現。但沒有考慮括號,接下來我們考慮一下有括號的情況。

當我們乙個符號與乙個括號相連時,肯定是先算這個括號裡面,然後再是相連的符號。

關於Turtle的詳細說明

penup 提起畫筆,與pendown 配對使用 pendwon 放下畫筆 pensize width 設定畫筆線條的粗細為指定大小forward 沿著當前方向前進指定距離 backward 沿著當前相反方向後退指定距離 right angle 向右旋轉angle角度 left angle 向左旋轉...

關於set perm引數使用的詳細說明

set perm 語法 set perm 表示使用者名稱,表示使用者組名稱,表示許可權模式,表示檔案路徑,可以使多個,用空格隔開 作用 設定單個檔案或目錄的所有者和許可權,像linux中的chmod chown或chgrp命令一樣,只是集中在了乙個命令當中 舉例 set perm 0,2000,05...

date的詳細說明

用法 date 選項 格式 或 date u utc universal mmddhhmm cc yy ss 以給定的格式顯示當前時間,或是設定系統日期。d,date 字串 顯示指定字串所描述的時間,而非當前時間 f,file 日期檔案 類似 date,從日期檔案中按行讀入時間描述 r,refere...