使用堆栈判断字符串是否回文

时间:2021-10-05 05:18:43

描述:对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“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;
}