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

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

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

> Сортировка списка, работа с указателями
Yevgeny
сообщение 18.01.2008 22:40
Сообщение #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 килобайт ) Кол-во скачиваний: 557
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 10:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"