Сортировка динамической структуры

173
18 декабря 2021, 02:30

У меня есть структура данных

struct LIBRARY
{
char number[20];
char FIO[30];
char name[30];
int year;
int kolvo;
};

Подскажите пожалуйста как выполнить сортировку по годам и вывести информацию

Полный код:

#include <iostream>
using namespace std;
struct LIBRARY
{
    char number[30];
    char FIO[30];
    char name[30];
    int year;
    int kolvo;
};
struct ITEM
{
    LIBRARY* Library;
    ITEM* next;
};
ITEM* create(LIBRARY* Library)
{
    ITEM* head = new ITEM;
    head->Library = Library;
    head->next = NULL;
    return head;
}
void add(LIBRARY* Library, ITEM* head)
{
    while (head->next)
    head = head->next;
    head->next = new ITEM;
    head->next->Library = Library;
    head->next->next = NULL;
    cout << endl;
}
LIBRARY* make()
{
    LIBRARY* Library = new LIBRARY;
    cin.ignore();
    cout << "Введите УДК книги: ";
    cin.getline(Library->number, 30);
    cin.ignore();
    cout << "Введите ФИО Автора: ";
    cin.getline(Library->FIO, 30);
    cin.ignore();
    cout << "Введите название книги: ";
    cin.getline(Library->name, 40);
    cout << "Введите год книги: ";
    cin >> Library->year;
    cout << "Введите кол-во книг: ";
    cin >> Library->kolvo;
    cout <<endl << "-----------------------------------" << endl;
    return Library;
}
void printLIBRARY(LIBRARY* Library) //вывод на экран  
{
    cout << "Номер книги: " << Library->number << endl;
    cout << "ФИО Автора: " << Library->FIO << endl;
    cout << "Название книги: " << Library->name << endl;
    cout << "Год книги: " << Library->year << endl;
    cout << "Количество книг: " << Library->kolvo << endl;
    cout << endl << "-----------------------------------" << endl;
}
ITEM* remove(ITEM* str)
{
    ITEM* tail = str, * head = str;
    char nomer[30];
    cin.ignore();
    cout << "Введите название книги" << endl;
    cin.getline(nomer, 30);
    while (head)
    {
        if (!strcmp(nomer, head->Library->name))
        {
            head->Library = NULL;
            if (tail == head)
                str = head->next;
            tail->next = head->next;
            tail = head;
            head = head->next;
        }
        else head = head->next;
    }
    cout << "Информация об этой книги удалена !" << endl;
    cout << endl << "-----------------------------------" << endl;
    return str;
}
int choice()
{
    int answer;
    cout << "Добавить новую книгу, введите: 1" << endl;
    cout << "Вывести все книги, введите: 2" << endl;
    cout << "Удалить информацию о книге, введите: 3" << endl;
    cout << "Выход, введите 4" << endl << endl;
    cout << "Ваш выбор: ";
    cin >> answer;
    cout << endl << "-----------------------------------" << endl;
    if (answer >= 1 && answer <= 5)
        return answer;
    else
        return 0;
}

int main()
{
    setlocale(LC_ALL, "Russian");
    ITEM* head = NULL;
    int ch;
    while (1)
    {
        ch = choice();
        if (ch == 1)
        {
            cout << endl;
            if (head == NULL)
                head = create(make());
            else
                add(make(), head);
        }
        else if (ch == 2)
        {
            cout << endl;
            int i = 0;
            int N = 0;
            ITEM* phead = head;
            while (head)
            {
                N++;
                head = head->next;
            }
            LIBRARY* buf;
            LIBRARY** pLibrary = new LIBRARY * [N];
            head = phead;
            while (head)
            {
                pLibrary[i] = head->Library;
                head = head->next;
                i++;
            }
            head = phead;
            for (i = 0;i < N;i++)
                printLIBRARY(pLibrary[i]);
        }
        else if (ch == 3)
        {
            head = remove(head);
        }
        else if (ch == 4)
        {
            break;
            cout << endl;
        }
    }
    return 0;
}
READ ALSO
Как найти элементы с заданным условием C# LINQ

Как найти элементы с заданным условием C# LINQ

Есть массив элементов типа int, например {-50, 2, 55, 985, 98515, -5354}

191
WPW Prism &amp; DryIoC constructor injection, есть ли?

WPW Prism & DryIoC constructor injection, есть ли?

Доброго времени сутокСтолкнулся с проблемой

78
Расжать PDF-файл

Расжать PDF-файл

Требуется расжать ПДФ, а именно: ПДФ хранится обычно в сжатом виде, типа:

107
проблема с IntelliSence VisualStudio 2019

проблема с IntelliSence VisualStudio 2019

В vs 2017 и до него Intellisense работал просто отличноЯ набирал текст, не важно с большой буквы, с ошибкой - visual studio сам выбирал вариант, подсвечивал...

94