常见算法题:判断表达式是不是是回文

常见算法题:判断表达式是否是回文

题目:设计一个算法,判断用户输入的表达式中是否是回文(回文即左右对称的字符串)。

思路:这道题与判断表达式括号是否匹配类似,可使用顺序栈来解决,区别是回文要求每个字符都要求匹配,因此将字符串全部入栈,再全部出栈,将最后一个字符与第一个字符比较是否相同,依次比较,若全部相同则为回文。

代码:

#include<iostream>
#include<string>
using namespace std;
#define MaxSize 20
//字符串栈
class Stack
{
    char *data;
    int top;
public:
    Stack();
    ~Stack();
    bool IsEmpty();
    bool Push(char e);
    bool Pop(char& e);
};

Stack::Stack()
{
    data = new char[MaxSize];
    top = -1;
}

Stack::~Stack()
{
    delete [] data;
}

bool Stack::IsEmpty()
{
    return (top == -1);
}

bool Stack::Push(char e)
{
    if(top == MaxSize-1)    return false;   //栈满
    top++;
    data[top] = e;
    return true;
}

bool Stack::Pop(char& e)
{
    if(top == -1)   return false;   //栈空
    e = data[top];
    top--;
    return true;
}
//判断回文
bool IsPalindrome(char str[],int n)
{
    int i=0;char e;
    Stack st;
    while(i<n)
    {
        st.Push(str[i]);
        i++;
    }
    i=0;
    while(i<n)
    {
        st.Pop(e);
        if(str[i]!=e)   return false;
        i++;
    }
    return true;
}

void main()
{
    cout<<"请输入表达式:"<<endl;
    char str[MaxSize];
    cin>>str;
    int n = strlen(str);
    if(IsPalindrome(str,n))
        cout<<"表达式"<<str<<"是回文"<<endl;
    else
        cout<<"表达式"<<str<<"不是回文"<<endl;
}

测试数据1:qwerewq
测试结果1:常见算法题:判断表达式是不是是回文

测试数据2:qwertyu
测试结果2:常见算法题:判断表达式是不是是回文