解密回文——栈

解密回文——栈

解密回文——栈
一后进先出的数据结构,叫做栈。比如有一个桶子,桶子的直径刚好只能塞进一个球,我们先向里面依次放进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,但是它的每一次输入可以省略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;
}

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

你可能感兴趣的:(新手,c语言,栈)