//实验二--栈和队列
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
#define m 100
typedef struct Stack{ //定义栈
char data[m];
int top;
}stack;
typedef struct { //定义队列
char data[m];
int front;
int rear;
}Queque;
void InitStack(stack* s) //初始化栈
{
s->top=0;
}
void InitQueque(Queque* q) //初始化队列
{
q->front=q->rear=0;
}
int StackEmpty(stack* s) //判断栈是否为空
{
if(s->top==0)
{
return 0; //代表栈不为空;
}
else
return 1; //代表栈为空;
}
void Push(stack* s,char c){ //入栈
if(s->top==100)
{
cout<<"栈已满!"<<endl;
}
else
{
s->data[++s->top]=c;
}
}
char OutStack(stack *s){ //出栈
char c;
if(s->top==0)
{
cout<<"栈为空!"<<endl;
return '0';
}
else
{
c=s->data[s->top];
s->top--;
return c;
}
}
void EnterQueque(Queque *q,char c) //入队
{
if((q->rear+1)%m==q->front)
{
cout<<"队列已满!"<<endl;
}
else
{
q->data[q->rear]=c;
q->rear=(q->rear+1);
}
}
char OutQueque(Queque *q) //出队
{
char f;
if(q->front==q->rear)
{
cout<<"队列已为空!"<<endl;
return 0;
}
else
{
f=q->data[q->front];
q->front++;
return f;
}
}
int main()
{
char c;
int flag=0;
stack *s=new stack;
Queque *q=new Queque;
InitStack(s);
InitQueque(q);
while((c=getchar())!=10)
{
Push(s,c);
EnterQueque(q,c);
}
while(StackEmpty(s))
{
if(OutStack(s)== OutQueque(q))
{
flag=1;
continue;
}
else
{
flag=0;
break;
}
}
if(flag==1)
cout<<'1'; //代表是回文;
else
cout<<'0'; //代表不是回文;
return 0;
}