大家好我是大一新生,感谢大家观看和支持,有啥改进的可以评论哦!
#include<iostream>
#include<iomanip>
using namespace std;
#define ok 1
#define error 0
#define Selemtype char
#define Status int
#define MAXSIZE 100
typedef struct//顺序栈
{
Selemtype *top;//栈顶指针
Selemtype *base;//栈底指针
}SqStack;
Status InitStack(SqStack &S)//顺序栈的初始化
{
S.base=new Selemtype[MAXSIZE];
if(S.base==NULL)//判断是否申请地址成功
return error;
S.top=S.base;//栈底栈顶指针指向第一个位置
return ok;
}
Status Pop(SqStack &S,Selemtype &e)//出栈
{
if(S.top==S.base)//判断是否为空栈
return error;
e=*--S.top;//输出栈顶元素后栈顶指针后退一格
return ok;
}
Status Push(SqStack &S,Selemtype e)//入栈
{
if(S.top-S.base>MAXSIZE)//判断栈是否已经满
return error;
*S.top++=e;//将元素压入栈顶,并将栈顶向上移
return ok;
}
Status huiwen(SqStack &S)//判断回文函数
{
Selemtype str[MAXSIZE],e;//将字符串先储存进字符数组里
int i=0,j=0;
while(cin>>str[i])//输入元素并且将元素压入栈内
{
if(str[i]=='#')
break;
Push(S,str[i]);
i++;
}
while(j<i)//判断回文
{
Pop(S,e);
if(str[j]!=e)
return error;
j++;
}
if(j!=0)//排除空栈的可能
return ok;
return error;
}
main()//主函数
{
SqStack S;
InitStack(S);
if(huiwen(S))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}