跟着万一老师学习笔记
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.
TStack 主要有三个方法、一个属性:
Push(压栈)、Pop(出栈)、Peek(查看下一个要出栈的元素);
Count(元素总数).
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.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); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses System.Generics.Collections; type TRec = record Name: string; Age: Integer; end; var Stack: TStack<TRec>; {压栈 PUSH} procedure TForm1.Button1Click(Sender: TObject); var rec: TRec; begin rec.Name := StringOfChar(Char(65 + Random(26)), 3); rec.Age := Random(250); Stack.Push(rec); Text := Format('当前队列成员总数: %d', [Stack.Count]); {让 Memo1 配合显示} Memo1.Lines.Add(Format('%s, %d', [rec.Name, rec.Age])); end; 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; 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; end.