Написать процедуру включения элементов в очередь и процедуру исключения из очереди
Помогите поалуйста, кто чем может
Написать процедуру включения элементов в очередь
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
[syntax='pascal']
{Процедура добавляющая элемент в очередь}
procedure AddElem(var stek1:List;znach1:TInf);
var
tmp:List;
begin
GetMem(tmp,sizeof(TList)); {выделяем в памяти место для нового элемента}
tmp^.next:=stek1; {указатель на следующий элемент "направляем" на хвост очереди}
tmp^.data:=znach1; {добавляем к элементу данные}
stek1:=tmp; {хвост очереди изменился, надо перенести и указатели на неё}
end;
{Процедура удаления элемента по указателю}
Procedure DelElem(var stek1:List;tmp:List);
var
tmpi:List;
begin
if (stek1=nil) or (tmp=nil) then {если очередь пуст или указатель никуда не указывает, то выходим}
exit;
if tmp=stek1 then {если мы удаляем элемент который является хвостом очереди, то}
begin
stek1:=tmp^.next;{следует перенести вершину и}
FreeMem(tmp,SizeOf(TList)); {высвободить память из под элемента}
end
else {в случае, если удаляемый элемент не хвост очереди, то}
begin
tmpi:=stek1; {ставим указатель на хвост очереди}
while tmpi^.next<>tmp do {доходим до элемента стоящего "перед" тем, который нам следует удалить}
tmpi:=tmpi^.next;
tmpi^.next:=tmp^.next; {указатель элемента переносим на следующий элемент за удаляемым}
FreeMem(tmp,sizeof(TList)); {удаляем элемент}
end;
end;
[/syntax]
Это код, но начинает выдавать ошибки с самого начала
Помогите найти их)))
{Процедура добавляющая элемент в очередь}
procedure AddElem(var stek1:List;znach1:TInf);
var
tmp:List;
begin
GetMem(tmp,sizeof(TList)); {выделяем в памяти место для нового элемента}
tmp^.next:=stek1; {указатель на следующий элемент "направляем" на хвост очереди}
tmp^.data:=znach1; {добавляем к элементу данные}
stek1:=tmp; {хвост очереди изменился, надо перенести и указатели на неё}
end;
{Процедура удаления элемента по указателю}
Procedure DelElem(var stek1:List;tmp:List);
var
tmpi:List;
begin
if (stek1=nil) or (tmp=nil) then {если очередь пуст или указатель никуда не указывает, то выходим}
exit;
if tmp=stek1 then {если мы удаляем элемент который является хвостом очереди, то}
begin
stek1:=tmp^.next;{следует перенести вершину и}
FreeMem(tmp,SizeOf(TList)); {высвободить память из под элемента}
end
else {в случае, если удаляемый элемент не хвост очереди, то}
begin
tmpi:=stek1; {ставим указатель на хвост очереди}
while tmpi^.next<>tmp do {доходим до элемента стоящего "перед" тем, который нам следует удалить}
tmpi:=tmpi^.next;
tmpi^.next:=tmp^.next; {указатель элемента переносим на следующий элемент за удаляемым}
FreeMem(tmp,sizeof(TList)); {удаляем элемент}
end;
end;
[/syntax]
Это код, но начинает выдавать ошибки с самого начала
Помогите найти их)))
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
какой конкретно код приводит к ошибке? как вызываются эти процедуры?

1-ый код самое начало программы
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
стало-быть в процедуре добавления элемента....
навскидку, емнип, SizeOf(TList) = 4 байта всегда, ибо указатель
мобыть там должно быть SizeOf(List) - без Т?
типов вы не приводите...
навскидку, емнип, SizeOf(TList) = 4 байта всегда, ибо указатель
мобыть там должно быть SizeOf(List) - без Т?
типов вы не приводите...
