解密回文——栈
解密回文——栈
解密回文——栈
栈:一后进先出的数据结构,叫做栈。比如有一个桶子,桶子的直径刚好只能塞进一个球,我们先向里面依次放进2号球、1号球、3号球。3号球虽然是最后放进去的,但是它是最先拿出的,而2号球是最后拿出来的。就相当于吃薯片,想要吃掉最后一片必须把前面的全都吃掉。
回文字符串:正读反读均相同的字符序列。如:好啊好、有没有、aha。
本次意图是用栈这样的数据结构来判断回文。
1. 我们需要读取这行字符串,并求出长度。
2. 找到中点(注意数组是从0开始的),且需要注意偶数与奇数的区别。
3. 将中点前的字符入栈
4. 将中点后的字符与入栈的字符进行对比,判断是否相同。
5. 若是则输出 YES,若不是则输出NO。
代码如下:
#include
#include //本次回文是字符型,是字符串,所以需要用到string
int main()
{int i,mid,next,top,len;char s[100],a[100];gets(a);//直接读入,相当于scanf,但是它的每一次输入可以省略enterlen=strlen(a);//获取字符串的长度。strlen(X)是获取括号内字符串的长度mid=len/2-1;//获取中点的位置。这里你可能问为什么要减1,因为数组是从a[0]开始的//开始入栈top=0;//栈的初始化for(i=0;i<=mid;i++)//将mid之前的字符入栈{s[++top]=a[i];//++top相当于循环一次top加1}//判断len是奇数还是偶数if(len%2==0){next=mid+1;//假如一组回文数1221,mid是1(别忘的数组特点),我们的判断后面一半开始所以得从2开始,因此mid得加1}elsenext=mid+2;//假如一组回文数121,mid是0,我们的判断2后面的1是否对应入栈的,所以mid加2//开始匹配for(i=next;i<=len-1;i++){if(a[i]!=s[top])break;//如果不相同直接跳出top--;//如果相同top每一次减1}if(top==0)printf("这是回文数");elseprintf("哎呦,这是个鬼");getchar();getchar();return 0;
}
如果有错误,请在评论指出。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
