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

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

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

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


Новичок
*

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

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


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


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

 



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