Задача
Подсчитать количество элементов списка, у которых равные соседи.
Посмотрите и исправьте, пожалуйста, мой код::
type
Tinf = integer;
Tptr = ^Tlist;
Tlist = record
inf:Tinf;
next,prev:Tptr;
end;
var
A:Tptr;
procedure create_list (var L:Tptr );
var e:Tinf;
begin
L:=nil;
while not eoln do
begin
read (e);
L:=new(Tptr);
L^.next:=nil;
L^.prev:=nil;
L^.inf:=e;
end;
readln
end;
function count (L:Tptr):integer;
var pl_1, pl_2: tptr; k:integer;
begin
k:=0;
L:=L^.next;
while (L <> nil) do
begin
pl_2 := L;
pl_1 := L;
pl_1:=pl_1^.next;
pl_2:=pl_2^.prev;
if pl_1^.inf = pl_2^.inf then
k:=k+1
else
L:=L^.next;
end;
count := k;
end;
{удаление списка}
Procedure ListDestroy(var L:Tptr);
var
p:Tptr;
begin
While L^.next <> Nil Do L:=L^.Next;
While L <> Nil Do
Begin
P:=L;
L:=L^.Prev;
Dispose(P);
End;
end;
begin {main}
write ('Введите элементы списка: ');
create_list(A);
writeln ('количество элементов списка, у которых равные соседи: ', count (A));
ListDestroy (A);
readln;
end.
Стоп!!!
Подскажите сначала как создать целый двусвязный список, только не так, как в ФАКе
Ну и функцию count проверьте))))
procedure create_list (var L:Tptr );
var
e: Tinf;
p, new_p: tptr;
begin
p := nil; L := nil;
while not eoln do begin
read (e);
new_p := new(Tptr);
new_p^.prev := p;
new_p^.next := nil;
new_p^.inf := e;
if p <> nil then p^.next := new_p;
p := new_p;
if L = nil then L := p;
end;
readln
end;
Volvo, спасибо create, но у меня функция count не работает.....
не пойму почему......
Потому, что не надо делать простое сложным:
function count(L: Tptr): integer;Вот и все...
var n: integer;
begin
n := 0;
while L <> nil do begin
if (L^.prev <> nil) and (L^.next <> nil) { <-- Проверяем есть ли оба соседа }
and
(L^.prev^.inf = L^.next^.inf) { <--- Если есть, то проверяем их равенство }
then inc(n);
L := L^.next;
end;
count := n;
end;
Да......
спасибо..... работает....
Почему тянет