问题
判断一个栈是不是“回文”。回文,英文palindrome,指顺着读和反过来读都一样。
分析
由栈的数据结构可知,栈是一个先进后出的数据结构,因此为了判断该栈是否是一个回文栈,我们可以将栈的一半弹出来,压入另外一个栈,然后再进行判断他们对于数据是否相同即可。当栈的长度为偶数时:
我们只需要弹出一半的数据,然后可直接进行比较。
当栈的长度为奇数时,我们需要弹出一半的长度,然后在比较前需要将最中间的一位去掉。
#include<iostream>
#include<cstring>
#define MAXSIZE 100
using namespace std;
typedef char ElemType;
typedef struct Stack{
ElemType data[MAXSIZE];
int top;
}Stack;
typedef Stack *StackPointer;
bool InitStack(StackPointer stack){
if(NULL == stack)
return false;
stack->top = 0;
return true;
}
bool Push(StackPointer stack, ElemType elem){
if(NULL == stack || stack->top >= 100)
return false;
stack->data[(