Страница 1 из 1

Pascal. связные списки.

Добавлено: 02 ноя 2008, 21:56
KaVale4ka
Надо как-то доделать-переделать чтобы был связный список из 6 случ. значений, процедура печати значений списка. А потом добавить новый узел в конец списка.
Пожайлусто-пожайлусто, помогите!!!!!
USES CRT;

TYPE
TKey = integer;
PNode = ^TNode;
TNode = record
key : TKey; next : PNode;
end;
{---------------------------------------}
PROCEDURE Init(p : PNode);
begin
p:= nil;
end;
{---------------------------------------}
PROCEDURE WriteLst(p : PNode);
begin
if p = nil then
Writeln('nil')
else begin
while p <> nil do
begin
Write(p^.key:4); p:= p^.next;
end;
Writeln;
end;
end;
{---------------------------------------}
PROCEDURE Push(var p : PNode; x : TKey);
var
q : PNode;
begin
New(q); q^.key:= x; q^.next:= p; p:= q;
end;
{---------------------------------------}
VAR
lst, p : PNode; i : byte; x : TKey;
BEGIN
CLrScr;
Init(lst);
Randomize;
for i:= 1 to 6 do begin
x:= random(20); Push(lst, x);
end;
WriteLst(lst);
REadln;
END.

Re: Pascal. связные списки.

Добавлено: 03 ноя 2008, 09:30
Naeel Maqsudov
[syntax=Delphi]
type
TKey = integer;
PNode = ^TNode;
TNode = record
key : TKey; next : PNode;
end;
{---------------------------------------}
PROCEDURE Init(var p : PNode);
begin
p:= nil;
end;
{---------------------------------------}
PROCEDURE Push(var p : PNode; x : TKey);
var
q : PNode;
begin
New(q); q^.key:= x; q^.next:= p; p:= q;
end;
{---------------------------------------}
PROCEDURE AddToTail(var p : PNode; x : TKey);
var
q : PNode;
begin
if p=nil then Push(p,x) else begin
q:=p;
while q^.next<>nil do q:=q^.next;
end;
New(q^.next); q^.next^.key:= x; q^.next^.next:= nil;
end;
{---------------------------------------}
PROCEDURE WriteLst(p : PNode);
begin
if p = nil then
Writeln('nil')
else begin
repeat
Write(p^.key); p:= p^.next;
if p<>nil then write('->');
until p=nil;
Writeln;
end;
end;
{---------------------------------------}
VAR
lst, p : PNode; i : byte; x : TKey;
BEGIN
Randomize;
Init(lst);
WriteLst(lst);
for i:= 1 to 6 do begin
x:= random(20);
Push(lst, x);
end;
WriteLst(lst);
AddToTail(lst,random(20));
WriteLst(lst);
Readln;
END.
[/syntax]

PS
Еше обратите внимание, в Вашей процедуре Init ошибка, которая скорее всего себя просто не проявляет. Необходимо использовать var для параметра p.
Ну и WriteLst я немного переделал... Мне так больше нравится.