逆序輸出
輸出的次序和處理次序相反,而且遞迴的深度不容易預知。比如進製轉換,括號匹配
//進製轉換
void
convert
(stack<
char
>
&s,int n,
int base)
;while
(n >0)
}
括號匹配
//括號匹配
bool
paren
(vector<
char
>
& v)
elseif(
!s.empty()
)else
}return s.
empty()
;}
括號匹配,看似不需要使用棧,儲存遇到( +1,遇到右括號-1,看最後的數值是否為0即可,但是這樣的話,如果加入多種括號就無法匹配
遞推巢狀
具有相似性的問題可以遞迴,但是分支和巢狀深度不確定。比如棧混洗(乙個序列是否為另一棧的出棧的序列)
bool
ispermutaionseq1
(stack<
int>
& ori, stack<
int>
& seq)
while
(!ori.
empty()
)if(s.top()
== tem.
top())
cout << endl;
}while
(!s.
empty()
&& s.
top(
)== seq.
top())
return s.
empty()
;}
延遲緩衝
在預讀取足夠長以後才能處理字首 比如四則運算計算。
主體思想是,將操作符和元素分開棧存放
棧式計算
rpn 逆波蘭表示式
這比上述四則運算簡單,直接使用乙個棧,元素和符號都存入棧後遇到乙個操作符計算,然**棧就可以了。
逆波蘭式的轉換也藏在上面四則的求值演算法中。
資料結構與演算法(4) 棧的應用
include include include using namespace std bool matchbrackets char pstr else if pstr i pstr i pstr i else s.top else if s.empty else int main char pt...
資料結構 棧與棧的應用
棧是非常重要的線性資料結構之一,其中一端為棧頂,加入元素和取出元素全部在棧頂端進行,滿足lifo last in first out,後進先出 的性質。考慮這樣乙個問題 您需要寫一種資料結構,維護一系列數,初始為空。定義其中一端為頂,另一端為底,要求提供三種操作 1 格式 111x xx,表示在最頂...
資料結構與演算法筆記 棧及棧的應用
目錄前言 一 棧的結構 二 基本操作 三 棧的應用 1.棧模擬 1 出棧序列判斷 2 表示式求值 luogu p1175 3 判斷括號是否匹配 luogu p739 2.凸包 凸殼 luogu p5155 3.遞迴 4.單調棧 總結 前言 棧 stack 是一種後進先出 lifo,last in f...