题目

【队列栈】 POJ1363 Rails_栈【队列栈】 POJ1363 Rails_压栈_02

解答

判断出栈顺序

#include <iostream>
#include <string>
#include <list>
#include <stack>
#include <cassert>

// POJ 1363 Rails

// 这是一种模拟思想。 想办法将data_list的数通过一个栈的操作实现出pop_sequence这个序列。
bool IsRightPopSequence(std::list<int> data_list, std::list<int> pop_sequence) {
  // 这个栈是模拟栈。 通过压栈出栈模拟出想要得到的顺序。
  std::stack<int> data_stack;

  while (!data_list.empty()) {
    data_stack.push(data_list.front());
    data_list.pop_front();

    while (!data_stack.empty() && data_stack.top() == pop_sequence.front()) {
      data_stack.pop();
      pop_sequence.pop_front();
    }
  }

  if (!pop_sequence.empty()) {
    return false;
  }

  return true;
}

int main() {
  std::list<int> data_list;
  data_list.push_back(1);
  data_list.push_back(2);
  data_list.push_back(3);
  data_list.push_back(4);

  std::list<int> pop_sequence;
  pop_sequence.push_back(1);
  pop_sequence.push_back(3);
  pop_sequence.push_back(2);
  pop_sequence.push_back(4);

  std::cout << (IsRightPopSequence(data_list, pop_sequence) ? "Right" : "Wrong") << std::endl;

  return 0;
}