1. 程式人生 > >使用堆疊判斷字串是否迴文

使用堆疊判斷字串是否迴文

描述:對於一個從鍵盤輸入的字串,判斷其是否為迴文。迴文即正反序相同。如“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;
}