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

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

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

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


Новичок
*

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

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


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


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

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

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


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

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

Вот вариант программы, который осуществляет заполнение списка и распечатку его в конце.
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:pList;
s:string;

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

 





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