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 4:38
Сообщение #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   Динамические структуры данных   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:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"