Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Списки


Автор: peter86 3.6.2008, 19:39
Помогите написать процедуру, создающую кольцевой двунаправленный список.

Автор: baldina 3.6.2008, 19:45
что значит "создающую"?
тебе нужно определить
1. структуру данных (на основе record), содержащую данные и указатели на предыдущий-следующий узел списка
2. написать процедуру инициализации таким образом, что бы голова указывала на хвост и наоборот. для списка из одного элемента он будет указывать сам на себя
3. написать процедуры, добавляющие/удаляющие элемент списка
4. процедуру обхода списка.

вообще-то кольцевой список предопределенного размера можно создать на основе массива

сам что-нить попробовал? какие возникли проблемы?

Автор: peter86 3.6.2008, 20:06
Написать процедуру, например - Procedure Create(var L:DP);
Где 
DP = ^DType;
DType = record
  Inf:Integer;
  Next:DP;
  Prev:DP;
end;
В этой процедуре с клавиатуры вводятся N чисел, которые становятся элементами списка;
В результате L указывает на начало списка.

Автор: volvo877 3.6.2008, 21:02
Практически идентично созданию обычного двухсвязного списка, только добавляется еще установка first^.prev и last^.next:
Код
type
  DP = ^DType;
  DType = record
    Data: integer;
    Prev, Next: DP;
 end;

procedure CreateRing(var first: DP; const n: integer);
var
  p, last: DP;
  i, X: integer;
begin
  last := nil;

  for i := 1 to n do begin
    write(i:3, ' => '); readln(s);
    new(p);
    p^.data := s; p^.next := nil; p^.prev := last;

    if First = nil then First := p
    else last^.next := p;

    last := p;
  end;
  first^.prev := last;
  last^.next := first;
end;

Автор: peter86 3.6.2008, 21:29
volvo877, а разве в двусвязном кольцевом списке prev первого элемента не ссылается на последний?
И еще может есть у кого-нибудь процедуры добавления и удаления элемента, после указанного.
Например Procedure Del(P:DP; N:Integer);
Где P - элемент списка, после которого следует добавить N.


Автор: volvo877 3.6.2008, 22:02
Цитата(peter86 @  3.6.2008,  21:29 Найти цитируемый пост)
а разве в двусвязном кольцевом списке prev первого элемента не ссылается на последний?
А читать ты не научился?
Цитата(volvo877 @  3.6.2008,  21:02 Найти цитируемый пост)
только добавляется еще установка first^.prev и last^.next:


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)