1 /************************************************************************* 2 > File Name: 20_IsPopOrder.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 19时53分19秒 6 ************************************************************************/ 7 8 #include <stdio.h> 9 #include <bits/stdc++.h> 10 11 using namespace std; 12 13 bool isPopOrder(int* push, int* pop, int length) 14 { 15 if (push==NULL || pop==NULL || length<=0) 16 return false; 17 18 int nextPush = 0; 19 int nextPop = 0; 20 21 stack<int> stackData; 22 while (nextPop < length) 23 { 24 // 如果当前栈为空 或栈顶元素不等于要出栈的元素,压栈 25 while (stackData.empty() || stackData.top()!=pop[nextPop]) 26 { 27 if (nextPush == length) 28 break; 29 30 stackData.push(push[nextPush]); 31 nextPush ++; 32 } 33 // 入栈队列结束还没找到钙元素, wrong 34 if (stackData.top() != pop[nextPop]) 35 break; 36 // 匹配到该元素,弹出,出栈指针后移一位 37 stackData.pop(); 38 nextPop ++; 39 } 40 // 如果栈内已经没有元素且出栈指针已经走完,right 41 if (stackData.empty() && nextPop==length) 42 return true; 43 44 return false; 45 } 46 47 int main() 48 { 49 int push[] = {1, 2, 3, 4, 5}; 50 // int pop[] = {4, 5, 3, 2, 1}; 51 int pop[] = {4, 3, 5, 1, 2}; 52 int length = 5; 53 if (isPopOrder(push, pop, length) == true) 54 printf("Right\n"); 55 else 56 printf("Wrong\n"); 57 58 return 0; 59 }
时间: 2024-10-13 10:36:58