回文序列判断:输入一个字符串,判断它是否是回文序列(即左右对称,如abccba或abcdcba)
解决方法利用栈先进后出、队列先进先出的特点,将字符串前半部分入栈,后半部分入队列(若字符串有奇数个字符,则最中间的字符不加入栈和队列);分别逐个取出栈顶、队首的元素,即为字符串中两个对称的字符,一一对比,若不同则说明不是回文串;直到最后,若栈与队列均为空,说明完全对称,字符串为回文序列。
代码实现#include#include #include #include using namespace std; int main() { char chsq[255]; cout<<"请输入一个长度不大于255的字符序列"< >chsq; cout<<"字符串为:"< s; queue q; for(int i=0; i =strlen(chsq)/2) q.push(chsq[i]);//后二分之一入队 if(strlen(chsq)%2!=0&&i<(strlen(chsq)-1)/2) s.push(chsq[i]);//设2m+1=strlen(chsq),前m个一入栈 if(strlen(chsq)%2!=0&&i>(strlen(chsq)-1)/2) q.push(chsq[i]);//设2m+1=strlen(chsq),后m个入队 } for(; !s.empty(); ) { if (s.top() == q.front()) { s.pop(); q.pop(); } else break; } if(s.empty()&&q.empty()) cout<<"是回文串"<



