栈:(后进先出)
限定为只能在一端进行插入和删除操作
题目:
“xyzyx”是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,如“席主席”、“记书记”、“aha”和“ahaha”均是回文,但“ahah”不是回文。
输入:一个字符串;
输出:若为回文字符则输出YES,否则输出NO;
#include<stdio.h>
#include<string.h>
int main(void){
char a[101],s[101];
int i,top,mid,len,next;
gets(a);
len=strlen(a); //计算字符串长度
mid=len/2-1;
//mid为字符串中点(此处纠结很长时间,一直不懂为什么是len/2-1,往下看认为是i=0开始,到i<=mid.so)
top=0;
for(i=0;i<=mid;i++){ //将mid及之前的字符全部入栈
//i不能从1开始,否则会忽略掉第一个字符和最后一个字符
s[++top]=a[i]; //为什么是++top而不是top++
}
//判断长度是奇数还是偶数,并确定需要进行字符匹配的起始下标
if(len%2==0)
next=mid+1;
else
next=mid+2;
for(i=next;i<=len-1;i++){
if(s[top]!=a[i])
break;
top--;
}
if(top==0)
printf("YES");
else
printf("NO");
getchar();getchar();
return 0;
}