IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите со "Связанными списками" в Pascal (https://www.imho.ws/showthread.php?t=45469)

Rifle 08.12.2003 14:54

Помогите со "Связанными списками" в Pascal
 
буду очень признателен тому, кто может помочь с программой на Pascal с использованием связанных списков. Програма должна быть неочень сложной. А просто показывать суть связанных списков. Заранее благодарен!

dr-evil 08.12.2003 15:19

опиши что конкретно ты не понимаешь

Rifle 08.12.2003 15:40

Связанный список - список (структура данных), элементы которого не обязательно расположены в памяти последовательно. Доступ к следующему элементу осуществляется с помощью указателя, хранящегося в предыдущем элементе списка. У последнего элемента указатель имеет специальное значение, по которому определяется конец списка. Список может быть двунаправленным, когда каждый его элемент содержит ссылки как на следующий, так и на предшествующий элементы.
Вот на ету тему мне нужна простенькая програма

RaZEr 08.12.2003 15:52

Код:

Type
    Link = ^Node;
    Node = record
        Data: integer;
        Next: Link;
    End;

Var
    Head, z: link;

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

procedure insert_after( v : integer; t : link );
var
x : link;
begin
    new(x);
    x^.data := v;
x^.next := t^.next;
    t^.next := x;
end;

procedure delete_next( t : link );
var
    del: link;
begin
del := t^.next;
t^.next := t^.next^.next;
dispose(del);
end;


Rifle 08.12.2003 17:27

Это несовсем то что я имел ввиду. Насколько я понимаю это пример работы с указателями. Если можно чтонить по связанным спискам.

Saruman 08.12.2003 17:42

Rifle
А связанный список, вообще-то, через эти самые указатели и реализуется.

dr-evil 08.12.2003 17:50

Rifle
---------------------- ---------------------- ----------------------
| data | pointer | -> | data | pointer | -> | data | nil |
---------------------- ---------------------- ----------------------


вот структура простейшего однонаправленного списка

RaZEr 08.12.2003 18:02

Цитата:

Это несовсем то что я имел ввиду. Насколько я понимаю это пример работы с указателями. Если можно чтонить по связанным спискам.
Давай начнем с того, почему это "несовсем то что я имел ввиду" ...

Rifle 08.12.2003 18:19

Ну связанный список реализуется через указатели ето да! Но в том коде что ты написал происходит просто помешение и удаление значения из стека. Или я что-то нетак понял???

RaZEr 08.12.2003 19:27

Вообщем с тобой все ясно. Что я могу сказать - жди пока кто-нибудь запостит код попадающий именно под твое представление о связанных списках.

Rifle 08.12.2003 19:57

:(

someone312002 10.12.2003 14:32

Эт конечно всё интересно (списки) только одна заковыка: может статься так, что у этого списка будет не просто "лестница", а "дерево лестниц". О когда ты попляшешь.
читал где-то год назад про организацию хранения данных, структуированных данных, если мне моя память не изменяет, то ищи "дерево ноды оракл" в яндексе, там тебе будет всё (ВСЁ) объяснено. Постараюсь и я найти, а пока - прочти мой пост и пошевели руками по клаве, не найдёшь - кинь сюда сообщение - помогу найти

CEO 11.12.2003 20:55

Rifle
Цитата:

Насколько я понимаю это пример работы с указателями. Если можно чтонить по связанным спискам.
Каждый элемент списка представляет собой запись, состоящую из двух частей. Первая часть -- иняормационная. Вторая часть обеспечивает связь со следующим элементом списка.

Вот, например один из возможных вариантов списка -- программа, создающая и читающая список чисел:

type p_subject=^subject;
subject=record
number:longint;
next: p_subject;
end;
var top: p_subject;
run: p_subject;
buf: longint;
i:integer;
begin
for i:= 1 to 5 do
begin
buf:=i;
new(run);
run^.number:=buf;
run^.next:=top;
top:=run;
end;
while run<>nil do begin
writeln(run^.number);
run:=run^.next;
end;
end.

Из списка можно удалить любой элемент, можно так же и добавить элемент в любое место списка. Существует так же возможность сортировать данные в списке по какому-либо признаку.

aleks_k2 12.12.2003 13:54

Цитата:

CEO
Суть в принците правильная, но не хватает инициализации Top.
и из-за отсутствия отступов трудно что-либо понять.


type p_subject=^subject;
subject=record
number:longint;
next: p_subject;
end;
var top: p_subject;
run: p_subject;
buf: longint;
i:integer;
begin
{ Не хватало!}
top:=nil;
{!!}
for i:= 1 to 5 do begin
buf:=i;
new(run);
run^.number:=buf;
run^.next:=top;
top:=run;
end;
while run<>nil do begin
writeln(run^.number);
run:=run^.next;
end;
end.

CEO 12.12.2003 14:04

aleks_k2 :нуда, это я просто невнимательно набирал...

aleks_k2 12.12.2003 14:42

Кстати как RaZEr смог поместить программу с отступами?

someone312002 06.01.2004 18:13

...в догонку к своему прошлому сообщению:
1. искать надо "Дерево структура графы SQL"
2. Если не хочется искать, то просто кликни сюда .

С НАСТУПАЮЩИМ РОЖДЕСТВОМ ВСЕХ!!!


Часовой пояс GMT +4, время: 15:31.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.