描述:对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。[基本要求](1)数据从键盘读入;(2)输出要判断的字符串; (3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。
//字符串结束以“?”结尾,C语言版 复制可用
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct //定义栈
{
char data[MAXSIZE];
int top;
}SqStatck;
bool StatckEmpty(SqStatck *s) //判断栈是否为空
{
return (s->top==-1);
}
bool PushStack(SqStatck *s,char e) //入栈
{
if(s->top==MAXSIZE-1)
return false;
s->top++;
s->data[s->top]=e;
return true;
}
char PopStatck(SqStatck *s) //出栈
{
if(s->top==-1)
return '0';
return s->data[s->top--];
}
typedef struct { //定义队列
char data[MAXSIZE];
int front;
int rear;
}Queue;
bool PushQueue(Queue *q,char e) //入队
{
if((q->rear+1)%MAXSIZE==q->front)
return false;
q->rear=(q->rear+1)%MAXSIZE;
q->data[q->rear]=e;
return true;
}
char PopQueue(Queue *q) //出队
{
if(q->front==q->rear)
return '0';
q->front=(q->front+1)%MAXSIZE;
char f=q->data[q->front];
return f;
}
int main()
{
SqStatck *s=new SqStatck();
s->top=-1;
Queue *q=new Queue();
q->front=q->rear=0;
char c;
bool flag=true;
printf("输入一个字符串:\n");
while((c=getchar())!='?')
{
PushStack(s,c);
PushQueue(q,c);
}
while(!StatckEmpty(s))
{
if(PopStatck(s)!=PopQueue(q))
{
flag=false;
printf("No\n");
break;
}
}
if(flag)
printf("Yes\n");
return 0;
}