棧與佇列習題選做

2021-10-06 07:25:36 字數 1568 閱讀 2985

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 中綴表示式轉字尾表示式 轉換規則 從左到右遍歷中綴表示式的每乙個數字和符號,若是數字,直接輸出成為字尾表示式的一部分,若是運算符號,首先判斷其與棧頂元素的優先順序,如果是右括號或是優先順序高於棧頂元素 乘除優於加減 的符號,直接入棧,否則,則將棧頂元素依次出棧並輸出...