解密回文——栈

解密回文——栈

解密回文——栈
一后进先出的数据结构,叫做栈。比如有一个桶子,桶子的直径刚好只能塞进一个球,我们先向里面依次放进2号球、1号球、3号球。3号球虽然是最后放进去的,但是它是最先拿出的,而2号球是最后拿出来的。就相当于吃薯片,想要吃掉最后一片必须把前面的全都吃掉。
回文字符串:正读反读均相同的字符序列。如:好啊好、有没有、aha。

本次意图是用栈这样的数据结构来判断回文。

1. 我们需要读取这行字符串,并求出长度。
2. 找到中点(注意数组是从0开始的),且需要注意偶数与奇数的区别。
3. 将中点前的字符入栈
4. 将中点后的字符与入栈的字符进行对比,判断是否相同。
5. 若是则输出 YES,若不是则输出NO。

代码如下:

#include <stdio.h>
#include <string.h>//本次回文是字符型,是字符串,所以需要用到string
int main()
{
	int i,mid,next,top,len;
	char s[100],a[100];
	gets(a);//直接读入,相当于scanf,但是它的每一次输入可以省略enter
	len=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
	}
	else
		next=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("这是回文数");
	else
		printf("哎呦,这是个鬼");
	getchar();getchar();
	return 0;
}

如果有错误,请在评论指出。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值