精髓,请仔细体会
bool test(SqQueue &Q,Stack &s){
char c;
while((c=getchar())!='@'){ //因为栈是先进后出
push_Stack(s,c); //队列是先进先出
en_Queue(Q,c); //所以可以把二者的出元素过程看做回文
}
printf("\n");
while(Q.front != Q.rear){
if(pop_Stack(s) != de_Queue(Q))//一旦有一个不相等,就说明不是回文
return false;
}
return true;
}
#include<iostream>
#include<stdio.h>
#define MAXSIZE 50
using namespace std;
typedef struct{
char data[MAXSIZE];
int front,rear;
}SqQueue;
typedef struct{
char data[MAXSIZE];
int top;
}Stack;
void init_Queue(SqQueue &Q){
Q.front = Q.rear = 0;
}
void init_Stack(Stack &S){
S.top = -1;
}
bool en_Queue(SqQueue &Q,char b){
if((Q.rear+1)%MAXSIZE == Q.front){
printf("队列满");
return false;
}
Q.data[Q.rear] = b;
printf("入队元素:%c ",b);
Q.rear = (Q.rear+1)%MAXSIZE;
return true;
}
bool push_Stack(Stack &S,char a){
S.data[++S.top] = a;
printf("入栈元素:%c ",a);
return true;
}
char de_Queue(SqQueue &Q){
char t;
if(Q.front == Q.rear){
printf("队列空");
return false;
}
t = Q.data[Q.front];
printf("出队元素:%c ",t);
Q.front = (Q.front+1)%MAXSIZE;
return t;
}
char pop_Stack(Stack &S){
if(S.top == -1){
return 0;
}
char t;
t = S.data[S.top--];
printf("出栈元素:%c ",t);
return t;
}
bool test(SqQueue &Q,Stack &s){
char c;
while((c=getchar())!='@'){ //因为栈是先进后出
push_Stack(s,c); //队列是先进先出
en_Queue(Q,c); //所以可以把二者的出元素过程看做回文
}
printf("\n");
while(Q.front != Q.rear){
if(pop_Stack(s) != de_Queue(Q))//一旦有一个不相等,就说明不是回文
return false;
}
return true;
}
int main(){
SqQueue Q;
Stack S;
init_Queue(Q);
init_Stack(S);
cout<<test(Q,S);
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)