本文整理自网络,侵删。
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.
TStack 主要有三个方法、一个属性:Push(压栈)、Pop(出栈)、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 Stack: TStack<TRec>; {定义一个泛型 TStack 类, 这指定了要用于上面定义的 TRec 记录}
{建立}procedure TForm1.FormCreate(Sender: TObject);begin Stack := TStack<TRec>.Create;
Memo1.Clear; Button1.Caption := Button1.Caption + ' 压栈'; Button2.Caption := Button2.Caption + ' 出栈'; Button3.Caption := Button3.Caption + ' 下一个出栈的...';end;
{释放}procedure TForm1.FormDestroy(Sender: TObject);begin Stack.Free;end;
{压栈: Push}procedure TForm1.Button1Click(Sender: TObject);var rec: TRec;begin rec.Name := StringOfChar(Char(65 + Random(26)), 3); rec.Age := Random(150); Stack.Push(rec); Text := Format('当前队列成员总数: %d', [Stack.Count]);
{让 Memo1 配合显示} Memo1.Lines.Add(Format('%s, %d', [rec.Name, rec.Age]));end;
{出栈: Pop}procedure TForm1.Button2Click(Sender: TObject);var rec: TRec;begin if Stack.Count = 0 then Exit; rec := Stack.Pop; ShowMessage(Format('%s, %d', [rec.Name, rec.Age])); Text := Format('当前队列成员总数: %d', [Stack.Count]);
{让 Memo1 配合显示} Memo1.Lines.Delete(Memo1.Lines.Count - 1);end;
{下一个出列的的元素: Peek}procedure TForm1.Button3Click(Sender: TObject);var rec: TRec;begin if Stack.Count = 0 then Exit; rec := Stack.Peek; ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));end;
end.
相关阅读 >>
扩展 Delphi 线程 使之传递参数.(给匿名线程增加参数)
Delphi 时间与相关类型(2) - tdate、ttime、ttimestamp
更多相关阅读请进入《Delphi》频道 >>