标签:
题目一:栈的压入和弹出顺序
static bool IsPopOrder(int[] order, int[] popOrder) { Stack<int> stack = new Stack<int>(); int currentOrderIndex = 0; // 原始序列当前指针 int currentPopOrderIndex = 0; //待检验序列当前指针 if (order == null || popOrder == null || order.Length != popOrder.Length || order.Length == 0) { return false; //鲁棒性考虑 } if (order.Length == 1 && order[0] == popOrder[0]) { return true;//如果各自序列都只有一个值,而且相等,则OK } stack.Push(order[currentOrderIndex]); //将原始序列第一个值压栈 currentOrderIndex++; //指针指向后一位。 while (currentOrderIndex <= order.Length) //原始序列的当前指针没有指向最后则一直循环
//加等号是为了让循环继续,因为最后被加入stack里的值,还没有机会pop出来 { while (stack.Count > 0 && stack.Peek() == popOrder[currentPopOrderIndex])//如果栈顶的数字和待检验的序列当前数字相等 { stack.Pop();//弹出 currentPopOrderIndex++;//待检验序列当前指针向后移。 } //如果不相等,则 if (currentOrderIndex < order.Length) { stack.Push(order[currentOrderIndex]);//原始序列压栈 } currentOrderIndex++; //原始序列指针向后移动 } if (stack.Count == 0) { return true; } return false; }
标签:
原文地址:http://www.cnblogs.com/leonhart/p/4785177.html