我正在尝试在Pascal中实现一个简单的队列程序。这是代码:
type
tree = record
symbol: char;
lt, rt: ^tree;
end;
element = record
load : ^tree;
nxt : ^element;
prv : ^element;
end;
queue = record
first : ^element;
last : ^element;
end;
procedure element_init(var e : element);
begin
e.nxt := nil;
e.prv := nil;
end;
procedure queue_init(var q : queue);
begin
q.first := nil;
q.last := nil;
end;
function queue_empty(var q : queue): boolean;
begin
queue_empty := q.first = nil;
end;
procedure queue_append(var q : queue; var e : element);
begin
if queue_empty(q) then
begin
q.first := e;
end
else
begin
e.prv := q.last;
q.last := e;
end;
end;
队列是一个双向链接的元素列表,这些元素是包含指向类型tree
的指针的记录。此代码的问题在于:
procedure queue_append(var q : queue; var e : element);
begin
if queue_empty(q) then
begin
q.first := e;
end
else
begin
e.prv := q.last;
q.last := e;
end;
end;
我正在Error: Incompatible types: got "element" expected "queue.^element"
为什么呢?我已将queue
定义为具有first
类型的字段^element
。我传递函数queue
指针和element
指针。然后我将元素指针分配给first
的元素指针字段queue
...为什么这种机械不正确?
根据评论更改了功能:
procedure queue_append(var q : queue; e : elementPtr);
begin
if queue_empty(q) then
begin
q.first := e;
end
else
begin
e.prv := q.last;
q.last := e;
end;
end;
具有前面的定义:
elementPtr = ^element;