помогите, пожалуйста, с сортировкой односвязного списка. есть структура студент, формат фамилия_имя_отчество_возраст_успеваемость. нужно сделать сортировку по фамилии. ниже прикреплю свою неудачную попытку, саму структуру и небольшой кусок программы.
struct student
{
string name;
string surname;
string middlename;
float progress;
int age;
struct student* next;
};
struct list {
student st;
list *next;
};
void Print(list *b)
{
list *print = b;
while (print != NULL)
{
std::cout << print->st.surname << " " << print->st.name << " "
<< print->st.middlename << " " << print->st.age << " "
<< print->st.progress << endl;
print = print->next;
}
std::cout << "NULL\n";
}
void sort(list **begin)
{
list *t = new list;
list *t2 = *begin;
t = *begin;
while (t != 0)
{
list *t1 = t->next;
if (t1->st.surname < t2->st.surname)
{
list *tmp = t2;
t2 = t1;
t = t2;
}
t = t->next;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
forward_list <student> st;
list* begin = NULL;
list* head = nullptr;
list* item = nullptr;
for (;;) {
int x = menu();
switch (x) {
case 1:
{
Print(begin);
break;
}
case 8:
{
sort(&begin);
break;
}
Итак, у вас есть: структура с именем студента. То что вы именовали list
- это не список. Вообще вы как то странно поступили: создали этот list
, его передаете в функцию сортировки, но при этом список создаете из структур student
. Короче будем считать, что список это:
forward_list <student> st;
Что вам нужно, чтобы его отсортировать? Для начала нужно его наполнить, но это чисто ваша ответственность.
1) Операция больше или меньше для структур типа student
.С этим вообще никаких проблем, так как это зависит только от имени, а имя определено как string
, для которого уже есть эти операции
bool operator>(student &a, student &b)
{
return a.name > b.name;
}
2) Нужна функция сортировки. Для этого, в самом простом варианте, просто проходите список от начала до конца и сравниваете два рядом стоящих элемента, если первый больше, чем второй (для этого и нужна операция >
), то меняете их местами. И так несколько раз, пока весь список не будет отсортирован.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Решите пожалуйста 1)Дан двумерный массивПоменять местами вторую и четвертую строки 2)Все элементы массива, сумма индексов которых нечетна,...
Мне понадобился таймер который по истечению какого то времени вызывает событие, например std::functionВ Win32 API и в C# я очень часто использовал такие...
Помогите переделать програмку, чтобы она была оформлена как 3 файла - maincpp, class