оказывается надо сделать на основе двусвязного списка
я описывал вот так:
type
PNode = ^Node;
Node = record
Info:Char;
Next:PNode;
end;
TQueue = class
private
head,tail:PNode;
public
function Empty:Boolean;
procedure Push (Value:Char);
procedure Pop (var Value:Char);
constructor Create;
destructor Destroy; override;
end;
L,R :PNode;
procedure TQueue.Push (Value:Char);
var P:PNode;
begin
new(P);
p^.info:=value;
p^.next:=nil;
if empty then head:=p
else tail^.next := p;
tail:=p;
end;
procedure TQueue.Pop (var Value:Char);
var P:PNode;
begin
if not Empty then
begin
value:=head^.info;
p:=head;
head:=p^.next;
if head=nil then tail:=nil;
dispose(p);
end;
end;
procedure TQueue.Push (Value:Char);
var P:PNode;
begin
new(P);
p.info:=value;
if empty then
begin
head:=p;
p.next:=nil;
end
else
begin
tail.R := p;
p.next:=tail;
end;
tail:=p;
end;
procedure TQueue.Pop (var Value:Char);
var P:PNode;
begin
if not Empty then
begin
value:=p.info;
p:=head;
head:=p.next;
if head=nil then tail:=nil;
dispose(p);
end;
end;
Push я бы переделал вот так:
procedure TQueue.Push(Value:Char);
var P:PNode;
begin
new(P);
with p^ do begin
info:=value;
prev := tail; next := nil;
end;
if empty then head := p
else tail^.next := p;
tail := p
end;
ууу пасибки, дело в том что на самом деле в задании не было написано про список, и реализовав его с 1 указателем я спросил у препода, типа как делать - наподобие стека только с головой и хвостом, а он мне и сказал, мол - да только как двусвязный кароче походу он просто не сам не понял и меня запутал