1樓:
你說的是中綴表示式直接求值吧用2個棧,乙個叫符號棧,乙個叫數字棧,分別存運算子和數字。給每個符號乙個優先順序,+,的優先順序為1,*,的優先順序為2,越先做的符號優先順序越大。碰到數字直接進數字棧,碰到符號的話和符號棧的棧頂比一下,如果優先順序小於等於符號棧的棧頂原素,就重複以下步驟:
直到符號棧的棧頂大於這個符號或者是棧空了,把新的符號壓棧。碰到左括號就無條件壓符號棧。碰到右括號就不斷地腿符號棧,按照剛才的規則做,每次取符號棧站定和2個數字,並將數字顛倒,進行運算並壓棧,直到棧頂是(為止,最後將棧頂的(取出。
碰到等號則和上面做法一樣,每次取符號棧站定和2個數字,並將數字顛倒,進行運算並壓棧直到整個符號棧空位置。最後要的結果就是數字棧的棧頂。。。如果有中括號的話稍微麻煩點,可以給括號也編上優先順序,方法幾乎和只有小括號的一樣。
如果有問題可以問我,**不長,100多行吧。。。
2樓:索羅風
你可能沒明白棧是什麼東西吧。
棧是一種先進後出的資料結構,比如進棧順序是 1, 2, 3 ,那必須後進來的 3出去了,2才能出去,1才能出去。
具體的棧用什麼方式怎麼實現,就是你自己考慮的了。
陣列可以用來實現棧的功能,根據棧最大可能的資料,可以申請乙個相應的陣列。
當然棧也可能由其他結構來實現,比如連結串列。
如果你直接申請乙個棧大小為100,而且採用陣列實現,兩個空間應該是一樣的。頂多就是棧實現時會有一些其他變數影響,影響不大。
如果你的棧是用連結串列實現,因為會儲存一些節點關係資訊,會比直接用陣列多一些空間。
為什麼棧中的資料只有出棧的可能,而無入棧的可能呢?
3樓:文學小百靈
入棧的順序規律是排在前面的先進,排在後面的後進。
棧中的資料只有一種方式出棧,核野即先進後出,所以出棧的可能數目跟入棧的可能排列數目是一致的。a的出入有2中可能,b的出入有2種可能,c的出入有2種可能,d只需要關係入,只有一咐友種可能。所以可能的出棧方式數為2*2*2*1=8種。
入棧順序:a、b、c、d。出棧順序可以是:
d、c、b、a;a、b、c、d;b、a、c、d很多,但要把棧想像成乙個沒蓋子的紙箱,取出東西時只能從最上層取,放進東西也只能放在最上層,所以棧是一改簡喊個「後進先出」或「先進後出」的順序儲存結構。
棧又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。
向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
關於棧的問題
4樓:網友
第乙個問題,你最好再定義乙個重新設定stack長度的成員函式,比如templatevoid stack::setsize(int l)這樣你就可以在stack被動態初始化後再定義它的長度。
第二個問題,你是不是沒有把elements的預設值設為0?items=new stack[length];呼叫的是stack的預設建構函式,如果你沒有在這裡把elements指向0,那麼當呼叫解構函式的時候就會出問題。而你去掉任意乙個解構函式都會導致stack裡的動態陣列不被釋放,所以沒事。
這樣設定預設建構函式:
templatestack::stack()這樣就應該可以了。請參考。
5樓:
因為其他都是可能的,^_不過,的確就是這樣的!
棧的運算 求詳細解釋 謝謝啦
6樓:網友
選是在c之前入棧的,而出棧時c應該先出棧,所以c被排除了。a是不可能的,因為我已經abcd入棧了,出棧不可能是中d在a後面進棧,卻在d前出棧,所以只能選b
關於棧的各種定**釋
7樓:網友
1全部棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。
棧也稱為後進先出表。
棧的基本運算:(1) 入棧運算,在棧頂位置插入元素;(2) 退棧運算,刪除元素 例題:棧底至棧
8樓:網友
答案選d.原因在於,棧中的元素只能一一接著彈出,因此,abcd相對順序應該是dcba,有且僅有d可選。
求解答,關於一康公司的問題!!!
您好,很抱歉現在才回復。首先,你有必要過來面試一次的。因為無論我怎麼說,都還是眼見為實的好 來了之後,你至少會贊同 公司環境不錯 這一點。其次,要根據你個人實際情況來看。簡而言之,就是要自問一遍 專業牛逼否,有經驗否 如果自己還不是很牛逼,那為什麼不來呢?至於福利待遇這一塊,我在另乙個問題中有,這裡...
有關視力問題,急急求解答,謝謝
左眼近視400度,右眼近視415度,您的度數屬於中等度近視了。由於經常熬夜上網用眼過度,可以引起視力疲勞,同時還可以使近視的度數加重。鑑於您現在是晚上的時候,看東西老感覺隔著層東西,您還是1.注意用眼衛生,也就是注意休息不要熬夜。2 做做眼保健操 3 服用多種維生素。4 多吃蔬菜水果。如果這樣做了還...
關於C語言中棧的問題
可以參考這個 include include include int errorflag typedef structstack int isnumeric char s 判斷 是不是數字 int empty stack s 判斷stack是不是為空 void init stack s 初始化 st...