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

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


本例效果图:


代码文件:


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

窗体文件:


  1. object Form1: TForm1
  2.   Left =
  3.   Top =
  4.   Caption = 'Form1'
  5.   ClientHeight =
  6.   ClientWidth =
  7.   Color = clBtnFace
  8.   Font.Charset = DEFAULT_CHARSET
  9.   Font.Color = clWindowText
  10.   Font.Height = -
  11.   Font.Name = 'Tahoma'
  12.   Font.Style = []
  13.   OldCreateOrder = False
  14.   Position = poDesktopCenter
  15.   OnCreate = FormCreate
  16.   OnDestroy = FormDestroy
  17.   PixelsPerInch =
  18.   TextHeight =
  19.   object Memo1: TMemo
  20.     Left =
  21.     Top =
  22.     Width =
  23.     Height =
  24.     Align = alLeft
  25.     Font.Charset = DEFAULT_CHARSET
  26.     Font.Color = clWindowText
  27.     Font.Height = -
  28.     Font.Name = 'Courier New'
  29.     Font.Style = []
  30.     Lines.Strings = (
  31.       'Memo1')
  32.     ParentFont = False
  33.     ScrollBars = ssBoth
  34.     TabOrder =
  35.   end
  36.   object Button1: TButton
  37.     Left =
  38.     Top =
  39.     Width =
  40.     Height =
  41.     Caption = 'Button1'
  42.     TabOrder =
  43.     OnClick = Button1Click
  44.   end
  45.   object Button2: TButton
  46.     Left =
  47.     Top =
  48.     Width =
  49.     Height =
  50.     Caption = 'Button2'
  51.     TabOrder =
  52.     OnClick = Button2Click
  53.   end
  54.   object Button3: TButton
  55.     Left =
  56.     Top =
  57.     Width =
  58.     Height =
  59.     Caption = 'Button3'
  60.     TabOrder =
  61.     OnClick = Button3Click
  62.   end
  63. end

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

  1. 泛型容器单元(Generics.Collections)[2]: TQueue<T> 队列列表

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

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

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

  3. C#中泛型容器Stack<T>

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

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

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

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

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

  6. C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能

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

  7. 8、泛型程序设计与c++标准模板库2.4列表容器

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

  8. Delphi 2010 中的泛型

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

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

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

随机推荐

  1. NEFU 84 五指山 (扩展欧几里得)

    五指山 Problem:84 Time Limit:1000ms Memory Limit:65536K Description 西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:"我与你打 ...

  2. osg osgDB::Options noTexturesInIVEFile ForceReadingImage dds_flip

    osgDB::writeNodeFile(node, path, new osgDB::Options("noTexturesInIVEFile")); noTexturesInI ...

  3. C#更新SQLServer中的TimeStamp字段(时间戳) 防止同时修改一行时覆盖更新

    C#更新SQLServer中的TimeStamp字段(时间戳) 分类: C#2012-10-24 15:10 1878人阅读 评论(0) 收藏 举报 public partial class Form ...

  4. Mysql手册—SQLStatementSyntax

    14.1.1 ALTER DATABASE Syntax,可用于修改数据库字符集和校验规则 查看校验规则可如下: 由于utf8的校验规则都是ci(case insensitive),所以是不区分大小写 ...

  5. Android 中的缓存机制与实现

    Android开发本质上就是手机和互联网中的web服务器之间进行通信,就必然需要从服务端获取数据,而反复通过网络获取数据是比较耗时的,特别是访问比较多的时候,会极大影响了性能,Android中可通过二 ...

  6. AJAX 汽车详细信息练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 在ubuntu上搭建开发环境7---ubuntu安装JDK

    首先,当然是要下载了. 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 按 ...

  8. python装饰器入门

    按别人的教程弄的. 要清楚基于类和基于函数的实现的不同之处. #!/usr/bin/env python # -*- coding: utf-8 -*- ''' class entryExit(obj ...

  9. GoLang搞一个基本的HTTP服务

    慢慢和python的对应一下看看. package main import ( "fmt" "net/http" "strings" &qu ...

  10. SVN的忽略和只读使用方法学习记录

    前言,先扯几句.最近学了GIT,虽然很肤浅,但是也算是用上了分布式版本管理控制系统.Linus很牛,他也很厌烦SVN,而我看这些都是工具,是否拿来使用主要看是否顺手.我赞同分布式版本管理控制,它有诸多 ...