• Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack<T>


    跟着万一老师学习笔记

    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.
  • 相关阅读:
    SQL 学习随笔
    hibernate查询方式总结基于原生SQL查询(二)
    hibernate查询方式总结(四)之QBC,QBE查询
    Hibernate查询方式汇总之Hql查询(三)
    java 强引用,软引用,弱引用,虚引用
    JAVA-对java平台的理解
    Git SSH本机配置
    Windows下Python3解决 Microsoft Visual C++ 14.0 is required 报错
    checkpoint原理剖析与源码分析
    CacheManager原理剖析与源码分析
  • 原文地址:https://www.cnblogs.com/redhat588/p/12765216.html
Copyright © 2020-2023  润新知