回文字符串判定
1. 题目描述
'aba'是回文, 'abc'则不是回文,写一个算法,输入为字符串,输出为是、否;
2. 解题思路
栈。
将字符串等分,前半部分入栈,然后逐个弹出与后半部分逐个比较,若逐个相等则为回文。否则非回文
停止条件,栈空
3. 算法步骤
1. 初始化一个栈
2. 求字符串长度,并将前一半字符依次入栈
3. 如果栈不空,则弹出顶部元素和余下字符串的第一个/第二个比较(字符串长度的奇偶性)
4. 若字符串长度为偶数,则正常比较
5. 若字符串长度为奇数,则跳过中心点,用栈顶元素比较中心点后的第一个元素
6. 若中间有某个不相等,false
7. 栈空时返回true 并停止
#define MAXSIZE 100
#include <iostream>
#include <cstdlib>
#include <string.h>
using namespace std;
typedef char ElementType;
typedef struct SequentialStack{
ElementType *stack_base;
ElementType *stack_top;
}SuqentialStack;
bool Initialze_Stack(SequentialStack &stack1);
bool Push(SequentialStack &stack1, ElementType new_element);
bool Pop(SequentialStack &stack1, ElementType &top_element);
bool Is_Empty(SequentialStack stack1);
bool Is_Tenet(char *string1);
int main(){
char *string_test= "121";
cout<<Is_Tenet(string_test)<<endl;
return 0;
}
bool Initialize_Stack(SequentialStack &stack1)
{
stack1.stack_base = new ElementType[MAXSIZE];
if(!stack1.stack_base)
return false;
else
{
stack1.stack_top = stack1.stack_base;
return true;
}
}
bool Push(SequentialStack &stack1, ElementType new_element)
{
if (stack1.stack_top - stack1.stack_base == MAXSIZE)
{
return false;
}
else
{
*stack1.stack_top = new_element;
stack1.stack_top ++ ;
return true;
}
}
bool Pop(SequentialStack &stack1, ElementType &top_element)
{
if(!(stack1.stack_top == stack1.stack_base))
{
stack1.stack_top--;
top_element = *stack1.stack_top;
return true;
}
else
return false;
}
bool Is_Empty(SequentialStack stack1)
{
if(stack1.stack_top == stack1.stack_base)
return true;
else
return false;
}
bool Is_Tenet(char *string1){
SequentialStack stack1;
int length;
int indicator;
ElementType element;
length = strlen(string1);
Initialize_Stack(stack1);
for(indicator = 0; indicator<length/2; indicator++)
{
Push(stack1, string1[indicator]);
}
if(length % 2 ==1)
{indicator ++;}
while(! Is_Empty(stack1))
{
Pop(stack1, element);
if(element == string1[indicator])
indicator ++;
else
return false;
}
return true;
}