Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.09;
Скачать: CL | DM;

Вниз

двухсвязные списки   Найти похожие ветки 

 
Ag2002   (2002-11-30 11:25) [0]

Подскажите пожалуйста, вот я инициализирою элементы динамического двухсвязного списка:

type
position = ^celltype;
celltype = record
element: integer;
next, previous: position;
end;

var
head, z: position;
...
procedure list_initialize;
begin
new(head);
new(z);
head^.previous := z;
z^.previous := nil;
end;
...

Теперь я добавляю туда данные:

procedure insert_after(sp: integer;head:position);
var
x : position;
begin
new(x);
x^.element := sp;
head^.next := x;
x^.previous := head;
end;


А как теперь мне сделать просмотр всего списка когда я введу туда значения, следующий код ничего не выводит:

procedure ViewList;
var
Curr: position;
begin
Curr := head^.previous;
While Curr^.previous <> nil do
begin
writeln(Curr^.element);
curr :=curr^.previous;
end;
write("Все выведенно");
readln;
end;


 
AlexT1000   (2002-11-30 11:53) [1]

мне кажется ты неправильно добавляешь элементы.
при новом добавлении ты теряешь ссылку на предыдущий элемент.
нарисуй схему на бумаге лучше поймешь.


 
Ag2002   (2002-11-30 11:54) [2]

а как надо


 
AlexT1000   (2002-11-30 12:22) [3]

можно по разному . опиши полнее ,что тебе нужно. т.е. нафига двусвязность

что вообще нужно сделать?


 
Юрий Зотов ©   (2002-11-30 12:33) [4]

1. Curr := head^.previous;
И после этого Curr = Z.

2. While Curr^.previous <> nil do...
Так как Curr=Z, а Z^.previous=nil, то цикл не проходится ни разу. Соответственно, ничего и не выводится.

3. Присоединяюсь к AlexT1000 - нарисуйте схему ссылок на бумаге.


 
TTCustomDelphiMaster ©   (2002-11-30 12:36) [5]


> Ag2002 (30.11.02 11:54)
> а как надо


Например так:

procedure Add(sp: integer; var head: position);
var
x : position;
begin
new(x);
x^.element := sp;
x^.previous := head;
head := x;
if not Assigned(z) then
z := head;
end;

procedure ViewList;
var
Curr: position;
begin
Curr := head;
Form1.Memo1.Clear;
While Curr <> nil do
begin
form1.Memo1.Lines.Add(Inttostr(curr^.element));
curr :=curr^.previous;
end;
end;


 
AlexT1000   (2002-11-30 12:43) [6]

procedure list_initialize;
begin
new(head);
head^.previous := head;
head^.next := nil;
end;


procedure AddNew(sp: integer);
var
temp,x : position;
begin
temp:= Head^.previous;
new(x);
x^.next := nil;
x^.previous := Head^.previous;
x^.element := sp;
temp^.Next := x;
Head^.previous := x;
end;

может так





 
Ag2002   (2002-11-30 12:55) [7]

TTCustomDelphiMaster
При выводе получается бесконечный цикл


 
Ag2002   (2002-11-30 13:05) [8]

AlexT1000
Всё работает только вот при следующем выводе, значения выводятся те что надо, но они зацикливаюся, почему, это уже циклический список получается
procedure ViewList;
var
Curr: position;
begin
Curr := head;
While Curr <> nil do
begin
writeln("Число: ", Curr^.element);
curr := curr^.previous;
end;
write("Вывод списка окончен нажмите Enter.");
readln;
end;


 
Anatoly Podgoretsky ©   (2002-11-30 13:07) [9]

Ты на бумаге процесс разрисовал как рекомендовали?


 
AlexT1000   (2002-11-30 13:18) [10]

procedure ViewList;
var
Curr: position;
begin
Curr := head;
While Curr <> nil do
begin
writeln("Число: ", Curr^.element);
curr := curr^.next; //!!!!!!!!!!!
end;
write("Вывод списка окончен нажмите Enter.");
readln;
end;



Страницы: 1 вся ветка

Текущий архив: 2002.12.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-28106
avsh
2002-11-28 13:25
2002.12.09
Почему не работает процедура SetLength


1-27953
Nadine
2002-11-29 12:21
2002.12.09
Как содержимое поля BLOB перенести в файл *.doc или *.xls


1-27996
MiXenWorK
2002-11-29 14:48
2002.12.09
Цвет фона TImage


3-27889
Boriz
2002-11-21 15:48
2002.12.09
Требуется динамически создать Calculated поле


1-27993
Тормоззз
2002-11-29 14:34
2002.12.09
Передача строк из DLL в форму