你的队列多大,是存贮什么类型的? 给你写个例子长度10个元素,存贮整形 TQueue = class private FQueue:array[1..10] of integer; CurentRearPos:integer; NumOfElem:integer; protected procedure InitQueue; public constructor Create; procedure pushelem(value:integer); function popelem:integer; end;constructor TQueue.Create; begin InitQueue; end;procedure TQueue.InitQueue; var i:integer; begin for i:=1 to 10 do FQueue[i]:=0; CurentRearPos:=1;NumOfElem:=0; end;function TQueue.popelem: integer; begin if NumOfElem>0 then begin result:=FQueue[1]; Dec(CurentRearPos);Dec(NumOfElem); end else raise Exception.Create('The Queue is empty.'); end;procedure TQueue.pushelem(value:integer); begin if NumOfElem<10 then begin FQueue[CurentRearPos]:=Value; inc(NumOfElem);inc(CurentRearPos); end else raise Exception.Create('The Queue is full.'); end;
改正一下,上面的popelem函数有点错,改正如下: function TQueue.popelem: integer; var i:integer; begin if NumOfElem>0 then begin result:=FQueue[1]; for i:=1 to CurentRearPos-1 do FQueue[i]:=FQueue[i+1]; Dec(CurentRearPos);Dec(NumOfElem); end else raise Exception.Create('The Queue is empty.'); end;
比如字符串,TStringList.Add()实现进入
取出TStringList[0]处理,然后TStringList.Delete(0)
wolf2005:
如果单纯的字符串用TList或TStringList是一种方法
比如字符串,TStringList.Add()实现进入
取出TStringList[0]处理,然后TStringList.Delete(0)如果是结构体或别的什么的最好用指针先进先出处理起来是比较很简单的
private
FQueue:array[1..10] of integer;
CurentRearPos:integer;
NumOfElem:integer;
protected
procedure InitQueue;
public
constructor Create;
procedure pushelem(value:integer);
function popelem:integer;
end;constructor TQueue.Create;
begin
InitQueue;
end;procedure TQueue.InitQueue;
var
i:integer;
begin
for i:=1 to 10 do FQueue[i]:=0;
CurentRearPos:=1;NumOfElem:=0;
end;function TQueue.popelem: integer;
begin
if NumOfElem>0 then
begin
result:=FQueue[1];
Dec(CurentRearPos);Dec(NumOfElem);
end
else
raise Exception.Create('The Queue is empty.');
end;procedure TQueue.pushelem(value:integer);
begin
if NumOfElem<10 then
begin
FQueue[CurentRearPos]:=Value;
inc(NumOfElem);inc(CurentRearPos);
end
else
raise Exception.Create('The Queue is full.');
end;
function TQueue.popelem: integer;
var
i:integer;
begin
if NumOfElem>0 then
begin
result:=FQueue[1];
for i:=1 to CurentRearPos-1 do
FQueue[i]:=FQueue[i+1];
Dec(CurentRearPos);Dec(NumOfElem);
end
else
raise Exception.Create('The Queue is empty.');
end;