Delphi 2009 泛型容器单元(Generics.Collections)[2]: TQueue<T>

TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.

TQueue 主要有三个方法、一个属性:
Enqueue(入列)、Dequeue(出列)、Peek(查看下一个要出列的元素);
Count(元素总数).

-------------------------------------------------------------------------------------------------------------------------------------------------------------

 1 unit Unit1;
 2 
 3 interface
 4 
 5 uses
 6   Generics.Collections, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
 7   System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 8 
 9 type
10   TRec = record
11     Name: string;
12     Age: Word;
13   end;
14 
15 type
16   TForm1 = class(TForm)
17     Memo1: TMemo;
18     Button1: TButton;
19     Button2: TButton;
20     Button3: TButton;
21     procedure FormCreate(Sender: TObject);
22     procedure FormDestroy(Sender: TObject);
23     procedure Button1Click(Sender: TObject);
24     procedure Button2Click(Sender: TObject);
25     procedure Button3Click(Sender: TObject);
26   private
27     var
28       Queue: TQueue<TRec>;  {定义一个泛型 TQueue 类, 这指定了要用于上面定义的 TRec 记录}
29   public
30     { Public declarations }
31   end;
32 
33 var
34   Form1: TForm1;
35 
36 implementation
37 
38 {$R *.dfm}
39 
40  {入列: Enqueue}
41 
42 procedure TForm1.Button1Click(Sender: TObject);
43 var
44   rec: TRec;
45 begin
46   rec.Name := StringOfChar(Char(65 + Random(26)), 3);
47   rec.Age := Random(150);
48   Queue.Enqueue(rec);
49   Text := Format('当前队列成员总数: %d', [Queue.Count]);
50 
51   {让 Memo1 配合显示}
52   Memo1.Lines.Add(Format('%s, %d', [rec.Name, rec.Age]));
53 
54 end;
55 
56 {出列: Dequeue}
57 procedure TForm1.Button2Click(Sender: TObject);
58 var
59   rec: TRec;
60 begin
61   if Queue.Count = 0 then
62     Exit;
63   rec := Queue.Dequeue;
64   ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));
65   Text := Format('当前队列成员总数: %d', [Queue.Count]);
66 
67   {让 Memo1 配合显示}
68   Memo1.Lines.Delete(0);
69 end;
70 
71 {下一个出列的元素: Peek}
72 procedure TForm1.Button3Click(Sender: TObject);
73 var
74   rec: TRec;
75 begin
76   if Queue.Count = 0 then
77     Exit;
78   rec := Queue.Peek;
79   ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));
80 end;
81 
82 procedure TForm1.FormCreate(Sender: TObject);
83 begin
84   Queue := TQueue<TRec>.Create;
85 
86   Memo1.Clear;
87   Button1.Caption := Button1.Caption + ' 入列';
88   Button2.Caption := Button2.Caption + ' 出列';
89   Button3.Caption := Button3.Caption + ' 下一个出列的...';
90 end;
91 
92 procedure TForm1.FormDestroy(Sender: TObject);
93 begin
94   Queue.Free;
95 end;
96 
97 end.
原文地址:https://www.cnblogs.com/redhat588/p/12762967.html