一、问题描述
上次学习的队列是先进先出。
而栈则是后进先出。栈只能在一端进行插入和删除工作。
回文(类似xyzyx)匹配或者就是括号匹配一般都是使用栈。
二、思路解析以及栈
栈的实现很简单,只需要一个一维数组和一个指向栈顶的变量top就可以了。
我们通过top来对栈进行插入和删除工作。
初始化栈:top=0;
入栈操作:top++;s[top]=x; 假设需要入栈的字符暂时存在字符变量x中。
(上边可以简写成 s[++top]=x; )
三、编程实现
#include<stdio.h>
#include<string.h>
int main(){
char a[101],s[101];
int i,len,mid,next,top;
gets(a);//读入一行字符
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");
getchar();
getchar();
return 0;
}
四、总结分析
/是取整,%是求余
其实就是小数点后的数都不要的意思,比如5÷3=1.66666666……而采用整除向上取整后就是2,向下取整就是1,你看看你的是向上还是向下