【面试题】五道面试题五

来源:互联网 发布:显示毫秒的网络时钟 编辑:程序博客网 时间:2024/06/14 05:08

判断出栈顺序的正确性(假设每个相同元素只出现一次)

#include<iostream>#include<cstdlib>#include<stack>#include <assert.h>using namespace std;class IsTrueSack{public:IsTrueSack():_str1(NULL),_str2(NULL){}~IsTrueSack(){if(_str1!=NULL){delete[] _str1;}if (_str2!=NULL){delete[] _str2;}}public:bool IsTrue(const char *push_seq, const char *pop_seq)//判断是不是正确出栈顺序{if (NULL == push_seq || NULL == pop_seq)//如果为空则直接返回false{cout<<"不是正确的顺序"<<endl;return false;         }if (strlen(push_seq) != strlen(pop_seq))//如果push_seq的长度不等于pop_seq,直接返回fasle{cout<<"不是正确的顺序"<<endl;return false;}stack<char> sc;//重新构造一个新的栈s来存放push_seq的出栈顺序while (*push_seq){if (0 == sc.size() || sc.top() != *pop_seq)//判断sc长度是否为空{sc.push(*push_seq++);}else//如果不符合上面说明有元素已经出栈,sc出栈后,pop_seq往后挪一步,继续上步判断,一直循环{sc.pop();++pop_seq;}}while (sc.size()){if (sc.top() != *pop_seq++){cout<<"不是正确的顺序"<<endl;return false;}sc.pop();}cout<<"是正确的顺序"<<endl;return true;}private:char* _str1;char* _str2;};void test4(){char* str1="12345";char* str2="34521";IsTrueSack Is;Is.IsTrue(str1,str2);}void test5(){char* str1="1234";char* str2="3412";IsTrueSack Is;Is.IsTrue(str1,str2);}


0 0
原创粉丝点击