IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Сортировка списка, работа с указателями
сообщение
Сообщение #1


The matrix has me!!!
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В наше время преподаватели программирования во многих вузах России становятся всё более требовательнее, и при сортировке линейных однонаправленных (не только) списков просят работать не с содержимым полей данных, а с самими указателями, поэтому я считаю, что данная тема будет актуальной.



Сортировка списка выбором

описание типов:

Type
tdata=string[15]; {может быть любой из известных типов}
tlist=^list;
list=record
data:tdata;
sled:tlist
end;



процедура создания списка
(обязательно с первым "пустым" элементом
для более удобной работы со списком при сортировке,
информация считывается построчно из текстового файла):

Procedure MakeList(var f:text; var first:tlist);
var
ukspis:tlist;
Begin
new(first);
new(first^.sled);
ukspis:=first^.sled;
readln(f,ukspis^.data);
while not eof(f) do
begin
new(ukspis^.sled);
ukspis:=ukspis^.sled;
readln(f,ukspis^.data);
ukspis^.sled:=nil;
end;
end;



процедура сортировки:

Procedure SortList_Choice(first:tlist);
Var
ukspis,firstnonsort,ukmin:tlist;

Procedure obmen(var uksp1,uksp2,first:tlist);
Var
uk1,uk2,uk3:tlist;
Begin
uk3:=first;
while uk3^.sled <> uksp1 do uk3:=uk3^.sled;

uk2:=first;
while uk2^.sled <> uksp2 do uk2:=uk2^.sled;

uk1:=uk2^.sled;
uk2^.sled:=uk3^.sled;
uk3^.sled:=uk1;

uk1:=uksp1^.sled;
uksp1^.sled:=uksp2^.sled;
uksp2^.sled:=uk1;

uk1:=uksp1;
uksp1:=uksp2;
uksp2:=uk1;
end; {obmen}

Begin
firstnonsort:=first^.sled;
ukmin:=first^.sled;
ukspis:=firstnonsort;
while firstnonsort <> nil do
Begin
ukspis:=firstnonsort;
ukmin:=ukspis;
while ukspis <> nil do
Begin
if ukspis^.data < ukmin^.data then ukmin:=ukspis;
ukspis:=ukspis^.sled
end;
obmen(firstnonsort,ukmin,first);
firstnonsort:=firstnonsort^.sled
end
end;



P.S. Все коды написаны лично мной (без использования ресурсов интернета), проверены на TurboPascal и отлично работают! Прикреплён исходник для самостоятельной проверки!
Прикрепленный файл  prog.rar ( 1.1 килобайт ) Кол-во скачиваний: 261
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 19:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name