用栈实现判断回文利用了栈先进后出的特性。
即只要把一般放进栈里面,然后利用栈的特性,后进先出,然后一个一个弹出来和后面的比较即可。
但是这需要先把字符串存到一个数组中,计算出字符串的长度,然后再将一半存入栈中。
#include<stdio.h>
#include<string.h>
typedef struct {
char a[100];
int len;
}Stack,*LinkStack; //栈结构
int main(){
LinkStack s;
s=(LinkStack)malloc(sizeof(Stack));
s->len=0; //将栈中指针置0
char ch[100]; //这个数组用来存放字符串,计算出长度
gets(ch);
int length;
length=strlen(ch); //计算出字符串的长度
int mid;
mid=length/2; //计算出字符串的一半
for(int i=0;i<mid;i++){
s->a[s->len]=ch[i]; //将一半存入栈中
s->len++; //栈指针跟随增加
}
int act;
if(length%2!=0) //判断,如果字符串为奇数,字符串的下一半是一半加一开始
act=length/2+1;
else
act=length/2; //字符串是偶数,字符串的从一半开始
for(int i=act;i<length;i++){
if(s->a[--s->len]!=ch[i]){
printf("不是回文"); //判断是否都相等
return 0;
}
}
printf("是回文");
return 0;
}