Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
4-28369
Griffin
2002-10-13 21:03
2002.12.09
Прозрачная цветная форма


1-28017
Dber
2002-11-29 16:32
2002.12.09
Date/Time в Accesse


3-27835
Vint
2002-11-20 11:03
2002.12.09
Проверка целостности таблицы


14-28275
-novichok-
2002-11-19 09:09
2002.12.09
С midi форматом что делать???


7-28311
NOE
2002-10-04 18:09
2002.12.09
Service





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский