Отсортировать введенные записи по возрастанию значений ключей - C (СИ)
Формулировка задачи:
С клавиатуры ввести набор записей с полями: <Ключ> <Сообщение> (ключ - целое число). Отсортировать введены записи по возрастанию значений ключей. В отсортированный массив ввести две новые записи так, чтобы сохранить общую упорядоченность массива. Распечатать результирующий массив. ( Использовать функции). Помогите пожалуйста уже почти неделю сижу.
Решение задачи: «Отсортировать введенные записи по возрастанию значений ключей»
textual
Листинг программы
struct Node
{
int val;
Node *next;
Node(int n) { // Интуитивная инициализация
val = n;
next = NULL;
}
};
struct List
{
Node *first;
List() {
first = NULL;
}
};
Node *obrat(List *list1, List **list2)
{
Node *temp, *temp2;/*2 указателя*/
List *list2 = NULL;/*list2 присвоен NULL*/
temp = list1->first;/*temp указывает на list1*/
while (temp)/*Пока не пуст*/
{
temp2 = temp->next;/*temp2 указывает на предыдущий temp-у элемент*/
temp->next = *list2;/*Предыдущий temp-y элемент указывает на верхушку list2*/
*list2 = temp;/*list2 указывает на верхушку temp*/
temp = temp2;/*temp указывает на temp2, т.е. перешли на предыдущую ячейку*/
}
return temp;
}
Объяснение кода листинга программы
В данном коде реализован алгоритм двусвязного списка, который, скорее всего, используется для хранения и сортировки данных.
- Структура
Nodeпредставляет собой элемент списка и содержит в себе значениеvalи указательnextна следующий элемент списка. - Структура
Listпредставляет собой список и содержит в себе указательfirstна первый элемент списка. - Функция
obrat(List *list1, List **list2)принимает два указателя: на список, который нужно отсортировать (list1), и на указатель на вершину второго списка (list2). В данной реализацииlist2инициализируется какNULL. - Внутри функции создаются два указателя:
tempиtemp2.tempуказывает на первый элемент спискаlist1, аtemp2- на предыдущий элементtemp. - Затем происходит обход списка
list1до тех пор, покаtempне станетNULL. - В процессе обхода каждый элемент
tempдобавляется в начало спискаlist2путем изменения указателяtemp2наtempи обновления указателяtempнаtemp2. - В конце функции возвращается
temp, который будет указывать на последний добавленный вlist2элемент. Таким образом, данный код, скорее всего, реализует сортировку списка по возрастанию значений ключей.