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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2011, 22:44   #1
Mr_skiner
Пользователь
 
Аватар для Mr_skiner
 
Регистрация: 21.05.2010
Сообщений: 56
По умолчанию

Собственно вопрос
1)как создать двунаправленный список
2)как заполнить его ? допустим текстом с editа
3)как весь список отобразить (допустим в мемо?)

Хотелось бы понять как это все работает, поэтому если не сложно обьясните плз "для чайника"

Код:
Type
 tp=^el;
 el=record
 slovo:string;
 next:tp;
 prev:tp;
 end;
вроде бы обьявление правельное, но вот добавление...
Код:
procedure TForm1.add;
begin
  New(n);
  n^.slovo:=mas[j];
end;
но что то мне кажется, что чего то не хватает-в добавлении?



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Stilet; 20.04.2011 в 10:45.
Mr_skiner вне форума Ответить с цитированием
Старый 20.04.2011, 02:23   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

какои то замкнутыи цикл
Код:
tp=^el;
el=record next:tp;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 20.04.2011, 08:51   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ArtGrek, Вы, похоже, никогда не сталкивались со связными списками в Паскаль/Delphi. Рекомендую проработать эту тему и устранить пробел в образовании...


Mr_skiner
Цитата:
но что то мне кажется, что чего то не хватает-в добавлении?
Вы и правы и неправы одновременно.
фактически - того кода, что Вы привели - достаточно.
Но, в практической жизни, Вы, конечно, сразу же "потеряете" эту переменную, т.к.
1) Вы никуда не сохраняете её адрес.
2) Вы не проставляете (не заполняете) указатели next и prev

вот, примерно как надо (рекомендую разобрать и понять принципы..):
Код:
Type
   tp=^el;
   el=record
      slovo:string;
      next:tp;
      prev:tp;
   end;

var
   first, last : tp;

procedure tpInit; { инициализация списка }
begin
  first := nil; last := nil;
end;

procedure Print_forward(start: tp); { процедура печати элементов с первого(начало) }
begin
  if start = nil then writeln('List not init')
  else
  begin
    while (start <> nil) do
    begin
      write(start^.slovo, ' ');
      start := start^.next;
    end;
    WriteLn;
  end;
end;

procedure Print_back(start: tp); { процедура печати элементов с последнего(начало) }
begin
  if start = nil then writeln('List not init')
  else
  begin
    while (start <> nil) do
    begin
      write(start^.slovo, ' ');
      start := start^.prev;
    end;
    WriteLn;
  end;
end;


procedure tpInsert( s : string); {процедура вставки элементов в конец списка(информационная часть) }
var
  p : tp;
begin
  new(p);
  p^.slovo := s;
  p^.next := nil;
  if (first=nil) and (last=nil) {если пустой список} then
  begin
    first := p;
    first^.prev := nil;
  end
  else {список не пуст, добавляем элемент в конец и корректируем указатели}
  begin
    last^.next := p;
    p^.prev := last;
  end;
  last := p;
end;



{тело программы}
begin
   tpInit;
   tpInsert('Hello');
   tpInsert('Crazy');
   tpInsert('World');
   WriteLn('--- печать списка в прямом направлении ---');
   Print_forward(first);
   WriteLn('--- печать списка в обратном направлении ---');
   Print_back(last);
end.
разумеется, это далеко не всё, что можно делать со связным списком!
(как минимум ещё нужны: поиск в списке, удаление, сортировка, инвертирование ...)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки. Corpinccom Помощь студентам 2 12.10.2010 21:54
списки nataliya234 Помощь студентам 5 15.05.2010 14:11
Списки C++ paladinn Помощь студентам 1 27.05.2009 12:31
с++ списки Blizzz Общие вопросы C/C++ 3 04.12.2008 21:19