栈的实现只需要一个一维数组和一个指向栈顶的变量top即可。通过top来对栈进行插入和删除操作。
判断一个字符串是否是回文。
若一个字符串是回文的,那么它必须是中间对称的,即求出mid。
再把mid之前的字符全部入栈,此处的栈是用来存储字符,实现栈的数组类型是字符数组即chars[101];初始化栈很简单,top=0即可。入栈的操作top++;s[top]=x;(假设需要入栈的字符暂存在字符变量x中),可以简写s[++top]=x;
接着判断是否是回文。将当前栈的字符依次出栈,看看是否与mid之后的字符一一匹配,如果能匹配则说明这个字符串是回文字符串,否则不是。
#include<stdio.h>
#include<string.h>
int main() {
char a[101],s[101];
int i,len,mid,next,top;
gets(a);//读入一个字符串
len=strlen(a)-1;//字符串长度
mid=len/2;//求字符串中点
top=0;//栈的初始化
for(i=0;i<=mid;i++)//将mid之前的字符依次入栈
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;
}
栈还可以用来进行匹配括号。