Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2013, 01:06   #1
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию Односвязный список. нужны объяснения.

Код:
uses crt;
type sp = ^elem;
     elem = record
          inf:integer;
          next:sp;
          end;
     mass = array[1..10] of integer;
var head, p, p1:sp;
    a:mass;
    i:integer;
begin
     head:= nil;
     p:= nil;
     p1:= nil;
     writeln('Содержимое массива a');
     randomize;
     for i:= 1 to 10 do
     begin
         a[i]:= 10 + random(100);
         write(a[i], ' ');
     end;
         
     for i:= 1 to 10 do
     begin
          if i = 1 then
          begin
             new(p);
             p^.next:= nil;
             p^.inf:= a[i];
             head:= p;
             p1:= p;
          end
          else
          begin
               new(p);
               p^.next:= nil;
               p^.inf:= a[i];
               p1^.next:= p;
               p1:= p;
          end;
     end;
     
     writeln('Содержимое списка');
     p:= head;
     while p <> nil do
     begin
          write(p^.inf, ' ');
          p:= p^.next;
     end;
     
end.
Всё понятно кроме самого главного. Прокомментируйте пожалуйста.

Код:
for i:= 1 to 10 do
     begin
          if i = 1 then
          begin
             new(p); // выделяем место
             p^.next:= nil; // ссылка указателя на 0
             p^.inf:= a[i]; // в информационную часть присвоили число
             head:= p; // запомнили начало
             p1:= p; //       объясните пожалуйста что здесь происходит и зачем.
          end
          else
          begin
               new(p);
               p^.next:= nil;
               p^.inf:= a[i];
               p1^.next:= p; //       и здесь.
               p1:= p;           //       и здесь.
          end;
     end;
Я конечно понимаю что p1:= p это присвоить адрес p в p1, но зачем это делается и как так получается что в результате использования постороннего указателя всё выстраивается ровно в список и работает.
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.

Последний раз редактировалось dima1257; 06.12.2013 в 01:32.
dima1257 вне форума Ответить с цитированием
Старый 06.12.2013, 10:54   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

new(p); // выделяем место под элемент списка
заполняем указатель и значение этого новоиспеченого элемента
p^.next:= nil; // ссылка указателя на 0
p^.inf:= a[i]; // в информационную часть присвоили число

head:= p; // запомнили начало

помещаем в наш общий список p1 значение созданного p в размере 1 шт. с указателем на следующий пустой элемент и значением массива a[i]
p1:= p; //
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 07.12.2013, 14:39   #3
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

вот теперь всё понятно. спасибо!
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Односвязный список ZavriK Помощь студентам 2 02.05.2012 22:27
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52