判断元素的入栈和出栈顺序是否合法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mac_timmy/article/details/79472283

个人博客传送门

题目

提供两个元素的集合,一个是元素入栈的顺序,另一个是元素出栈的顺序。设计一个函数,判断两个元素集合是否满足入栈出栈的规则。如:入栈顺序:“12345”,出栈顺序是:“54321”,这样就是符合要求的。如果出栈顺序是:“51234”,这样不符合要求。

思路

根据题目的要求,就是判断两数组是否满足出栈入栈的顺序。可以这样做:1、先按照入栈顺序的集合进行入栈。2、在入栈的同时,跟出栈顺序的元素进行比较。如果相同就将入栈的元素pop出来。3、结束的时候,如果栈为空,说明两者的入栈顺序和出栈顺序可以匹配,那么就是符合要求的;如果栈不为空,那就是不符合要求。

还有一点:如果两元素的个数不一样或者同时为空,直接判定不符合要求。

代码实现
#include <iostream>
#include <stack>

using namespace std;

bool stack_io_right(char* src, char* dst){
    int src_len = sizeof(src);
    int dst_len = sizeof(dst);
    int i = 0;
    int j = 0;

    if(src_len == 0 || src_len != dst_len)
        return false;
    for(; i < src_len; ++i){
        s.push(*(src+i));
        while(s.size() && s.top() == *(dst+j)){
            ++j;
            s.pop();
        }
    }
    if(s.empty())
        return true;
    else
        return false;
}

int main(){
    system("clear");
    char src[] = "12345";
    char dst[] = "32145";
    char dst1[] = "51243";

    cout << stack_io_right(src, dst) << endl;
    cout << stack_io_right(src, dst1) << endl;
    return 0;
}
运行结果

运行结果

展开阅读全文

没有更多推荐了,返回首页