问题:给定入栈序列,判定出栈序列是否合法 解法一:使用栈模拟出入的方式求解 /* * Given an input seqence IN and an output sequence OUT. If we * push all elements in seqence IN to an stack one by one, is * it possible that the sequence OUT is an instance of stack * output. * * Sijie YANG 2010 */ #include <stack> #include <iostream> #include <string.h> using namespace std; /* check the stack out seqence is valid or not * * Return value: * >0 : valid * =0 : invalid * <0 : error occured */ int check_valid (char in[], char out[], int num) { int i=0, j=0; stack<char> s; if (in==NULL || out==NULL || num <=0) return -1; for (i=0; i<num; i++) { s.push(in[i]); while (!s.empty() && s.top()==out[j]) { s.pop(); j++; } } if (s.empty()) return 1; return 0; } int main (int argc, char *argv[]) { char *in = "abcdefgh"; char *out1 = "abcdefgh"; char *out2 = "hgfedcba"; char *out3 = "aecbdfgh"; int len = strlen(in); /* test */ if (check_valid (in, out1, len) > 0) cout <<"valid" <<endl; else cout <<"invalid" <<endl; if (check_valid (in, out2, len) > 0) cout <<"valid" <<endl; else cout <<"invalid" <<endl; if (check_valid (in, out3, len) > 0) cout <<"valid" <<endl; else cout <<"invalid" <<endl; return 0; }