啊哈--栈

版权声明:转载请附上原文链接哟! 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;
}

栈还可以用来进行验证括号的匹配。比如输入一行只包含“()[]{}”的字符串,请判断 形如“([{}()])”或者“{()[]{}}”的是否可以正确匹配。显然上面两个例子都是可以正确匹 配的。“([)]”是不能匹配的。有兴趣的同学可以自己动手来试一试。 

 

猜你喜欢

转载自blog.csdn.net/weixin_44170305/article/details/90108162