泛型容器单元(Generics.Collections)[3]: TStack<T> 堆栈列表
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( + 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> 堆栈列表的更多相关文章
- 泛型容器单元(Generics.Collections)[2]: TQueue<T> 队列列表
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TQueue 主要有三个方法.一个属性:Enqueue(入列).Dequeue(出列).Pee ...
- Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList<T>
Delphi 2009 新增了泛型容器单元: Generics.Collections, 同时还有一个 Generics.Defaults 单元做支持. Generics.Collections 包含 ...
- C#中泛型容器Stack<T>
我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结. 关于c#中Stack<T>泛型容器: <1>st ...
- 从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?
这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ...
- 泛型的排序问题(Collections.sort及Comparable的应用)
一.前言 java中对泛型(集合类型)排序的问题,主要采用了两张方式一种是对要排序的实体类,实现Comparable接口,另一种方式,Collections集合工具类进行排序. 二.实现Comp ...
- C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能
.Net为我们提供了众多的泛型集合.比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T ...
- 8、泛型程序设计与c++标准模板库2.4列表容器
列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历.列表容器是需要按顺序访问的容器.另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器.列表容器还提供了另一种操作- ...
- Delphi 2010 中的泛型
Delphi 2010 中的泛型 2010已发布很长时间了,口碑还不错,准备用它开发下一项目,但对泛型等新东西的认识还不够,就搜了一下,发现下面这篇文章,还不错,大家一起补补课吧! C++中的模板.C ...
- Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)
(该博文为原创,转载请注明出处 http://www.cnblogs.com/luyijoy/ by白手伊凡) 1. 基本概念 1) Java为解释性语言,运行过程:程序源 ...
随机推荐
- NEFU 84 五指山 (扩展欧几里得)
五指山 Problem:84 Time Limit:1000ms Memory Limit:65536K Description 西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:"我与你打 ...
- osg osgDB::Options noTexturesInIVEFile ForceReadingImage dds_flip
osgDB::writeNodeFile(node, path, new osgDB::Options("noTexturesInIVEFile")); noTexturesInI ...
- C#更新SQLServer中的TimeStamp字段(时间戳) 防止同时修改一行时覆盖更新
C#更新SQLServer中的TimeStamp字段(时间戳) 分类: C#2012-10-24 15:10 1878人阅读 评论(0) 收藏 举报 public partial class Form ...
- Mysql手册—SQLStatementSyntax
14.1.1 ALTER DATABASE Syntax,可用于修改数据库字符集和校验规则 查看校验规则可如下: 由于utf8的校验规则都是ci(case insensitive),所以是不区分大小写 ...
- Android 中的缓存机制与实现
Android开发本质上就是手机和互联网中的web服务器之间进行通信,就必然需要从服务端获取数据,而反复通过网络获取数据是比较耗时的,特别是访问比较多的时候,会极大影响了性能,Android中可通过二 ...
- AJAX 汽车详细信息练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 在ubuntu上搭建开发环境7---ubuntu安装JDK
首先,当然是要下载了. 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 按 ...
- python装饰器入门
按别人的教程弄的. 要清楚基于类和基于函数的实现的不同之处. #!/usr/bin/env python # -*- coding: utf-8 -*- ''' class entryExit(obj ...
- GoLang搞一个基本的HTTP服务
慢慢和python的对应一下看看. package main import ( "fmt" "net/http" "strings" &qu ...
- SVN的忽略和只读使用方法学习记录
前言,先扯几句.最近学了GIT,虽然很肤浅,但是也算是用上了分布式版本管理控制系统.Linus很牛,他也很厌烦SVN,而我看这些都是工具,是否拿来使用主要看是否顺手.我赞同分布式版本管理控制,它有诸多 ...