其实火车车厢重排那道题的算法没那么复杂,只需要
- 所有轨道出车到不能出为止
- 遍历缓冲轨,找到能放下入口轨道的首辆车的就塞入缓冲轨。
然后不断循环这两步即可。
这是因为,缓冲轨的队尾一定是降序排列的。
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
template <typename T>
struct Node
{
T data;
Node<T> *next;
};
template <typename T>
class Queue
{
public:
Queue() {
}
~Queue()
{
while (_first != nullptr)
{
Node<T> *tmp = _first;
_first = _first->next;
delete tmp;
}
}
void pop()
{
if (_first == nullptr) throw "Queue empty";
Node<T> *tmp = _first;
_first = _first->next;
delete tmp;
}
void push(T x)
{
Node<T> *