本文整理自网络,侵删。
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.
TQueue 主要有三个方法、一个属性:Enqueue(入列)、Dequeue(出列)、Peek(查看下一个要出列的元素);Count(元素总数).
本例效果图:
代码文件:unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); end;
var Form1: TForm1;
implementation
{$R *.dfm}
uses Generics.Collections; {Delphi 2009 新增的泛型容器单元}
type TRec = record Name: string; Age: Word; end;
var Queue: TQueue<TRec>; {定义一个泛型 TQueue 类, 这指定了要用于上面定义的 TRec 记录}
{建立}procedure TForm1.FormCreate(Sender: TObject);begin Queue := TQueue<TRec>.Create;
Memo1.Clear; Button1.Caption := Button1.Caption + ' 入列'; Button2.Caption := Button2.Caption + ' 出列'; Button3.Caption := Button3.Caption + ' 下一个出列的...';end;
{释放}procedure TForm1.FormDestroy(Sender: TObject);begin Queue.Free;end;
{入列: Enqueue}procedure TForm1.Button1Click(Sender: TObject);var rec: TRec;begin rec.Name := StringOfChar(Char(65 + Random(26)), 3); rec.Age := Random(150); Queue.Enqueue(rec); Text := Format('当前队列成员总数: %d', [Queue.Count]);
{让 Memo1 配合显示} Memo1.Lines.Add(Format('%s, %d', [rec.Name, rec.Age]));end;
{出列: Dequeue}procedure TForm1.Button2Click(Sender: TObject);var rec: TRec;begin if Queue.Count = 0 then Exit; rec := Queue.Dequeue; ShowMessage(Format('%s, %d', [rec.Name, rec.Age])); Text := Format('当前队列成员总数: %d', [Queue.Count]);
{让 Memo1 配合显示} Memo1.Lines.Delete(0);end;
{下一个出列的元素: Peek}procedure TForm1.Button3Click(Sender: TObject);var rec: TRec;begin if Queue.Count = 0 then Exit; rec := Queue.Peek; ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));end;
end.
相关阅读 >>
Delphi 10.2 新特性之―tfdbatchmovejsonwriter
Delphi实现进制转化(2进制,8进制,10进制,16进制)
更多相关阅读请进入《Delphi》频道 >>