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

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

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

> Динамические структуры данных
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


Составить программу . которая переносит в конец непустого списка L эго первый элемент
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Теперь у тебя есть несколько (много) орехов, зарытых в ямки с записками. И тут ты вспоминаешь: первый орех был грецкий, а все остальные - обычные лесные.. И ты решаешь: грецкий орех надо оставить на закуску, то есть съесть последним. Но как это сделать? ведь он лежит в самой первой ямке!

Первая мысль: переложить все орехи по новой. Но это столько трудов... и делать нужно аккуратно..
Вторая мысль: переложить только первый и последний орехи. Но грецкий орех такой здоровенный, он едва влезает тебе в пасть - тащить его тяжело..
И вдруг тебя озаряет: надо переложить только записки!

1. Берешь самую первую записку (из спец.укромного места) - она указывает на ямку с грецким орехом - и кладешь ее пока в карман.

2. Берешь записку из первой ямки (с грецким орехом) - она указывает на вторую ямку - и кладешь ее в спец.укромное место. Теперь список начинается со второй ямки, а в бывшей первой ямке (с грецким орехом) записки нет совсем.

3. Проходишь по всему списку, находишь последнюю ямку (в ней нет записки) и кладешь туда записку из кармана, которая указывает на ямку с грецким орехом. Она была первой - стала последней (на нее указывает бывшая последняя ямка, которая теперь стала предпоследней). Записки в ней нет (см. п.2), что согласуется с признаком последней ямки.

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

Вот программа, которая реализует приведенный алгоритм:
type
pList=^tList;
tList=record
Next:pList; {записка-указатель на след ямку}
Q:string {тут будет сам орех}
end;

procedure AddToList(s:string; var L:pList);
var
M:pList;
begin
if L=Nil then begin {если ямок еще не было}
New(L); {выкапываем самую первую ямку}
M:=L
end {если ямки уже были}
else begin
M:=L;
while M^.Next<>Nil do M:=M^.Next; {находим последнюю из них}
New(M^.Next); {выкапываем следующую и кладем записку, где она}
M:=M^.Next
end;
M^.Q:=s; {кладем орех в ямку}
M^.Next:=Nil {убираем записки, которые могли случайно оказаться в ямке}
end;

procedure PrintList(L:pList);
begin
while L<>Nil do with L^ do begin
WriteLn(Q); {достаем орех}
L:=Next {переходим к следующей ямке}
end
end;

procedure InitList(var L:pList);
begin
L:=Nil {кладем записку, что орехов нет}
end;

var
Quatations,M,t:pList;
s:string;

begin
InitList(Quatations);
WriteLn('Введите несколько цитат (для завершения введите пустую строку):');
repeat
ReadLn(s); {находим орех}
if s<>'' then AddToList(s,Quatations) {кладем его в следующую ямку}
until s='';

if Quatations=Nil then WriteLn('Список пуст!')
else if Quatations^.Next<>Nil then begin
WriteLn('Введенный список:');
PrintList(Quatations);
t:=Quatations; {это твой карман}
Quatations:=Quatations^.Next; {в начало кладем записку из первой ямки}
M:=Quatations;
while M^.Next<>Nil do M:=M^.Next; {проходим по всем ямкам до последней..}
M^.Next:=t; {.. и кладем в нее записку из кармана}
t^.Next:=Nilж
WriteLn; WriteLn('Переставленный список:');
PrintList(Quatations)
end
end.

Теперь тебе понятно, что такое списки?..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
kess   Динамические структуры данных   2.05.2007 2:53
volvo   Для начала надо составить программу, которая иници…   2.05.2007 3:01
Lapp   kess, читай внимательнее: Для начала надо состави…   2.05.2007 3:47
kess   Составить программу . которая переносит в конец н…   2.05.2007 3:27
kess   program spisok_18; uses crt; type mas=array[1..100…   3.05.2007 3:34
Lapp   задание списка.... можно так?? Нет, так нельзя.…   3.05.2007 5:12
kess   как можно первый эл-т перенети в конец?   3.05.2007 3:55
мисс_граффити   У тебя пока нет ни списка, ни последнего элемента,…   3.05.2007 4:26
kess   У тебя пока нет ни списка, ни последнего элемента…   3.05.2007 4:42
volvo   В посте №4 тебе привели ссылку, по которой показан…   3.05.2007 5:12
kess   В посте №4 тебе привели ссылку, по которой показа…   3.05.2007 5:29
Lapp   да я читала... тока всё равно не пойму как этот с…   3.05.2007 5:43
kess   Не значит ли это, что надо прочитать еще раз? я …   3.05.2007 5:47
Lapp   я просто не понимаю...... ((((((( ладно, могу п…   3.05.2007 6:36
kess   ладно, могу попробовать тебе это рассказать. толь…   3.05.2007 6:53
мисс_граффити   ну в курсе, но учитывая, что я вторые сутки вообщ…   3.05.2007 14:14
Lapp   Смотри. Допустим, ты составляешь список цитат (то …   3.05.2007 7:22
kess   Program spisok; Uses CRT; Type mas=array[1..10] of…   3.05.2007 7:30
Lapp   Так возможно?? нет, kess.. Это и близко не леж…   3.05.2007 7:59
Lapp   Аналогия с кладовками и столами не очень хороша. …   3.05.2007 8:38
Lapp   Теперь у тебя есть несколько (много) орехов, зарыт…   3.05.2007 9:36
volvo   Lapp, вот ты когда объясняешь что-то, ты намеренно…   3.05.2007 12:05
Lapp   Да, намеренно.. :) Я считаю, что человек должен вн…   3.05.2007 13:06


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

 





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