【C++】判斷順序棧出棧順序的合法性
阿新 • • 發佈:2019-01-04
//判斷順序棧出棧順序的合法性思想: //給定一個入棧的字串pushstr,再給定一個出棧的字串popstr,根據棧的特性,判斷該出棧順序是否合法 //1.先驗證兩個字串的長度是否相等,不等,則肯定不合法;相等,再進行步驟2. //2.(1)判斷pushstr與popstr當前所指向的字元的關係: // (2)當*pushstr != *popstr時,對*pushstr進行壓棧操作後,pushstr指標向後走,轉(1)操作。 // (3)當*pushstr == *popstr時,popstr指標向後走,驗證popstr的下一個字元是否合法(方法:當棧不為空且棧頂 // 元素與該字元相等時,說明合法,則執行出棧操作,popstr指標接著向後走,再驗證popstr的下一個字元是否合 // 法)。若不合法,則pushstr指標向後走,轉(1)操作。 #include<iostream> #include<stack> using namespace std; bool Is_Legle(stack<char>&s, const char *&pushstr, const char *&popstr) { if (strlen(pushstr) != strlen(popstr)) { return false; } while (*pushstr != '\0') { if (*pushstr != *popstr) { s.push(*pushstr); } else { popstr++; while (!s.empty() && s.top() == *popstr) { s.pop(); popstr++; } } pushstr++; } if (s.empty() && *popstr == '\0') { return true; } else { return false; } } int main() { stack<char>s; const char *src = "12345"; const char *dst = "24531"; if (Is_Legle(s, src, dst)) { cout << "出棧順序合法" << endl; } else { cout << "出棧順序不合法" << endl; } system("pause"); return 0; }