#include<stdlib.h>
#include<iostream.h>
//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef int QElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//队列
#define MAXQSIZE 100
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
//顺序栈的初始化
Status InitStack(SqStack &S){
S.base = new SElemType[MAXSIZE];
if(!S.base)
exit (OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//顺序栈的入栈
Status Push(SqStack &S,SElemType e){
if(S.top-S.base==S.stacksize)
return ERROR;
*(S.top++) = e;
return OK;
}
//顺序栈的出栈
Status Pop(SqStack &S,SElemType &e){
if(S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
//队列的初始化
Status InitQueue(SqQueue &Q){
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front=0;Q.base=0;
return OK;
}
//入队
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
//出队
Status DeQueue(SqQueue &Q,QElemType &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
void HuiWen(){
char c;
SqStack S;
SqQueue Q;
int n,m;
cout<<"输入一串字符:";
gets(c);
while(c!='#'){
Push(S,c);
EnQueue(Q,c);
cin>>c;
}
while(S.base==S.top&&Q.front==Q.rear){
Pop(S,n);DeQueue(Q,m);
if(n==m) cout<<"该字符串是回文"<<endl;
else cout<<"该字符串不是回文"<<endl;
}
}
void main(){
HuiWen();
}
#include<iostream.h>
//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef int QElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//队列
#define MAXQSIZE 100
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
//顺序栈的初始化
Status InitStack(SqStack &S){
S.base = new SElemType[MAXSIZE];
if(!S.base)
exit (OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//顺序栈的入栈
Status Push(SqStack &S,SElemType e){
if(S.top-S.base==S.stacksize)
return ERROR;
*(S.top++) = e;
return OK;
}
//顺序栈的出栈
Status Pop(SqStack &S,SElemType &e){
if(S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
//队列的初始化
Status InitQueue(SqQueue &Q){
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front=0;Q.base=0;
return OK;
}
//入队
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
//出队
Status DeQueue(SqQueue &Q,QElemType &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
void HuiWen(){
char c;
SqStack S;
SqQueue Q;
int n,m;
cout<<"输入一串字符:";
gets(c);
while(c!='#'){
Push(S,c);
EnQueue(Q,c);
cin>>c;
}
while(S.base==S.top&&Q.front==Q.rear){
Pop(S,n);DeQueue(Q,m);
if(n==m) cout<<"该字符串是回文"<<endl;
else cout<<"该字符串不是回文"<<endl;
}
}
void main(){
HuiWen();
}