1、假設以i和o表示入棧和出棧操作,棧的初態和終態均為空,入棧和出棧的操作序列可表示為僅由i和o組成的序列,可以操作的序列為合法序列,否則為非法序列,寫出乙個演算法,判定所給的操作序列是否合法,如果合法,返回true,非法返回false
bool empty_stack
(seqstack &l)
bool full_stack
(seqstack &l)
bool push_stack
(seqstack &l,
char
&x)bool pop_stack
(seqstack &l,
char
&x)bool judgeseqstack
(seqstack &l,string a)
return
true
;}
比較常規,寫出出入棧演算法,結合起來判斷即可。
4、設單鏈表的表頭指標為l,結點結構由data和next兩個域組成,data為字元型,設計演算法判斷鍊錶的全部字元是否中心對稱,例如xyx對稱。
typedef struct lnodelnode,
*linklist;
typedef struct seqstackseqstack;
bool symmetrical (linklist &l)
s=l-
>next;
char x=
'1';
bool aa=
true
;while
(q.top!=-1
)return
true
;}
演算法比較簡單,就是先給出乙個單鏈表,把裡面的元素全部入棧,然後乙個個出棧,挨個和鍊錶元素比較是否相等,如果有乙個不相等就直接false,一直都相等就一直true。
3、共享棧的實現
typedef struct share_stackshare_stack;
void
sharestack_inital
(share_stack &l)
bool sharestack_empty
(share_stack &l)
bool sharestack_full
(share_stack &l)
bool sharestack_push1
(share_stack &l,elemtype &x)
bool sharestack_push2
(share_stack &l,elemtype &x)
bool sharestack_pop1
(share_stack &l,elemtype &x)
bool sharestack_pop2
(share_stack &l,elemtype &x)
共享棧棧空條件:棧底為-1或者maxsize,棧滿條件,左棧頂加一等於右棧頂,上面做法的判空最好不要寫一起,棧空分開寫,不過有點麻煩。 棧和佇列習題
public class mystack 出棧操作 public integer pop 通過下標找到當前的棧頂元素 int ret elem size 1 size return ret 取棧頂元素 public integer peek return elem size 1 2 用單鏈表實現棧 ...
棧和佇列習題二
目錄 一 實現乙個棧,要求實現push 入棧 pop 出棧 min 返回最小值 的時間複雜度為o 1 二 元素出棧 入棧順序的合法性。如入棧的序列 1,2,3,4,5 出棧序列為 4,5,3,2,1 三 乙個陣列實現兩個棧 共享棧 注 以上三個題的完整 至 github 檢視 1 定義 思路 使用兩...
棧與佇列 常見習題總結(下)
4.模擬計算器 實現四則運算 1 中綴表示式轉字尾表示式 轉換規則 從左到右遍歷中綴表示式的每乙個數字和符號,若是數字,直接輸出成為字尾表示式的一部分,若是運算符號,首先判斷其與棧頂元素的優先順序,如果是右括號或是優先順序高於棧頂元素 乘除優於加減 的符號,直接入棧,否則,則將棧頂元素依次出棧並輸出...