泛型容器单元(Generics.Collections)[3]: TStack 堆栈列表

时间:2021-07-09 03:20:21

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

TStack 主要有三个方法、一个属性:
Push(压栈)、Pop(出栈)、Peek(查看下一个要出栈的元素);
Count(元素总数).


本例效果图:

泛型容器单元(Generics.Collections)[3]: TStack<T>   堆栈列表


代码文件:


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( + Random()), );
  rec.Age := Random();
  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 = 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 - );
end; {下一个出列的的元素: Peek}
procedure TForm1.Button3Click(Sender: TObject);
var
  rec: TRec;
begin
  if Stack.Count = then Exit;
  rec := Stack.Peek;
  ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));
end; end.

窗体文件:


object Form1: TForm1
  Left =
  Top =
  Caption = 'Form1'
  ClientHeight =
  ClientWidth =
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch =
  TextHeight =
  object Memo1: TMemo
    Left =
    Top =
    Width =
    Height =
    Align = alLeft
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -
    Font.Name = 'Courier New'
    Font.Style = []
    Lines.Strings = (
      'Memo1')
    ParentFont = False
    ScrollBars = ssBoth
    TabOrder =
  end
  object Button1: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button1'
    TabOrder =
    OnClick = Button1Click
  end
  object Button2: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button2'
    TabOrder =
    OnClick = Button2Click
  end
  object Button3: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button3'
    TabOrder =
    OnClick = Button3Click
  end
end

泛型容器单元(Generics.Collections)[3]: TStack<T> 堆栈列表的更多相关文章

  1. 泛型容器单元&lpar;Generics&period;Collections&rpar;&lbrack;2&rsqb;&colon; TQueue&lt&semi;T&gt&semi; 队列列表

    TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TQueue 主要有三个方法.一个属性:Enqueue(入列).Dequeue(出列).Pee ...

  2. Delphi 2009 泛型容器单元&lpar;Generics&period;Collections&rpar;&lbrack;1&rsqb;&colon; TList&lt&semi;T&gt&semi;

    Delphi 2009 新增了泛型容器单元: Generics.Collections, 同时还有一个 Generics.Defaults 单元做支持. Generics.Collections 包含 ...

  3. C&num;中泛型容器Stack&lt&semi;T&gt&semi;

    我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结. 关于c#中Stack<T>泛型容器: <1>st ...

  4. 从头认识java-13&period;11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?

    这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ...

  5. 泛型的排序问题(Collections&period;sort及Comparable的应用)

    一.前言    java中对泛型(集合类型)排序的问题,主要采用了两张方式一种是对要排序的实体类,实现Comparable接口,另一种方式,Collections集合工具类进行排序. 二.实现Comp ...

  6. C&num;中泛型容器Stack&lt&semi;T&gt&semi;的用法,以及借此实现&rdquo&semi;撤销&sol;重做&rdquo&semi;功能

    .Net为我们提供了众多的泛型集合.比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T ...

  7. 8、泛型程序设计与c&plus;&plus;标准模板库2&period;4列表容器

    列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历.列表容器是需要按顺序访问的容器.另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器.列表容器还提供了另一种操作- ...

  8. Delphi 2010 中的泛型

    Delphi 2010 中的泛型 2010已发布很长时间了,口碑还不错,准备用它开发下一项目,但对泛型等新东西的认识还不够,就搜了一下,发现下面这篇文章,还不错,大家一起补补课吧! C++中的模板.C ...

  9. Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)

    (该博文为原创,转载请注明出处   http://www.cnblogs.com/luyijoy/  by白手伊凡) 1.    基本概念 1)         Java为解释性语言,运行过程:程序源 ...

随机推荐

  1. php js数组问题

    <script type="text/javascript"> var a = new Array(); a = "a"; a = "b& ...

  2. PHP定界符使用技巧

    为什么要使用定界符 : 因为PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法——按字符串输出的话,肯定要有大量的转 ...

  3. sql server 分布式查询 和 主从服务器搭建

    1. 8K 对应的SQL语句限制  select  *  from openquery (recei    连接服务器名称 执行的sql 语句放在   SELECT @@SERVERNAME  在本地 ...

  4. js删除数组中的&&num;39&semi;NaN&&num;39&semi;

    js中的NaN不和任何值相等,包括自身. 所以可以使用x!=x来判断x是否是NaN,当且仅当x为NaN时,表达式的结果为true. NaN != NaN //true 可以依此删除数组中的'NaN'. ...

  5. GZFramwork数据库层《前言》DLL项目引用

    新建项目: 1. 项目引入GZFramwork.dll NuGet地址:Install-Package GZFramwork 每个项目都引用 2.BLL层 设置数据库连接维护类:继承于:GZFramw ...

  6. Linq101-Restriction

    using System; using System.Linq; namespace Linq101 { class Restriction { /// <summary> /// Thi ...

  7. 数据库分库分表&lpar;sharding&rpar;系列&lpar;三&rpar; 关于使用框架还是自主开发以及sharding实现层面的考量

    当团队对系统业务和数据库进行了细致的梳理,确定了切分方案后,接下来的问题就是如何去实现切分方案了,目前在sharding方面有不少的开源框架和产品可供参考,同时很多团队也会选择自主开发实现,而不管是选 ...

  8. iOS开发之UIApplication

    UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作. iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示:  ...

  9. UML&lowbar;组件图

    简介 众所周知,组件图是用来描述系统中的各组件之间的关系.首先我们必须知道组件的定义是什么,然后组件之间有哪些关系.理清楚这些,我们在以后的设计中才能 派上用场.UML语言对组件的定义已发生了巨大变化 ...

  10. CSS3秘笈复习:第一章&amp&semi;第二章&amp&semi;第三章

    第一章: 1.<cite>标签不仅可以将网页设置为斜体,还能给标题做上标记,使它便于被搜索引擎搜索到. 第二章: 1.import指令链接样式表: CSS本身有一种添加外部样式的方法:@i ...