C++栈应用:判断序列出栈可能性

本文将介绍如何使用C++的栈来判断一个序列是否可以由另一个序列经过入栈和出栈操作得到。

问题描述

给定两个序列,一个为入栈序列,另一个为目标出栈序列,判断该出栈序列是否是从入栈序列经过一系列合法的入栈和出栈操作后得到的。

代码实现

以下是使用C++实现的代码:cpp#include #include #include using namespace std;

bool isPossibleSequence(vector& input, vector& output) { stack st; int j = 0; int m = input.size();

for (int i = 0; i < m; i++) {        st.push(input[i]);        while (!st.empty() && st.top() == output[j]) {            st.pop();            j++;        }    }

return (st.empty() && j == m);}

int main() { int n; cin >> n;

while (n--) {        int m;        cin >> m;        vector<int> input(m);        vector<int> output(m);

    for (int i = 0; i < m; i++) {            cin >> input[i];        }        for (int i = 0; i < m; i++) {            cin >> output[i];        }

    if (isPossibleSequence(input, output)) {            cout << 'Yes' << endl;        } else {            cout << 'No' << endl;        }    }

return 0;}

代码分析

  1. isPossibleSequence 函数: 该函数接收两个vector参数,分别代表入栈序列和目标出栈序列。函数使用一个栈 st 来模拟入栈和出栈操作。2. 循环判断: 遍历入栈序列,将元素依次入栈。在入栈的同时,检查栈顶元素是否与当前目标出栈序列的元素相等。如果相等,则进行出栈操作,并将目标出栈序列的索引 j 向后移动一位。3. 结果判断: 最后,如果栈为空且目标出栈序列的所有元素都被匹配,则说明目标出栈序列是合法的,返回 true;否则,返回 false

总结

本文介绍了如何使用C++的栈来判断一个序列是否可以由另一个序列经过入栈和出栈操作得到,并提供了详细的代码示例和分析。希望本文能帮助你更好地理解栈的应用。

C++栈应用:判断序列出栈可能性

原文地址: https://www.cveoy.top/t/topic/cvVA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录