Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Вниздвухсвязные списки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c