1、有5個元素,其入棧次序依次為a,b,c,d,e,在各種可能的出棧次序中,第乙個出棧元素為c且第二個出棧元素為d的出棧序列有哪幾個?
解析:第乙個元素為c說明在c出棧之前,棧中元素依次從棧底到棧頂為a,b,c,所以ab元素的出棧序列只能是b在a之前出棧這一種情況;
第二個出棧元素為d,說明c出棧後,d接著入棧,出棧;
綜合分析可得:
出棧的順序有種:cdeba,cdbea,cdbae
2、若元素的進棧序列為a,b,c,d,e,運用棧操作,能否得到棧序列b,c,a,e,d和d,b,a,c,e? 為什麼?
解析:棧的操作有個最大的特點:若當前出棧元素為m,則比m先入棧且還未出棧的元素,則只能按序出棧。
b,c,a,e,d:
b先出棧,則比a先入棧且還未出棧的只有a,a出棧暫無限制
c第二個出棧,則比c先入棧且還未出棧的只有b,b出棧暫無限制
a第三個出棧,則比a先入棧且還未出棧元素不存在,出棧暫無限制
e第二個出棧,則比e先入棧且還未出棧的只有d,d出棧暫無限制
d出棧。
同理分析dbace即可。
3、假設以i和o分別表示入找和出找操作 找的初態和終態均為空,入找和出找的操作序列可表示為僅由i和o組成的序列,可以操作的序列稱為合法序列,否則稱為非法序列。下面所示的序列中哪些是合法的?
a. ioiioioo b. iooioiio
c. iiioioio d. iiiooioo
解析:b中入棧一次,緊接著出棧兩次,錯誤。
c中入棧元素沒有全部出棧。
4、設單鏈表的表頭指標為l ,結點結構由 data和 next 兩個域構成,其中 data 域為字元型 試設計演算法判斷該鍊錶的全部 n個字元是否中心對稱 例如 xyx xyyx 都是中心對稱。
思路:若鍊錶的元素數量是奇數,則必然不是中心對稱;
若鍊錶的元素數量為偶數,將鍊錶前一半元素入棧,和後一半元素對比。
#include #includeusing namespace std;
typedef struct lnode
string data;
struct lnode *next;
}lnode, *linklist;
bool is_symmetry(linklist l,int n)
while (l->next!= null && mystack.top() == l->next->data)
if (l->next == null)
return true;
else
return false;
}int main()
你,總要埋頭去做一些事情,不是嗎 資料結構 棧應用
一 算術表示式的中綴表示 把運算子放在參與運算的兩個運算元中間的算術表示式稱為中綴表示式。例如 2 3 4 6 9 算術表示式中包含了算術運算子和算術量 常量 變數 函式 而運算子之間又存在著優先順序,不能簡單地進行從左到右運算,編譯程式在求值時,不能簡單從左到右運算,必須先算運算級別高的,再算運算...
資料結構 棧的應用
要求 首先將運算元棧opnd設為空棧,而將 作為運算子棧opter的棧底元素,這樣的目的是判斷表示式是否求值完畢 2 依次讀入表示式的每個字元,表示式須以 結尾,若是運算元則入棧opnd,若是運算子,則將此運算子c與opter的棧頂元素top比較優先順序後執行相應的操作,具體操作如下 i 若top的...
資料結構 棧的應用
棧是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,也叫做棧頂。對棧的操作有進棧和出棧,進棧也叫做插入,出棧也就是刪除最後插入的元素。因此棧也被稱作lifo 後進先出 表。棧通常有兩種實現方式,陣列實現和鍊錶實現。下面是棧的兩個小應用demo 字串逆序 由於棧後進先出的特性,所以棧可以用於...