#include <iostream>
#include <cstdio>
using namespace std;
struct list{
int data;
list *next;
};
class Queue{
list *ptrf,*ptrb;
public:
Queue(){
ptrf = ptrb = NULL;
}
void enqueue(int);
int dequeue();
};
void Queue::enqueue(int x) {
list *newnode = new list;
newnode->data = x;
if(ptrb == NULL) ptrf = ptrb = newnode;
else {
ptrb->next = newnode;
ptrb = newnode;
}
}
int Queue::dequeue() {
list *tmp;
int value;
value = ptrf->data;
tmp = ptrf;
ptrf = ptrf->next;
delete tmp;
return value;
}
//栈操作类
class Stack{
list *ptr;
public:
Stack(){
ptr = NULL;
}
void push(int i);
int pop();
int empty(){
return(ptr==NULL);
}
};
void Stack::push(int x) {
list *newnode = new list;
newnode->data = x;
newnode->next = ptr;
ptr = newnode;
}
int Stack::pop() {
list *top;
int value;
value=ptr->data;
top = ptr;
ptr = ptr->next;
delete top;
return value;
}
int main() {
//测试队列 测试ok
// Queue A;
// int arr[] = {3,12,8,9,11};
// cout << "入队顺序:";
// for(int i=0;i<5;i++){
// cout<<arr[i]<<" ";
// A.enqueue(arr[i]);
// }
// cout<<endl<<"出队顺序:";
// for(int i=0;i<5;i++){
// cout<<A.dequeue()<< " ";
//
// }
// cout<<endl;
//测试栈 ok
/* Stack A;
int arr[] = {5,2,8,1,4,3,9,7,6};
cout<<"进栈顺序:";
for(int i=0;i<5;i++){
cout<<arr[i]<<" ";
A.push(arr[i]);
}
cout<<endl<<"出栈顺序:";
for(int i=0;i<5;i++){
cout<<A.pop()<< " ";
}
return 0;*/
Stack S;
Queue Q;
char ch;
cout << "输入数据:";
while((ch=getchar()!='.')){
S.push(ch);
Q.enqueue(ch);
}
while(!S.empty() && S.pop() == Q.dequeue());
if(S.empty()) cout<<"输入的是回文数据"<<endl;
else cout<<"输入的不是回文数据"<<endl;
return 0;
}
//李春宝 p100 todo 结果不正确 2020.02.29