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