Заполнение односвязного списка

313
19 декабря 2016, 20:00

Есть структура:

struck tel
{
int info;
tel *next;  //указатель на след элемент списка
} *begin, t;  //begin- указатель на начало

Функция для формирования списка:

tel* dob(tel *p, int in) {  
tel *t = new list;          // Захватываем память для элемента
    t -> info = in;         // Создаём информационную часть
    t -> next = p;          // Создаём адресную часть
return t;
}

Подскажите пожалуйста, как нужно дописать эту функцию, чтобы она сразу же сортировала элементы по убыванию info.

Answer 1

Вам нужно пройтись по списку в предположении, что он уже отсортирован, найти подходящее место для нового элемента так, чтобы список остался отсортированным после вставки, и, конечно, вставить элемент на найденное место.

Answer 2

Я бы на вашем месте не сортировал, а добавлял в то место куда необходимо. Пробегаем список от начала до конца, сравнивая элемент добавляемый нами с каждым. Если наш больше, запоминает куда указывал указатель у list в tmp, перезаписываем его чтобы указывал на наш элемент, а добавляемому элементу ставим next на tmp.

READ ALSO
Регулярные выражения в C++

Регулярные выражения в C++

Здравствуйте! Возникла необходимость в написании парсера на C++На входе имеем два файла, в одном лежат входные данные (которые мы и будем проверять),...

278
Реализация cat file | grep

Реализация cat file | grep

Здравствуйте! Как с помощью C++ реализовать передачу данных из потока? К примеру, команда grep получает данные из cat: cat file | grep Компилятор gcc, заранее...

267
Tcp в linux, программирование на с++

Tcp в linux, программирование на с++

Есть проблема: Программа работает с большим количеством клиентов и выделяет большое количество портовДля каждого клиента выделяется один...

264
Перевод с Delphi на C++/FASM

Перевод с Delphi на C++/FASM

Ищу перевод данной команды на язык С++ и FASM

241