假设称正读和反读都相同的字符序列为“回文”,例如,“abba”和“abcba”是回文,“abcde”和“ababab”则不是回文。利用栈和队列的知识,写一算法判别读入的一个以“@”为结束符的字符序列是
时间: 2023-04-29 07:03:12 浏览: 228
否为回文。
算法步骤如下:
1. 读入字符序列,将每个字符依次入队列和入栈。
2. 依次出队列和出栈,比较每个字符是否相同,如果有不同的字符,则该序列不是回文,输出“不是回文”;如果所有字符都相同,则该序列是回文,输出“是回文”。
3. 如果队列和栈中的元素个数不同,则该序列不是回文,输出“不是回文”。
4. 如果序列中没有字符,则输出“空序列不是回文”。
完整代码如下:
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int main()
{
char c;
stack<char> s;
queue<char> q;
bool isPalindrome = true; // 判断是否为回文
cout << "请输入一个以@为结束符的字符序列:" << endl;
while (cin >> c && c != '@') {
s.push(c);
q.push(c);
}
if (s.empty() && q.empty()) {
cout << "空序列不是回文" << endl;
return ;
}
while (!s.empty() && !q.empty()) {
char c1 = s.top();
char c2 = q.front();
if (c1 != c2) {
isPalindrome = false;
break;
}
s.pop();
q.pop();
}
if (isPalindrome && s.empty() && q.empty()) {
cout << "是回文" << endl;
} else {
cout << "不是回文" << endl;
}
return ;
}
阅读全文