版权声明:转载请附上原文链接哟! https://blog.csdn.net/weixin_44170305/article/details/90108162
风华是一指流砂,苍老是一段年华。
上篇博客中我们学习了队列,它是一种先进先出的数据结构。还有一种是后进先出的数据
结构,它叫做栈。栈限定为只能在一端进行插入和删除操作。比如说有一个小桶,小桶的直 径只能放一个小球,我们现在小桶内依次放入 2、1、3号小球。假如你现在需要拿出 2号小球, 那就必须先将 3号小球拿出,再拿出 1号小球,后才能将 2号小球拿出来。在刚才取小球的 过程中,我们先放进去的小球后才能拿出来,后放进去的小球却可以先拿出来。
栈究竟有哪些作用呢?我们来看一个例子。“xyzyx”是一个回文字符串,所谓回文字符 串就是指正读反读均相同的字符序列,如“席主席”、“记书记”、“aha”和“ahaha”均是回 文,但“ahah”不是回文。通过栈这个数据结构我们将很容易判断一个字符串是否为回文。要引入<stack>这个头文件哟。
下面就直接给出代码部分了:
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
char str[100];
stack<char> s;
cin>>str;
int len=strlen(str);
int i,flag=0;
for(i=0; i<len/2; i++)
s.push(str[i]);
if(len%2!=0)
{
for(i=len/2+1; i<len; i++)
{
if(s.top()!=str[i])
{
flag=1;
break;
}
else
s.pop();
}
}
else
{
for(i=len/2; i<len; i++)
{
if(s.top()!=str[i])
{
flag=1;
break;
}
else
s.pop();
}
}
if(flag)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
栈还可以用来进行验证括号的匹配。比如输入一行只包含“()[]{}”的字符串,请判断 形如“([{}()])”或者“{()[]{}}”的是否可以正确匹配。显然上面两个例子都是可以正确匹 配的。“([)]”是不能匹配的。有兴趣的同学可以自己动手来试一试。