Я только начал изучать стеки, очереди и колоды. Из того, что я видел так далеко от моих учебников и от inte rnet, я понял, как работает очередь. Я пытаюсь решить проблему, которую я получил как домашнее задание, поэтому я не прошу полного решения, я просто хочу дать совет о том, как go об этой проблеме.
Что я ' я пытаюсь сделать это - взять 2 динамические c очереди и отсортировать их по размеру элементов, а затем поместить указанные элементы в третью очередь, которая также будет отсортирована. Самым простым способом для меня было бы сложить все элементы в массив, чтобы отсортировать их, а затем поместить их в очередь, однако часть задачи заключалась в том, чтобы не использовать дополнительное пространство.
Я подумал о том, как это сделать, и вот что я придумал: каждая очередь сортируется отдельно, высовывая 2 ее элемента, затем сравнивая их и выталкивая меньшую обратно, оставляя большую для сравнения. это к следующему элементу очереди. По n-му повороту они должны были быть отсортированы.
Что меня смущает, так это то, как выполнить функцию, которая будет их сравнивать. Я пытался написать код, но ничего не могу поделать, так как нам не разрешено использовать stl
библиотеки. Я знаю, что вопрос довольно тупой, но я провел всю неделю в поисках этого, и я понятия не имею, что делать дальше. Даже если это ссылка на сайт, объясняющий, как это должно работать, я все равно буду признателен за это.
#include <iostream>
using namespace std;
struct elem {
int key;
elem* next;
}* first = NULL, * last = NULL;
struct elem2 {
int key2;
elem2* next3;
}* first2 = NULL, * last2 = NULL;
struct elem3 {
int key3;
elem3* next3;
}* first3 = NULL, * last3 = NULL;
//elem *push(int n, elem *&first, elem *&last);
//elem *pop(int &n, elem *&first, elem *&last);
elem* push(int n, elem*& first, elem*& last)
{
elem* p = last;
last = new elem;
last->key = n;
last->next = NULL;
if (p != NULL)
p->next = last;
else
first = last;
return p;
}
elem* pop(int& n, elem*& first, elem*& last)
{
elem* p = NULL;
if (first) {
n = first->key;
p = first;
first = first->next;
;
if (first == NULL)
last = first;
return p;
delete p;
}
else
return nullptr;
}
void main()
{
int ch, num, ammount, i = 1;
do {
cout << "\n\t Menu";
cout << "\n 1.Add elements";
cout << "\n 2.Add elements to second queue";
cout << "\n 3. Merge queues and sort them";
cout << "\n 4.Exit";
do {
cout << "\n Your choice is:";
cin >> ch;
} while (ch < 1 || ch > 4);
switch (ch)
{
case 1:
cout << "How many elements would you like to add? \n";
cin >> ammount;
cout << "Input queue elements:\n";
for (i = 0; i < ammount; i++) {
cin >> num;
elem* push(int num, elem*& first, elem*& last);
}
break;
case 2:
cout << "How many elements would you like to add? \n";
cin >> ammount;
cout << "Input queue elements:\n";
for (i = 0; i < ammount; i++) {
cin >> num;
elem2* push(int num, elem2*& first2, elem2*& last2);
}
break;
case 3:
break;
}
} while (ch != 4);
}
Я до сих пор исправлял большинство из них. Единственное, что я все еще пытаюсь сделать, это отсортировать их в третью очередь. Есть идеи, как поступить?