一个栈可以全部入完再出,也可以入一部分再出一部分再入,和入一部分出完再入。
要判断一个栈的出栈顺序是否合法,思路是用一个队列把出栈顺序存起来,再用一个栈,把第一个数放到栈里,用栈顶元素与对头元素进行比较若相等则出栈、出队,若不想等则继续按顺序进行入栈。如果最后队列为空,证明出栈顺序是合法的,否则,不合法。
代码如下:
void panduan(int *arr,int n) { queue<int>qq; stack<int>ss; for (int i = 0; i < n; i++) { qq.push(arr[i]);//出栈顺序全部入队 } for (int i = 1; i <= n; i++) { ss.push(i);//先入栈 while (!ss.empty() && ss.top() == qq.front()) { ss.pop(); qq.pop(); } } if (qq.empty()) { cout << "合法的序列"; } else { cout << "不合法的序列"; } } void main() { int arr[] = {3,4,2,1,5}; int n = sizeof(arr) / sizeof(arr[0]); panduan(arr, n); }
C++ 判断是否是合法的出栈顺序
最新推荐文章于 2024-07-06 23:04:45 发布