栈是后进先出的数据结构。它限定为只能在一端进行插入和删除操作。
题目:
判断一个串是否是回文串。
先找到中间的字符,把他之前的字符入栈,再从他的后面一个字符开始和栈中最先出栈的字符比较。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[101];
char s[101];
int i,j,next,top,len,mid;
gets(a);
len=strlen(a);
mid=len/2;
top=0;
for(i=0;i<mid;i++)
{
s[++top]=a[i];
}
if(len%2==0)
next=mid;
else
next=mid+1;
for(i=next;i<len;i++)
{
if(a[i]!=s[top])
break;
top--;
}
if(top==0)
printf("yes\n");
else
printf("no\n");
return 0;
}
括号匹配检验:
碰到前括号就入栈,碰到后括号就与栈顶字符匹配,如果匹配成功就出栈。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[110],check[110];
int i,j,len,k,n,flag;
scanf("%d",&n);
while(n--)
{
flag=0;
scanf("%s",a);
j=-1;
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]=='['||a[i]=='(')
{
check[++j]=a[i];
}
if(a[i]==']')
{
if(j==-1)
{
flag=1;
}
else if(check[j]!='[')
{
flag=1;
}
else
j--;
}
else if(a[i]==')')
{
if(j==-1)
{
flag=1;
}
else if(check[j]!='(')
{
flag=1;
}
else
j--;
}
}
if(flag==0)
printf("yes\n");
else
printf("no\n");
}
return 0;
}