栈初探(判断回文)

栈是一种后进后出的数据结构,限定为只能在一端进行插入和删除操作。栈的实现需要一个一维数组和一个指向栈顶的变量top。

举例:判断字符串是否为回文串(如果一个字符串是回文的话,那么它必须是中间对称的,求出中点mid,然后将mid之前的字符全部入栈。关键步骤是将当前栈中的字符依次出栈,判断能否与mid之后的字符一一匹配)

#include<stdio.h>
#include<string.h>
int main(void)
{
	char a[101], s[101];
	int i, len, mid, next, top;
	
	scanf("%s", s);
	len = strlen(a);
	mid = len/2 -1;
	
	top = 0; // 栈的初始化
	//将mid前的字符依次入栈 
	for(i = 0; i <= mid; i++) {
		s[++top] = a[i];
	}
	
	//判断字符串的长度是奇数还是偶数, 并找出需要进行字符匹配的起始下标 
	if(len % 2 ==0 ) {
		next = mid + 1;
	}else {
		next = mid + 2;
	} 
	//开始匹配
	for(i = next; i <= len - 1; i++) {
		if(a[i] != s[top]) break;
		top--;
	} 
	//如果top的值为0,则说明栈内所有的字符都被一一匹配了
	if(top == 0)
	  printf("YES");
	else
	  printf("NO"); 
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值