栈-回文判断

使用顺序栈判断回文:将一半字符入栈,然后出栈与剩下的一半字符比较,如果都相符即为回文

代码如下:

#include <iostream>
using namespace std;

#define MAXSIZE 100

struct Sqstack //顺序栈
{
    char *Top;
    char *Base;
    int stacksize;
};

int Push(char elem,Sqstack &S)
{
    if (S.Top - S.Base == S.stacksize)
    {
        cout << "栈已满!" << endl;
        return 0;
    }

    *(S.Top) = elem;
    S.Top+=1;

}

int Judge(char elem,Sqstack &S,bool &flag)
{

    if (S.Top == S.Base)
    {
        cout << "栈为空!" << endl;
        return 0;
    }

    S.Top-=1;
    cout << *(S.Top) << " 比较 " << elem << endl;
    if (*(S.Top) != elem)
    {
        flag = false;
        return 0;
    }


}

int main()
{
    char str[MAXSIZE];
    int length = 0;
    Sqstack S;
    bool flag = true;
    int i;

    S.Base = new char[MAXSIZE];
    if (!S.Base)
    {
        cout << "空间分配失败!" << endl;
        return 0;
    }
    S.Top = S.Base; //初始栈顶指针指向栈底
    S.stacksize = MAXSIZE; //将栈最大容量置位预定义的最大容量

    cout << "请输入需要判断的字符串" << endl;
    cin >> str;

    //获取输入的字符串长度
    while (str[length])
    {
        length++; 
    }

    //将字符一半入栈
    for (i = 0; i < length / 2; i++)
    {
        Push(str[i],S); 
    }

    //将入栈的字符出栈,并与数组中剩余的一半进行比较
    for (i=length-length/2; i<length; i++)
    {
        Judge(str[i],S,flag);
    }
    if (flag)
    {
        cout << "是回文" << endl;
    }
    else
    {
        cout << "不是回文" << endl;
    }

    system("pause");
    return 0;
}