Сортировать односвязные списки при вставке в istream C++
Я самый простой человек в мире, когда дело доходит до C++, и мне было интересно, если вы, ребята, могли бы помочь мне, если это будет хорошо. Я пытаюсь выполнить сортировку по узлам, прочитанным в istream, но КАК они читаются. Код в сети очень сложный, и мне было интересно, есть ли самый простой способ добиться этого.
Вот мой метод чтения, и до сих пор он читает в istream, и это здорово, но теперь мне нужно отсортировать его как прочитанное. Моя голова болит, ха-ха
void ListClass::Read(istream& r)
{
char c[13];
r >> c;
r >> numberOfInts;
Node *node = new Node();
head = node;
for(int i = 0; i < numberOfInts; i++)
{
r >> node->data;
cout << node->data << endl;
node->next = new Node;
node = node->next;
}
}
и вот мой класс Node в моем заголовочном файле
class Node
{
public:
Node() {} //default constructor
Node(int d, Node* q = 0) : data(d), next(q) {} //constructor with parameters data and next
int data; //holds data in node
Node* next;//pointer to next node
};
1 ответ
Посмотрите, заставляет ли это вас правильно думать о проблеме:
Вы начинаете с колоды карт лицом вверх. Вы хотите отсортировать колоду карт, но вы должны следовать некоторым странным правилам.
Вы помещаете несортированную колоду карт так, чтобы вы могли видеть только верхнюю карту. Начните с перемещения первой карты в вашу отсортированную стопку (одна карта автоматически сортируется).
Посмотрите на следующую несортированную карточку. Если она больше (или меньше), чем верхняя отсортированная карта, переместите верхнюю отсортированную карту в третью стопку. Продолжайте перемещать карты одну за другой в третью стопку, пока ваша новая карта не станет меньше следующей отсортированной карты или пока отсортированная стопка не станет пустой, затем переместите несортированную карту в отсортированную стопку. Переместите карты одну за другой назад из третьей стопки в отсортированную стопку.
Повторяйте предыдущий шаг до тех пор, пока несортированная куча не станет пустой.